阅读 93

详解Java快速上手用户后台管理系统

只有在实战中练习才能真正获得能力的提升,本篇文章手把手带你用Java快速上手实现一个用户后台管理系统,大家可以在过程中查缺补漏,提升水平

目录
  • 主要功能

    • 登录功能

    • 管理员列表

    • 用户列表

    • 订单管理

主要功能

管理员登录功能、管理员列表操作、用户列表操作、订单管理

登录功能

设计思路:前端页面获取输入的数据,然后发送Ajax请求,在servlet中获取数据并调用service层中的方法进行处理,service层中调用dao层的实现方法,最终servlet返回一个结果集,判断登录是否成功。

login.html主要功能代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script>
    $(function () {
        $("#btn_login").click(function () {
            //获取数据
            let username = $("#username").val();
            let password = $("#password").val();
            //数据处理
            $.post("admin/login", {username: username, password: password}, function (result) {
                if (result.flag) {
                    location.href = "index.html";
                } else {
                    alert(result.errorMsg);
                }
            });
        });
    })
</script>

servlet中功能代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//登录
public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //获取用户名和密码
    String username = request.getParameter("username");
    String password = request.getParameter("password");
 
    //封装管理员对象
    Administrator admin = new Administrator();
    admin.setAname(username);
    admin.setPassword(password);
 
    //创建结果对象
    ResultInfo resultInfo = new ResultInfo();
    //调用service查询
    Administrator administrator = service.login(admin);
    if (administrator == null) {
        resultInfo.setFlag(false);
        resultInfo.setErrorMsg("用户名或密码错误!");
    }
    if (administrator != null && !administrator.getStatus().equals("Y")) {
        resultInfo.setFlag(false);
        resultInfo.setErrorMsg("该账户未激活!");
    }
    if (administrator != null && administrator.getStatus().equals("Y")) {
        resultInfo.setFlag(true);
        //设置session
        request.getSession().setAttribute("username", administrator.getAname());
    }
 
    //调用父类中定义的方法,转json数据后回传
    writeValue(resultInfo, response);
}

service层中代码实现:

1
2
3
4
@Override
public Administrator login(Administrator administrator) {
    return dao.login(administrator);
}

dao层中代码实现:

1
2
3
4
5
6
7
8
9
10
11
@Override
public Administrator login(Administrator administrator) {
    Administrator admin = null;
    try {
        String sql = "SELECT * FROM administrator WHERE aname = ? AND PASSWORD = ?";
        admin = template.queryForObject(sql, new BeanPropertyRowMapper<>(Administrator.class), administrator.getAname(), administrator.getPassword());
    } catch (Exception e) {
 
    }
    return admin;
}

实现效果:

管理员列表

设计思路:数据操作与登录功能大同小异,实现了管理员的增删改查,在此重点介绍分页、模糊查询。

admin_list.html主要功能代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<script>
    $(function () {
        let name = null;
        $("#btn_search").click(function () {
            name = $('#admin_name').val();
            load(null, name)
            //取消按钮的默认跳转行为 导致会刷新页面
            return false;
        })
        load(null, name);
    });
     
    function load(currentPage, admin_name) {
        //发送ajax请求,请求route/pageQuery,传递cid
        $.get("admin/pageQuery", {currentPage: currentPage, admin_name: admin_name}, function (pb) {
            //定义字符
            let lis = "";
 
            //计算上一页的页码
            let beforeNum = pb.currentPage - 1;
            if (beforeNum <= 0) {
                beforeNum = 1;
            }
            let beforePage = '<a class="prev" href="javascript:load(' + beforeNum + ',\'' + admin_name + '\')" rel="external nofollow" >&lt;&lt;</a>';
            lis += beforePage;
 
            //定义开始位置begin,结束位置end
            let begin;
            let end;
 
            if (pb.totalPage < 10) {
                //总页码不足10页
                begin = 1;
                end = pb.totalPage;
            } else {
                //总页码超过10页
                begin = pb.currentPage - 5;
                end = pb.currentPage + 4;
 
                //前边不足5个,后边补齐
                if (begin < 1) {
                    begin = 1;
                    end = begin + 9;
                }
 
                if (end > pb.totalPage) {
                    end = pb.totalPage;
                    begin = end - 9;
                }
            }
 
            //展示分页页码
            for (let i = begin; i <= end; i++) {
                let li;
                //判断当前页码是否等于i,创建页码的li
                if (pb.currentPage === i) {
                    li = '<a class="num" href="javascript:load(' + i + ',\'' + admin_name + '\')" rel="external nofollow"  rel="external nofollow" ><span class="current">' + i + '</span></a>';
                } else {
                    li = '<a class="num" href="javascript:load(' + i + ',\'' + admin_name + '\')" rel="external nofollow"  rel="external nofollow" >' + i + '</a>';
                }
                //拼接字符串
                lis += li;
            }
 
            //计算下一页的页码
            let nextNum = pb.currentPage + 1;
            if (nextNum >= pb.totalPage) {
                nextNum = pb.totalPage;
            }
            let nextPage = '<a class="next" href="javascript:load(' + nextNum + ',\'' + admin_name + '\')" rel="external nofollow" >&gt;&gt;</a>';
            lis += nextPage;
 
            //将lis内容设置到ul
            $("#pageNum").html(lis);
 
            //列表数据展示
            let admin_lis = "";
            for (let i = 0; i < pb.list.length; i++) {
                let admin = pb.list[i];
 
                let li;
                if (admin.status === "Y") {
                    li = '<tr>\n' +
                        '    <td>\n' +
                        '        <input type="checkbox" name="checkedId" id="checkedId" lay-skin="primary">\n' +
                        '        <div class="layui-unselect layui-form-checkbox" lay-skin="primary"><i class="layui-icon layui-icon-ok"></i></div>' +
                        '    </td>\n' +
                        '    <td>' + admin.aid + '</td>\n' +
                        '    <td>' + admin.aname + '</td>\n' +
                        '    <td>' + admin.phone + '</td>\n' +
                        '    <td>' + admin.email + '</td>\n' +
                        '    <td>' + admin.role + '</td>\n' +
                        '    <td>' + admin.date + '</td>\n' +
                        '    <td class="td-status">\n' +
                        '        <span class="layui-btn layui-btn-normal layui-btn-mini" style="background-color: #1E9FFF">已启用</span></td>\n' +
                        '    <td class="td-manage">\n' +
                        '        <a onclick="member_stop(this,' + admin.aid + ')" href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  title="启用">\n' +
                        '            <i class="layui-icon">&#xe601;</i>\n' +
                        '        </a>\n' +
                        '        <a title="编辑" onclick="xadmin.open(\'编辑管理员\',\'admin-edit.html?aid=' + admin.aid + '\',600,500)" href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >\n' +
                        '            <i class="layui-icon">&#xe642;</i>\n' +
                        '        </a>\n' +
                        '        <a title="删除" onclick="member_del(this,\'要删除的id\')" href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >\n' +
                        '            <i class="layui-icon">&#xe640;</i>\n' +
                        '        </a>\n' +
                        '    </td>\n' +
                        '</tr>';
                } else if (admin.status === "N") {
                    li = '<tr>\n' +
                        '    <td>\n' +
                        '        <input type="checkbox" name="checkedId" id="checkedId" lay-skin="primary">\n' +
                        '        <div class="layui-unselect layui-form-checkbox" lay-skin="primary"><i class="layui-icon layui-icon-ok"></i></div>' +
                        '    </td>\n' +
                        '    <td>' + admin.aid + '</td>\n' +
                        '    <td>' + admin.aname + '</td>\n' +
                        '    <td>' + admin.phone + '</td>\n' +
                        '    <td>' + admin.email + '</td>\n' +
                        '    <td>' + admin.role + '</td>\n' +
                        '    <td>' + admin.date + '</td>\n' +
                        '    <td class="td-status">\n' +
                        '        <span class="layui-btn layui-btn-normal layui-btn-mini" style="background-color: gray">已停用</span></td>\n' +
                        '    <td class="td-manage">\n' +
                        '        <a onclick="member_stop(this,' + admin.aid + ')" href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  title="停用">\n' +
                        '            <i class="layui-icon">&#xe62f;</i>\n' +
                        '        </a>\n' +
                        '        <a title="编辑" onclick="xadmin.open(\'编辑管理员\',\'admin-edit.html?aid=' + admin.aid + '\',600,500)" href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >\n' +
                        '            <i class="layui-icon">&#xe642;</i>\n' +
                        '        </a>\n' +
                        '        <a title="删除" onclick="member_del(this,\'要删除的id\')" href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >\n' +
                        '            <i class="layui-icon">&#xe640;</i>\n' +
                        '        </a>\n' +
                        '    </td>\n' +
                        '</tr>';
                }
                admin_lis += li;
            }
            //设置列表数据
            $("#admin_msg").html(admin_lis);
        });
    }
</script>

servlet中功能代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//分页、模糊查询
public void pageQuery(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //接收参数
    String currentPageStr = request.getParameter("currentPage");
    //接收admin_name管理员名称
    String admin_name = request.getParameter("admin_name");
    //判断admin_name是否为null
    if (admin_name != null && !"null".equals(admin_name) && admin_name.length() > 0) {
        admin_name = new String(admin_name.getBytes("iso-8859-1"), "utf-8");
    } else {
        admin_name = "";
    }
 
    int currentPage = 0; //当前页码,不传递参数,默认为1
    if (currentPageStr != null && currentPageStr.length() > 0) {
        currentPage = Integer.parseInt(currentPageStr);
    } else {
        currentPage = 1;
    }
 
    //每页显示条数,默认为5
    int pageSize = 5;
 
    //调用service查询PageBean对象
    PageBean<Administrator> pb = service.pageQuery(currentPage, pageSize, admin_name);
 
    //将pageBean对象序列化为json,返回
    writeValue(pb, response);
}

service层中代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Override
public PageBean<Administrator> pageQuery(int currentPage, int pageSize, String admin_name) {
    //封装PageBean
    PageBean<Administrator> pb = new PageBean<>();
    //设置当前页码
    pb.setCurrentPage(currentPage);
    //设置每页显示条数
    pb.setPageSize(pageSize);
 
    //设置总记录数
    int totalCount = dao.findTotalCount(admin_name);
 
    pb.setTotalCount(totalCount);
    //设置当前页显示的数据集合
    int start = (currentPage - 1) * pageSize; //开始的记录数
    List<Administrator> list = dao.findByPage(start, pageSize, admin_name);
    pb.setList(list);
 
    //设置总页数  = 总记录数/每页显示条数
    int totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : (totalCount / pageSize) + 1;
    pb.setTotalPage(totalPage);
 
    return pb;
}

dao层中代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@Override
public int findTotalCount(String admin_name) {
    //定义sql模板
    String sql = "SELECT COUNT(*) FROM administrator WHERE 1=1 ";
    StringBuilder sb = new StringBuilder(sql);
    //条件
    List<Object> params = new ArrayList<>();
    if (admin_name != null && admin_name.length() > 0) {
        sb.append(" and aname like ? ");
        params.add("%" + admin_name + "%");
    }
    sql = sb.toString();
    return template.queryForObject(sql, Integer.class, params.toArray());
}
 
@Override
public List<Administrator> findByPage(int start, int pageSize, String admin_name) {
    String sql = "SELECT * FROM administrator WHERE 1=1 ";
    StringBuilder sb = new StringBuilder(sql);
    //条件
    List<Object> params = new ArrayList<>();
    //判断参数是否有值
    if (admin_name != null && admin_name.length() > 0) {
        sb.append(" and aname like ? ");
        params.add("%" + admin_name + "%");
    }
    //分页条件
    sb.append(" limit ?,? ");
    params.add(start);
    params.add(pageSize);
    //转字符串
    sql = sb.toString();
    return template.query(sql, new BeanPropertyRowMapper<>(Administrator.class), params.toArray());
}

实现效果:

用户列表

设计思路:与管理员列表设计思路基本类似。

实现效果:

订单管理

设计思路:与管理员列表设计思路基本类似。

到此这篇关于详解Java快速上手用户后台管理系统的文章就介绍到这了

原文链接:https://blog.csdn.net/fhsbvs/article/details/122250293?utm_medium=distribute.pc_feed_blog_category.none-task-blog-classify_tag-12.nonecasedepth_1-utm_source=distribute.pc_feed_blog_category.none-task-blog-classify_tag-12.nonecase


    文章分类
    百科问答
    版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
    相关推荐