用户管理系统——(二)项目准备及用户展示


前言

搭建一个项目如同搭建一个房子,要把准备工作做好才能更好的建好这栋房子,比如数据库四大参数啊,JDBC工具类,日期工具类,数据库…


一、项目流程图

在这里插入图片描述
正所谓一图走天下,一个项目的流程基本上都在此图上进行操作,以后的框架底层无非也是这样,只是简化了我们对代码的书写,封装了一些冗余的代码

二、项目结构

在这里插入图片描述

1.项目搭建介绍

1.db.properties存放的是数据库四大参数然后通过util包下的JdbcUtil连接数据库
2.pojo包:存放实体类的一个包,实体类的属性根据数据库的字段名来编写
在这里插入图片描述
其中Admin是管理员的实体类,User是联系人的实体类;
3.dao包:是对数据库的更新
在这里插入图片描述
为什么dao层跟service层要写接口跟实现类呢?
接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合,可以将其理解成一种规范.如果项目中,Dao层或Service层只需要一种实现,那么直接编写实现类可以减少代码量与复杂度,如果项目中Dao层或Service层需要有多个实现类,使用接口可以实现解耦,例如Dao层可以使用JDBC或者MyBatis,而不需要修改Service层的代码
4.service层
在这里插入图片描述

service层也叫业务逻辑层,而本项目是弱业务基本上就是调用dao层,当然service层也有接口类跟实现类
5.servlet层:
在这里插入图片描述
6.util包
在这里插入图片描述
util包下就是对一些公共方法的封装
CookieUtil是cookie 就是登录的时候点击记住密码,将用户名密码保存在浏览器的cookie中实现记住我功能
FileUtils是文件类,用与显示用户头像,目前项目的头像是保存在本地的一个包下,然后FileUtils也对这写保存的图片或文件进行加密UUID + 时间戳
JdbcUtil就是jdbc的连接
7.exception包
自定义异常包

也就是web层主要就是获取前端的参数然后对页面进行转发或者重定向,一般在里面不书写逻辑代码只进行简单的if判断

三、前端页面

1.用户列表

<form id="queryForm" class="form-inline" action="${pageContext.request.contextPath}/queryByPage" method="post">
            <!--页面传过来-->
            <input type="hidden" id="currentPage" name="currentPage" value="1"/>
            <div class="form-group">
                <label for="exampleInputName2">姓名</label>
                <input type="text" name="name" value="${userCondition.name}" class="form-control"
                       id="exampleInputName2">
            </div>
            <div class="form-group">
                <label for="address">籍贯</label>
                <%--                <input type="text" name="address" value="${condition.address[0]}" class="form-control" id="exampleInputName3" >--%>
                <select name="address" class="form-control" id="address">
                    <option value="">请选择</option>
                    <option value="陕西" <c:if test="${userCondition.address =='陕西'}">selected</c:if>>陕西</option>
                    <option value="北京" <c:if test="${userCondition.address =='北京'}">selected</c:if>>北京</option>
                    <option value="上海" <c:if test="${userCondition.address =='上海'}">selected</c:if>>上海</option>
                </select>
            </div>
            <div class="form-group">
                <label for="exampleInputEmail2">邮箱</label>
                <input type="text" name="email" value="${userCondition.email}" class="form-control"
                       id="exampleInputEmail2">
            </div>
            <button type="submit" class="btn btn-default">查询</button>
        </form>

这只是部分的前端列表展示的代码,关于jQuery一些事件的操作我都没有放入上面,等这系列博客写完我再把码云地址加入进来

四、后端

首先根据流程图我们知道前端发生请求(get/post)给后台,后台首先进入servlet获取前端请求,然后再调用service层,service书写一些业务逻辑代码,然后再调用dao层对数据库进行更新
这里是查询所有不用带数据过去所有采用get请求 但是后台要把数据库的内容传给前端展示所有service层放回类型为list(因为展示肯定是多个user对象)
servlet

@WebServlet("/listUserServlet")
public class ListUserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置响应编码
        response.setContentType("text/html;charset=utf-8");
        //业务层
        UserService userService = new UserServiceImpl();
        List<User> users = userService.queryuser();
        //保存到域
        request.setAttribute("users", users);
        //System.out.println(users);
        //转发
        request.getRequestDispatcher("/list.jsp").forward(request,response);
    }

不设置响应编码的话会出现乱码,同时通过request.setAttribute(“users”, users)保存到域中,users是传过去接收参数,而第二个users是传过去的数据库数据

service

 /**
     * 查询
     * @return
     */
    @Override
    public List<User> queryuser() {
        List<User> users = userDao.queryall();
        return  users;
    }

dao

/**
     * 查询所有
     *
     * @return
     */
    @Override
    public List<User> queryall() {
        Connection coon = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;
        try {
            coon = JdbcUtil.getConnection();
            String sql = "SELECT * FROM tb_emp";
            pstm = coon.prepareStatement(sql);
            rs = pstm.executeQuery();
            List<User> users = paserResultSet(rs);
            return users;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(rs, pstm, coon);
        }
        return null;
    }

调用Jdbc连接数据库,因为解析result不止这一个方法所有将result的解析进行封装

private List<User> paserResultSet(ResultSet rs) throws SQLException {
        if (rs != null) {
            List<User> users = new ArrayList<>();
            while (rs.next()) {
                //创建一个学生对象
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setGender(rs.getString("gender"));
                user.setAge(rs.getInt("age"));
                user.setAddress(rs.getString("address"));
                user.setQQ(rs.getString("qq"));
                user.setEmail(rs.getString("email"));
                user.setPhoto(rs.getString("photo"));
                users.add(user);
            }
            return users;
        }
        return null;
    }

在这里插入图片描述
因为由index跳转到用户展示页面是一个get请求 所以在doget书写代码,前端不传参数过来但是后端要穿数据到前端
通过jsp,jstl解析users,展示用户信息差不多就是这样的一个流程

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值