JavaWeb:用户信息管理系统总结

当当当当~~~~欢迎大家阅读,今天我们总结用户信息管理系统的流程

该系统主要分为两部分,一部分是简单功能(增删改查)的基础实现;

一部分是复杂功能删除选中,分页查询,复杂条件查询的实现;

简单功能

首先我们来看一下登录界面

一:登录

(一):登录界面

1:html登录界面

JavaWeb:用户信息管理系统总结_第1张图片

2:html代码 

  
  	

管理员登录


3:改进后的jsp登录界面

JavaWeb:用户信息管理系统总结_第2张图片

4:页面代码的改进

在html基础上添加了servlet与后端交互,并且在登录时插入了验证码的校验

 (二):后端代码实现

1:LoginServlet

 //1.设置编码
        request.setCharacterEncoding("utf-8");

        //2.获取数据
        //2.1获取用户填写验证码
        String verifycode = request.getParameter("verifycode");

        //3.验证码校验
        HttpSession session = request.getSession();
        String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
        session.removeAttribute("CHECKCODE_SERVER");//确保验证码一次性
        if(!checkcode_server.equalsIgnoreCase(verifycode)){
            //验证码不正确
            //提示信息
            request.setAttribute("login_msg","验证码错误!");
            //跳转登录页面
            request.getRequestDispatcher("/login.jsp").forward(request,response);

            return;
        }

        Map map = request.getParameterMap();
        //4.封装User对象
        User user = new User();
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }


        //5.调用Service查询
        UserService service = new UserServiceImpl();
        User loginUser = service.login(user);
        //6.判断是否登录成功
        if(loginUser != null){
            //登录成功
            //将用户存入session
            session.setAttribute("user",loginUser);
            //跳转页面
            response.sendRedirect(request.getContextPath()+"/index.jsp");
        }else{
            //登录失败
            //提示信息
            request.setAttribute("login_msg","用户名或密码错误!");
            //跳转登录页面
            request.getRequestDispatcher("/login.jsp").forward(request,response);

        }

2:UserServiceImpl(login)

 @Override
    public User login(User user) {

        return dao.findUserByUsernameAndPassword(user.getUsername(),user.getPassword());
    }

3:UserDaoImpl(findUserByUsernameAndPassword)

 @Override
    public User findUserByUsernameAndPassword(String username, String password) {
        try {
            String sql = "select * from user where username = ? and password = ?";
            User user = template.queryForObject(sql, new BeanPropertyRowMapper(User.class), username, password);
            return user;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

登录界面完成并且登录成功后,接下来我们开始进行用户信息的列表查询!

二:查询

(一):查询界面

1:点击查询所有用户信息进入用户信息列表界面

 JavaWeb:用户信息管理系统总结_第3张图片

2:查询界面的jsp代码

        
            
编号 姓名 性别 年龄 籍贯 QQ 邮箱 操作
${s.count} ${user.name} ${user.gender} ${user.age} ${user.address} ${user.qq} ${user.email}

 (二):后端代码实现

1:UserListServlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.调用UserService完成查询
        UserService service = new UserServiceImpl();
        List users = service.findAll();
        //2.将list存入request域
        request.setAttribute("users",users);
        //3.转发到list.jsp
        request.getRequestDispatcher("/list.jsp").forward(request,response);
}

2:UserServiceImpl(findAll) 

 @Override
    public List findAll() {
        //调用Dao完成查询
        return dao.findAll();
    }

3:UserDaoImpl(findAll) 

 @Override
    public List findAll() {
        //使用JDBC操作数据库...
        //1.定义sql
        String sql = "select * from user";
        List users = template.query(sql, new BeanPropertyRowMapper(User.class));

        return users;
    }

 三:添加用户信息

(一):添加界面 

1:在list页面上补充一个添加联系人的按钮

JavaWeb:用户信息管理系统总结_第4张图片

2:点击按钮进入添加联系人界面

JavaWeb:用户信息管理系统总结_第5张图片

3:Add 界面的jsp代码


添加联系人页面

(二):后端代码实现

1:添加功能的思路分析 

2:AddUserServlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置编码
        request.setCharacterEncoding("utf-8");
        //2.获取参数
        Map map = request.getParameterMap();
        //3.封装对象
        User user = new User();
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

        //4.调用Service保存
        UserService service = new UserServiceImpl();
        service.addUser(user);

        //5.跳转到userListServlet
            response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");
    }

3:UserServiceImpl(addUser)

    @Override
    public void addUser(User user) {
        dao.add(user);
    }

4:UserDaoImpl(add)

 @Override
    public void add(User user) {
        //1.定义sql
        String sql = "insert into user values(null,?,?,?,?,?,?,null,null)";
        //2.执行sql
        template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());
    }

四:删除单个用户信息

(一):添加删除按钮 

 删除

(二):后端代码实现

1:删除功能的思路分析

2:DelUserServlet(先获取id,通过id,删除用户信息)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取id
        String id = request.getParameter("id");
        //2.调用service删除
        UserService service = new UserServiceImpl();
        service.deleteUser(id);

        //3.跳转到查询所有Servlet
        response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");
}

3:UserServiceImpl(deleteUser)

    @Override
    public void deleteUser(String id) {
        dao.delete(Integer.parseInt(id));
    }

4:UserDaoImpl(delete) 

 @Override
    public void delete(int id) {
        //1.定义sql
        String sql = "delete from user where id = ?";
        //2.执行sql
        template.update(sql, id);
}

 五:修改用户信息

(一):修改用户信息界面

 1:html界面

JavaWeb:用户信息管理系统总结_第6张图片

2:html代码


        

修改联系人

3:改进后的jsp修改界面

JavaWeb:用户信息管理系统总结_第7张图片

 4:页面改进后的代码

添加可以自由选择性别和籍贯的判断


        

修改联系人

(二):后端代码实现

1:修改功能的思路分析

2:FindUserServlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取id
        String id = request.getParameter("id");
        //2.调用Service查询
        UserService service = new UserServiceImpl();
        User user = service.findUserById(id);

        //3.将user存入request
        request.setAttribute("user",user);
        //4.转发到update.jsp
        request.getRequestDispatcher("/update.jsp").forward(request,response);
    }

3:UpdateUserServlet

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置编码
        request.setCharacterEncoding("utf-8");
        //2.获取map
        Map map = request.getParameterMap();
        //3.封装对象
        User user = new User();
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

        //4.调用Service修改
        UserService service = new UserServiceImpl();
        service.updateUser(user);

        //5.跳转到查询所有Servlet
        response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");
    }

4:UserServiceImpl(updateUser)

 @Override
    public void updateUser(User user) {
        dao.update(user);
    }

5:UserDaoImpl(update)

@Override
    public void update(User user) {
        String sql = "update user set name = ?,gender = ? ,age = ? , address = ? , qq = ?, email = ? where id = ?";
        template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail(), user.getId());
    }

复杂功能

一:删除选中

 (一):删除选中界面

1:在list页面添加删除选中的按钮,并且给删除选中添加单击事件

     
            window.onload = function(){
            //给删除选中按钮添加单击事件
            document.getElementById("delSelected").onclick = function(){
                if(confirm("您确定要删除选中条目吗?")){
                   var flag = false;
                    //判断是否有选中条目
                    var cbs = document.getElementsByName("uid");
                    for (var i = 0; i < cbs.length; i++) {
                        if(cbs[i].checked){
                            //有一个条目选中了
                            flag = true;
                            break;
                        }
                    }
                    if(flag){//有条目被选中
                        //表单提交
                        document.getElementById("form").submit();
                    }
                }
            }
          }

2:删除选中时可以添加全部选中

JavaWeb:用户信息管理系统总结_第8张图片

 //1.获取第一个cb
            document.getElementById("firstCb").onclick = function(){
                //2.获取下边列表中所有的cb
                var cbs = document.getElementsByName("uid");
                //3.遍历
                for (var i = 0; i < cbs.length; i++) {
                    //4.设置这些cbs[i]的checked状态 = firstCb.checked
                    cbs[i].checked = this.checked;
                }
            }

(二):后端代码实现

1:删除选中的思路分析

2:DelSelectedServlet

public class DelSelectedServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取所有id
        String[] ids = request.getParameterValues("uid");
        //2.调用service删除
        UserService service = new UserServiceImpl();
        service.delSelectedUser(ids);

        //3.跳转查询所有Servlet
        response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");
    }

3:UserService(delSelectedUser)

  //删除选中用户
    @Override
    public void delSelectedUser(String[] ids) {
        if(ids != null && ids.length > 0){
            //1.遍历数组
            for (String id : ids) {
                //2.调用dao删除
                dao.delete(Integer.parseInt(id));
            }
        }
    }

二:分页查询

(一):分页查询页面 

1:在list.jsp中添加组件分页栏

(二):后端代码实现

1:分页查询实体类的思路分析

1:添加一个分页查询相关的类

public class PageBean {
    private int totalCount; // 总记录数
    private int totalPage ; // 总页码
    private List list ; // 每页的数据
    private int currentPage ; //当前页码
    private int rows;//每页显示的记录数

2:分页查询的逻辑思路分析

3:FindUserByPageServlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        //1.获取参数
        String currentPage = request.getParameter("currentPage");//当前页码
        String rows = request.getParameter("rows");//每页显示条数

        if(currentPage == null || "".equals(currentPage)){

            currentPage = "1";
        }
        if(rows == null || "".equals(rows)){
            rows = "5";
        }
        //获取条件查询参数
        Map condition = request.getParameterMap();
        //2.调用service查询
        UserService service = new UserServiceImpl();
        PageBean pb = service.findUserByPage(currentPage,rows,condition);
        System.out.println(pb);
        //3.将PageBean存入request
        request.setAttribute("pb",pb);
        request.setAttribute("condition",condition);//将查询条件存入request
        //4.转发到list.jsp
        request.getRequestDispatcher("/list.jsp").forward(request,response);
    }

4:UserService(findUserByPage)

//分页条件查询
    @Override
    public PageBean findUserByPage(String _currentPage, String _rows, Map condition) {

        int currentPage = Integer.parseInt(_currentPage);
        int rows = Integer.parseInt(_rows);

        //第1页的上一页永远返回1
        if(currentPage <=0) {
            currentPage = 1;
        }

        //1.创建空的PageBean对象
        PageBean pb = new PageBean();
        //2.设置参数
        pb.setCurrentPage(currentPage);
        pb.setRows(rows);

        //3.调用dao查询总记录数
        int totalCount = dao.findTotalCount(condition);
        pb.setTotalCount(totalCount);
        //4.调用dao查询List集合
        //计算开始的记录索引
        int start = (currentPage - 1) * rows;
        List list = dao.findByPage(start,rows,condition);
        pb.setList(list);

        //5.计算总页码
        int totalPage = (totalCount % rows)  == 0 ? totalCount/rows : (totalCount/rows) + 1;
        pb.setTotalPage(totalPage);


        return pb;
    }

5:UserDaoImpl(findTotalCount)

//查询总记录数
    @Override
    public int findTotalCount() {
        //1.定义模板初始化sql
        String sql = "select count(*) from user";
      
        return template.queryForObject(sql,Integer.class);
    }

6:UserDaoImpl(findByPage) 

 //分页条件查询
    @Override
    public List findByPage(int start, int rows) {
        String sql = "select * from user limit?,? ;
        return template.query(sql,new BeanPropertyRowMapper,start,rows);
    }

三:复杂条件查询

(一):复杂条件查询界面

1:复杂条件查询的界面展示 

 2:复杂条件查询的jsp代码

(二):后端代码实现

1:复杂条件查询的思路分析

2:在分页查询的FindUserByPageServlet基础上查询复杂条件的参数集合并传参

//获取条件查询参数
        Map condition = request.getParameterMap();
//2.调用service查询
        UserService service = new UserServiceImpl();
        PageBean pb = service.findUserByPage(currentPage,rows,condition);
        System.out.println(pb);

3:在分页查询的UserService(findUserByPage) 的基础上传参

//3.调用dao查询总记录数
        int totalCount = dao.findTotalCount(condition);
        pb.setTotalCount(totalCount);
        //4.调用dao查询List集合
        //计算开始的记录索引
        int start = (currentPage - 1) * rows;
        List list = dao.findByPage(start,rows,condition);
        pb.setList(list);

4:在分页查询的UserDaoImpl(findTotalCount)基础上判断复杂条件查询是否有值并且获取值

//查询总记录数
    @Override
    public int findTotalCount(Map condition) {
        //1.定义模板初始化sql
        String sql = "select count(*) from user where 1 = 1 ";
        StringBuilder sb = new StringBuilder(sql);
        //2.遍历map
        Set keySet = condition.keySet();
        //定义参数的集合
        List params = new ArrayList();
        for (String key : keySet) {

            //排除分页条件参数
            if("currentPage".equals(key) || "rows".equals(key)){
                continue;
            }

            //获取value
            String value = condition.get(key)[0];
            //判断value是否有值
            if(value != null && !"".equals(value)){
                //有值
                sb.append(" and "+key+" like ? ");
                params.add("%"+value+"%");//?条件的值
            }
        }
        System.out.println(sb.toString());
        System.out.println(params);

        return template.queryForObject(sb.toString(),Integer.class,params.toArray());
    }
 
  

5:在分页查询的UserDaoImpl(findByPage) 基础上遍历复杂条件查询的集合并为查询到的值做分页处理

 //分页条件查询
    @Override
    public List findByPage(int start, int rows, Map condition) {
        String sql = "select * from user  where 1 = 1 ";

        StringBuilder sb = new StringBuilder(sql);
        //2.遍历map
        Set keySet = condition.keySet();
        //定义参数的集合
        List params = new ArrayList();
        for (String key : keySet) {

            //排除分页条件参数
            if("currentPage".equals(key) || "rows".equals(key)){
                continue;
            }

            //获取value
            String value = condition.get(key)[0];
            //判断value是否有值
            if(value != null && !"".equals(value)){
                //有值
                sb.append(" and "+key+" like ? ");
                params.add("%"+value+"%");//?条件的值//模糊查询
            }
        }

        //添加分页查询
        sb.append(" limit ?,? ");
        //添加分页查询参数值
        params.add(start);
        params.add(rows);
        sql = sb.toString();
        System.out.println(sql);
        System.out.println(params);

        return template.query(sql,new BeanPropertyRowMapper(User.class),params.toArray());
    } 
  

以上就是用户信息管理系统的内容啦,希望我的文章对你有所帮助,如果有错误的地方还望大家批评指正,谢谢大家阅读!  

JavaWeb:用户信息管理系统总结_第9张图片

你可能感兴趣的:(JavaWeb基础,tomcat,java,html5,sql)