JavaWEB SMBMS实现密码修改功能过程

 更新时间:2026年02月03日 08:56:40   作者:追JAVA的小菜鸟  
本文介绍了实现密码修改功能的步骤,包括前端页面、Dao层、Service层和Servlet层的编写和调用,通过这些步骤,可以实现用户密码的修改功能

实现密码修改功能

1、导入前端素材

密码修改页面——pwdmodify.jsp

2、Dao层——userDao接口

// 修改用户密码
public int updateUserPwd(Connection connection, int id, String userPassword) throws SQLException;

3、Dao层——userDaoImpl实现类

  • 编写sql语句进行修改操作——未传实参
public int updateUserPwd(Connection connection, int id, String userPassword) throws SQLException {
    PreparedStatement preparedStatement = null;
    int row = 0;
    if (connection != null){
        String sql = "update smbms_user set userPassword = ? where id = ?";
        Object params[] = {userPassword,id};
        row = BaseDao.execute(connection, preparedStatement, sql, params);
        BaseDao.release(null,preparedStatement,null);
    }
    return row;
}

4、Service层——userService接口

// 修改用户密码
public Boolean updatePwd(int id,String password);

5、Service层——userServiceImpl实现类

  • 调用Dao层,实现修改密码操作——未传实参
// 修改用户密码
public Boolean updatePwd(int id, String password) {
    Connection connection = null;
    boolean flag = false;
    try {
        connection = BaseDao.getconnection();
        // 如果调用Dao层数方法,返回行数大于0,则更新成功
        if (userDao.updateUserPwd(connection, id, password)>0){
            flag = true;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        BaseDao.release(connection,null,null);
    }
    return flag;
}

6、Servlet层——UserServlet

  • 从页面获取参数,调用userServiceImpl实现updatePwd()方法

完成Servlet的复用,调用各种方法

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 如果当前页面传回的值和设定的method的值一样,就进入修改密码方法
    String method = req.getParameter("method");
    if (method != null && method.equals("savepwd")) {
        this.UpdatePassword(req, resp);
    }else if(method.equals("pwdmodify")){
        this.pwdModify(req,resp);
    }
}

修改新密码方法——UpdatePassword()

// 修改密码——判断新密码
public void UpdatePassword(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    boolean flag = false;
    // 1. 从Session中获取user的信息
    Object obj = req.getSession().getAttribute(Constants.USER_SESSION);
    // 2. 从页面中获取新密码
    String newpassword = req.getParameter("newpassword");
    // 3. 判断——如果obj和输入的密码不为空 则进行修改密码操作(在数据库中修改)
    if(obj != null&& newpassword != null){
        userServiceImpl userService = new userServiceImpl();
        // 4. 把obj强转为User类型,拿到用户ID信息,传入方法中
        flag = userService.updatePwd(((User) obj).getId(), newpassword);
        System.out.println("修改密码前:"+req.getSession().getAttribute(Constants.USER_SESSION));
        if(flag){
            // 若修改成功 移除已存在的Session
            req.setAttribute("message","密码修改成功!");
            req.getSession().removeAttribute(Constants.USER_SESSION);
        }else {
            // 若修改失败,展示错误原因
            req.setAttribute("message","密码修改失败!");
        }
    }else {
        req.setAttribute("message","新密码为空,密码修改失败!");
    }
    // 不管修改成功与否 都跳转到当前页面,因为session被清除了,所以没有权限,会跳转到error页面
    resp.sendRedirect("pwdmodify.jsp");
    System.out.println("修改密码后:"+req.getSession().getAttribute(Constants.USER_SESSION));
}

验证旧密码——pwdModify()

// 修改密码——验证旧密码
public void pwdModify(HttpServletRequest req, HttpServletResponse resp) {
   // 1. 从Session中获取user的信息
   Object obj = req.getSession().getAttribute(Constants.USER_SESSION);
   // 2. 从页面获取输入的旧密码
   String oldpassword = req.getParameter("oldpassword");
   // 3. new 一个Map结果集
   HashMap<String, String> resultMap = new HashMap<String, String>();
   // 4. 若停留页面时间过长,session失效,展示错误信息
   if (obj == null) {
       resultMap.put("result", "sessionerror");
   } else if (oldpassword == null) {
       // 5. 若输入的旧密码为空,展示错误信息
       resultMap.put("result", "error");
   } else {
       // 6. 获取Session中的旧密码,与输入的旧密码比较
       String userOldPassword = ((User) obj).getUserPassword();
       if (userOldPassword.equals(oldpassword)) {
           // 若相同,返回true
           resultMap.put("result", "true");
       } else {
           resultMap.put("result", "false");
       }
   }
   try {
       resp.setContentType("application/json");
       PrintWriter writer = resp.getWriter();
       //JSONArray 阿里巴巴的JSON工具类, 转换格式
       /*
       resultMap = ["result","sessionerror","result","error"]
       Json格式 = {key:value}
        */
       writer.write(JSONArray.toJSONString(resultMap));
       writer.flush();
       writer.close();
   } catch (IOException e) {
       e.printStackTrace();
   }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java如何设置系统参数和运行参数

    Java如何设置系统参数和运行参数

    这篇文章主要介绍了Java如何设置系统参数和运行参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • SpringBoot+SpringSession+Redis实现session共享及唯一登录示例

    SpringBoot+SpringSession+Redis实现session共享及唯一登录示例

    这篇文章主要介绍了SpringBoot+SpringSession+Redis实现session共享及唯一登录示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 基于<aop:aspect>与<aop:advisor>的区别

    基于<aop:aspect>与<aop:advisor>的区别

    这篇文章主要介绍了<aop:aspect>与<aop:advisor>的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Spring Boot修改内置Tomcat默认端口号的示例

    Spring Boot修改内置Tomcat默认端口号的示例

    本篇文章主要介绍了Spring Boot修改内置Tomcat端口号的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 详解Java对象序列化为什么要使用SerialversionUID

    详解Java对象序列化为什么要使用SerialversionUID

    这篇文章主要介绍了详解Java对象序列化为什么要使用SerialversionUID,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java匿名类和匿名函数的概念和写法

    Java匿名类和匿名函数的概念和写法

    匿名函数写法和匿名类写法的前提必须基于函数式接口匿名函数写法和匿名类写法其本质是同一个东西,只是简化写法不同使用Lambda表达式简写匿名函数时,可以同时省略实现类名、函数名,这篇文章主要介绍了Java匿名类和匿名函数的概念和写法,需要的朋友可以参考下
    2023-06-06
  • spring利用squertz实现定时任务

    spring利用squertz实现定时任务

    spring squertz是一个强大的定时任务处理方式。下面这篇文章主要介绍了spring利用squertz实现定时任务的相关资料,文中介绍的很详细,对大家具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧。
    2017-01-01
  • Java中生产者消费者问题总结

    Java中生产者消费者问题总结

    这篇文章主要介绍了Java中生产者消费者问题总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • mybatis实现一对一关联映射实例代码

    mybatis实现一对一关联映射实例代码

    这篇文章主要给大家介绍了关于mybatis实现一对一关联映射的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • java多媒体文件编码 处理工具类代码实例

    java多媒体文件编码 处理工具类代码实例

    这篇文章主要介绍了java多媒体文件编码 处理工具类使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09

最新评论