javaWeb学习-----smbms(修改密码,用户管理底层)

4.密码修改

4.1.编写前端页面

​ 写项目,建议从底层向上写,思考功能和架构。
请添加图片描述

4.2.userDao接口

//修改当前密码
public int updatePwd(Connection connection,int id,String userPassword) throws Exception;

4.3.userDao的实现类

//修改当前用户密码
@Override
public int updatePwd(Connection connection, int id, String userPassword) throws Exception {
    int i = 0;
    PreparedStatement preparedStatement = null;

    if (connection != null){
        String sql = "update smbms_user set userPassword = ? where id = ?";
        Object[] params = {userPassword,id};
        i = Base.execute(connection, preparedStatement, sql, params);
    }
    Base.close(null,preparedStatement,null);
    return i;
}

4.4.userService接口

//修改用户密码
public boolean updatePwd(int id, String userPassword) throws Exception;

4.5.userService的实现类

//修改当前用户的密码
@Override
public boolean updatePwd(int id, String userPassword){
    boolean flag = false;
    Connection connection = null;
    try {
        connection = Base.getConnection();
        if (userDAO.updatePwd(connection,id,userPassword) > 0){
            flag = true;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        Base.close(connection,null,null);
    }
    return flag;
}

4.6.userServet

public class UserServlet extends HttpServlet {
    //servlet:控制层,调用业务层代码
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //从session里面拿id
        Object user = req.getSession().getAttribute(Constans.USER_SESSION);
        String newpassword = req.getParameter("newpassword");
        boolean flag = false;
        //调用userService中的方法
        if (user != null && !StringUtils.isNullOrEmpty(newpassword)){
            UserService userService = new UserServiceImpl();
            try {
                flag = userService.updatePwd(((User) user).getId(), newpassword);
                if (flag){
                    req.setAttribute("message","修改密码成功,请退出,使用新密码登录。");
                    //密码修改成功,移除session
                    req.getSession().removeAttribute(Constans.USER_SESSION);
                }else {
                    req.setAttribute("message","修改密码失败。");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }else {
            req.setAttribute("message","新密码有问题。");
        }
        req.getRequestDispatcher("jap/pwdmodify.jsp").forward(req,resp);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

4.7.优先使用Ajax修改密码

使用阿里巴巴的fastJson,导入包


    com.alibaba
    fastjson
    1.2.75

//servlet方法复用
public class UserServlet extends HttpServlet {
    //servlet:控制层,调用业务层代码
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getParameter("method");
        if (method.equals("savepwd")&&method!=null){
            this.updatePwd(req,resp);
        }else if (method.equals("pwdmodify")&&method!=null){
            this.pwdModify(req,resp);
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
    //修改密码
    public void updatePwd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //从session里面拿id
        Object user = req.getSession().getAttribute(Constans.USER_SESSION);
        String newpassword = req.getParameter("newpassword");
        boolean flag = false;
        //调用userService中的方法
        if (user != null && !StringUtils.isNullOrEmpty(newpassword)){
            UserService userService = new UserServiceImpl();
            try {
                flag = userService.updatePwd(((User) user).getId(), newpassword);
                if (flag){
                    req.setAttribute("message","修改密码成功,请退出,使用新密码登录。");
                    //密码修改成功,移除session
                    req.getSession().removeAttribute(Constans.USER_SESSION);
                }else {
                    req.setAttribute("message","修改密码失败。");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }else {
            req.setAttribute("message","新密码有问题。");
        }
        req.getRequestDispatcher("jap/pwdmodify.jsp").forward(req,resp);
    }

    //验证旧密码
    public void pwdModify(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        Object user = req.getSession().getAttribute(Constans.USER_SESSION);
        String oldPassword = (String) req.getAttribute("oldPassword");
        //万能的Map,结果集
        Map resultMap = new TreeMap<>();
        if (user==null){//如果session失效了,登录过期
            resultMap.put("result","sessionerror");
        }else if (StringUtils.isNullOrEmpty(oldPassword)){//旧密码为空
            resultMap.put("result","error");
        }else {
            String userPassword = ((User) user).getUserPassword();//数据库中用户的密码
            if (userPassword.equals(oldPassword)){
                resultMap.put("result","true");
            }else {
                resultMap.put("result","false");
            }
        }
        resp.setContentType("application/json");
        PrintWriter writer = resp.getWriter();
        //JSONSArray,阿里巴巴的JSON工具类,把map类型转换为json类型传递给前端
        //json格式={key:value}
        writer.write(JSONArray.toJSONString(resultMap));
        writer.flush();
        writer.close();
    }
}

5.用户管理实底层现

javaWeb学习-----smbms(修改密码,用户管理底层)_第1张图片

导入用户的工具类、用户列表页面导入:用户列表、分页条

5.1获取用户数量

5.1.1创建分页的类
public class PageSupporttest {
   //当前页码-来自于用户输入
   private int currentPageNo = 1;
   //总数量(表)
   private int totalCount = 0;   
   //页面容量
   private int pageSize = 0;   
   //总页数-totalCount/pageSize(+1)
   private int totalPageCount = 1;
   
   public int getCurrentPageNo() {
      return currentPageNo;
   }
   public void setCurrentPageNo(int currentPageNo) {
      if(currentPageNo > 0){
         this.currentPageNo = currentPageNo;
      }
   }
   public int getTotalCount() {
      return totalCount;
   }
   public void setTotalCount(int totalCount) {
      if(totalCount > 0){
         this.totalCount = totalCount;
         //设置总页数
         this.setTotalPageCountByRs();
      }
   }
   public int getPageSize() {
      return pageSize;
   }
   public void setPageSize(int pageSize) {
      if(pageSize > 0){
         this.pageSize = pageSize;
      }
   }
   public int getTotalPageCount() {
      return totalPageCount;
   }
   public void setTotalPageCount(int totalPageCount) {
      this.totalPageCount = totalPageCount;
   }  
   public void setTotalPageCountByRs(){
      if(this.totalCount % this.pageSize == 0){
         this.totalPageCount = this.totalCount / this.pageSize;
      }else if(this.totalCount % this.pageSize > 0){
         this.totalPageCount = this.totalCount / this.pageSize + 1;
      }else{
         this.totalPageCount = 0;
      }
   }
}
5.1.2获取用户的数量

userDao

//根据用户名或者角色名查询当前所有用户的数量
public int getUserCount(Connection connection,String username,int userRole) throws Exception;

userDaoImpl

//根据用户名或者角色名查询当前所有用户的数量
@Override
public int getUserCount(Connection connection, String username, int userRole) throws Exception {
    int i = 0;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    if (connection != null){
        StringBuilder sql = new StringBuilder();
        sql.append("select count(1) as count from smbms_user user,smbms_role role where user.userRole = role.id");
        ArrayList list = new ArrayList<>();
        if (StringUtils.isNullOrEmpty(username)){
            sql.append(" and userName like ?");
            list.add("%" + username + "%");//index = 0
        }
        if (userRole > 0){
            sql.append(" and u.userRole = ?");
            list.add(userRole);//index = 1
        }
        Object[] params = list.toArray();
        resultSet = Base.execute(connection, preparedStatement, resultSet, sql.toString(), params);
        if (resultSet.next()){
            i = resultSet.getInt("count");//从结果集中获取数量
        }
    }
    Base.close(null,preparedStatement,resultSet);
    return i;
}
 
  

userService

//根据用户名或者角色名查询当前所有用户的数量
public int getUserCount(String username,int userRole);

userServiceImpl

//根据用户名或者角色名查询当前所有用户的数量
@Override
public int getUserCount(String username, int userRole) {
    int count = 0;
    Connection connection = null;
    try {
        connection = Base.getConnection();
        count = userDAO.getUserCount(connection, username, userRole);
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        Base.close(connection,null,null);
    }
    return count;
}

5.2获取用户列表

userDao

 //通过条件查询---userList
    public List getUserList(Connection connection,String username,int userRole,int currentPageNo,int pageSize) throws Exception;

userDaoImpl

public List getUserList(Connection connection, String username, int userRole, int currentPageNo, int pageSize) throws Exception {
        List userslist = new ArrayList<>();
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        if (connection != null){
            //用户存储sql语句
            StringBuilder sql = new StringBuilder();
            sql.append("select u.*,r.roleName as userRoleName from smbms_user u,smbms_role r where u.userRole = r.id");
            //用于存储参数
            ArrayList list = new ArrayList<>();
            if (!StringUtils.isNullOrEmpty(username)){
                sql.append(" and u.userName like ?");
                list.add("%" + username + "%");//index = 0
            }
            if (userRole > 0){
                sql.append(" and u.userRole = ?");
                list.add(userRole);//index = 1
            }
            //在数据中,分页使用,limit startIndex,pageSize;总数
            sql.append(" order by creationDate DESC limit ?,?");
            //1 0 -(5)
            //2 5 -(5)
            //3 10 -(5)
            //当前记录号=(当前页-1)*页面大小
            currentPageNo = (currentPageNo-1)*pageSize;
            list.add(currentPageNo);
            list.add(pageSize);

            Object[] params = list.toArray();
            resultSet = Base.execute(connection, preparedStatement, resultSet, sql.toString(), params);
            while (resultSet.next()){
                User user = new User();
                user.setId(resultSet.getInt("id"));
                user.setUserCode(resultSet.getString("userCode"));
                user.setUserName(resultSet.getString("userName"));
                user.setGender(resultSet.getInt("gender"));
                user.setBirthday(resultSet.getDate("birthday"));
                user.setPhone(resultSet.getString("phone"));
                user.setUserRole(resultSet.getInt("userRole"));
                user.setUserRoleName(resultSet.getString("userRoleName"));
                userslist.add(user);
            }
        }
        Base.close(null,preparedStatement,resultSet);
        return userslist;
    }
 
  

userService

 //通过条件查询---userList
    public List getUserList(String queryUsername, int queryUserRole, int currentPageNo, int pageSize) throws IOException;

userServiceImpl

//通过条件查询---userList
@Override
public List getUserList(String username, int userRole, int currentPageNo, int pageSize){
    List userList = new ArrayList<>();
    Connection connection = null;
    try {
        connection = Base.getConnection();
        userList = userDAO.getUserList(connection, username, userRole, currentPageNo, pageSize);
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        Base.close(connection,null,null);
    }
    return userList;
}

5.3获取角色列表

为了职责的统一,可以把角色的操作单独放到另一个包中。

RoleDAO

//获取角色列表
public List getRoleList(Connection connection) throws Exception;

RoleDOAImpl

//获取角色列表
@Override
public List getRoleList(Connection connection) throws Exception {
    List roleList = new ArrayList<>();
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    if (connection != null){
        String sql = "select * from smbms_role";
        Object[] params = {};
        resultSet = Base.execute(connection, preparedStatement, resultSet, sql, params);
        while (resultSet.next()){
            Role role = new Role();
            role.setId(resultSet.getInt("id"));
            role.setRoleCode(resultSet.getInt("roleCode"));
            role.setRoleName(resultSet.getString("roleName"));
            roleList.add(role);
        }
    }
    Base.close(null,preparedStatement,resultSet);
    return roleList;
}

RoleService

//获取角色列表
public List getRoleList() throws Exception;

RoleServiceImpl

//获取角色列表
@Override
public List getRoleList(){
    List roleList = null;
    Connection connection = null;
    try {
        connection = Base.getConnection();
        roleList = roleDAO.getRoleList(connection);
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        Base.close(connection,null,null);
    }
    return roleList;
}

5.4用户显示的Service

1.获取用户前端的数据(查询)

2.判断请求是否需要执行,查看参数的值判断

3.为了实现分页,需要计算出当前页面和总页数、页面大小

4.用户列表展示

//查询用户列表
    public void query(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException  {
        UserServiceImpl userService = new UserServiceImpl();
        RoleServiceImpl roleService = new RoleServiceImpl();
        List userList = null;
        List roleList = null;
        //从前端获取到的数据
        String queryUsername = req.getParameter("queryname");
        String temp = req.getParameter("queryUserRole");
        String pageIndex = req.getParameter("pageIndex");
        //这是为了让界面有一个默认值0,不会出错
        int queryUserRole = 0;
        //第一次请求,一定是第一页,且页面大小固定
        int currentPageNo = 1;
        int pageSize = Constants.pageSize;
        //获取用户列表
        if (queryUsername == null) {
            queryUsername = "";
        }
        if (temp != null && !temp.equals("")) {
            queryUserRole = Integer.parseInt(temp);//给查询赋值
        }
        if (pageIndex != null) {
            try {
                currentPageNo = Integer.parseInt(pageIndex);
            } catch (NumberFormatException e) {
                resp.sendRedirect("error.jsp");
            }
        }
        //获取用户的总数(分页:上一页,下一页)
        int totalCount = userService.getUserCount(queryUsername, queryUserRole);
        //通过页面的类设置当前页面、总的数量、页面大小
        PageSupport page = new PageSupport();
        page.setCurrentPageNo(currentPageNo);
        page.setPageSize(pageSize);
        page.setTotalCount(totalCount);
        //最大页数
        int totalPageCount = page.getTotalPageCount();
        //控制首页和尾页
        //如果页面小于1,就显示第一页
        if (currentPageNo < 1) {
            currentPageNo = 1;
        } else if (currentPageNo > totalPageCount) {
            //如果页面大于最大页数,就显示最后一页
            currentPageNo = totalPageCount;
        }
        //获取用户列表展示.角色列表
        userList = userService.getUserList(queryUsername, queryUserRole, currentPageNo, pageSize);
        roleList = roleService.getRoleList();
        req.setAttribute("userList", userList);
        req.setAttribute("roleList", roleList);
        req.setAttribute("totalCount", totalCount);
        req.setAttribute("currentPageNo", currentPageNo);
        req.setAttribute("totalPageCount", totalPageCount);
        req.setAttribute("queryUserName", queryUsername);
        req.setAttribute("queryUserRole", queryUserRole);
        //转发请求
        req.getRequestDispatcher("userlist.jsp").forward(req, resp);
    }

你可能感兴趣的:(javaweb,学习,java,java-ee)