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();
}
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot+SpringSession+Redis实现session共享及唯一登录示例
这篇文章主要介绍了SpringBoot+SpringSession+Redis实现session共享及唯一登录示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-04-04
基于<aop:aspect>与<aop:advisor>的区别
这篇文章主要介绍了<aop:aspect>与<aop:advisor>的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11
详解Java对象序列化为什么要使用SerialversionUID
这篇文章主要介绍了详解Java对象序列化为什么要使用SerialversionUID,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-11-11


最新评论