8.4 Smbms 密码修改的实现


密码修改 肯定要和 数据库打交道。所以 是 DAO --> Service --> Servlet

在这里插入图片描述

  1. UserDao 添加一个 修改当前用户密码的 方法
//修改当前用户密码
    @Override
    public int updatePwd(Connection connection, int id, int password) throws SQLException {
        int num = 0;
        if (connection != null) {
            String sql = "update `smbms_user` set `userPassword`=? where `id`=?";
            PreparedStatement pstm = null;
            Object[] params = {password, id};
            num = BaseDao.execute(connection, sql, params, pstm);

            BaseDao.closeResource(null, pstm, null);
        }

        return num;

    }
  • 添加一个 业务层的 代码
    @Override
    public boolean updatePwd(int id, int password) throws SQLException {
        Connection connection = BaseDao.getConnection();
        boolean flag = false;

        if(userDao.updatePwd(connection,id,password) > 0){
            flag = true;
        }
        BaseDao.closeResource(connection,null,null);


        return flag;
    }
  • 添加 Servlet 代码
package com.muquanyu.servlet.user;

import com.muquanyu.pojo.SmbmsUser;
import com.muquanyu.service.user.UserService;
import com.muquanyu.service.user.UserServiceImpl;
import com.muquanyu.util.Constants;
import com.mysql.cj.util.StringUtils;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;
import java.sql.SQLException;

public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {



        //super.doGet(req, resp);
    }

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

        HttpSession session = req.getSession();
        SmbmsUser user = (SmbmsUser)session.getAttribute(Constants.USER_SESSION);
        System.out.println(user);


        String newPassword = req.getParameter("newpassword");
        System.out.println(newPassword);
        boolean flag = false;

        if(user != null && newPassword.equals("") != true && newPassword.length()>=7){
            UserService userService = new UserServiceImpl();
            try {
                flag = userService.updatePwd(user.getId(), newPassword);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            System.out.println(flag);
            if(flag){
                req.setAttribute("message","修改密码成功,请退出使用新密码登录!");
                //密码修改成功,移除usersession
                session.removeAttribute(Constants.USER_SESSION);
            }else{
                req.setAttribute("message","修改密码失败");
            }

        }else{
            req.setAttribute("message","新密码有问题");
        }
        req.getRequestDispatcher("pwdmodify.jsp").forward(req, resp);

        //super.doPost(req, resp);
    }
}
  • 实现 Servlet 复用

什么叫 实现 Servlet 的复用呢?

答:我们之前 每写一个 Servlet 只是 对应一个 JSP 进行处理,但是 如果 我们 想要 多个 JSP 文件 对应一个 Servlet 进行 处理,该如何实现呢? 很明显的是,我们有一个 简单的思想,那就是 利用逻辑判断代码 去 区分 它是 哪个 JSP 文件发来的请求!

如果 我们 可以 区分 是哪个 JSP 文件,那么 我们就可以 根据这个 文件,去写 相应 的 处理代码。

而为了 看起来 更加的 有结构化,我们还可以 把 处理每一个 JSP 文件的 Servlet 代码 提取出来 变成 一个一个的 方法。

那么 怎么 才能够 区分 每个 JSP 文件呢?

答:在 每个 JSP 文件里面 留下 一个 标记。刻一个标记!

类似于这种 留下 一个 hidden 隐藏域 的 东西,里面有 name 参数,还有 还有 参数 的值。 我们就可以根据 判断 当前 请求 的 method 是否为空,而且 这个 method 的值 是否为 savepwd 来 进行 该 jsp文件 的 确认!

在这里插入图片描述

  • 提取为方法
public void updatePwd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        HttpSession session = req.getSession();
        SmbmsUser user = (SmbmsUser)session.getAttribute(Constants.USER_SESSION);
        System.out.println(user);


        String newPassword = req.getParameter("newpassword");
        System.out.println(newPassword);
        boolean flag = false;

        if(user != null && newPassword.equals("") != true && newPassword.length()>=7){
            UserService userService = new UserServiceImpl();
            try {
                flag = userService.updatePwd(user.getId(), newPassword);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            System.out.println(flag);
            if(flag){
                req.setAttribute("message","修改密码成功,请退出使用新密码登录!");
                //密码修改成功,移除usersession
                session.removeAttribute(Constants.USER_SESSION);
            }else{
                req.setAttribute("message","修改密码失败");
            }

        }else{
            req.setAttribute("message","新密码有问题");
        }
        req.getRequestDispatcher("pwdmodify.jsp").forward(req, resp);
    }
  • 进行JSP 文件的 判断
 @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String method = req.getParameter("method");
        if(method.equals("savepwd") && method != null){
            this.updatePwd(req,resp);
        }
        //super.doPost(req, resp);
    }

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐