-
超市订单管理系统(5)-密码修改
本文所需的资源文件为pwdmodify.jsp,其余的css样式什么的静态资源文件在前面的准备工作文章中,想练习的包子(宝子)也可以从github中搜索smbms,全套系统都有:
链接:https://pan.baidu.com/s/1pimNLAHdg8x9pZfuDfoR1A
提取码:6666
1.引言:想这种密码修改的功能,肯定是要和数据库打交道的,那么这样一个功能编写流程一般都是先建立相关的数据库表-》编写Dao接口和实现类-》编写service接口和实现类-》编写servlet-》最后写前端这么一个自底向上的思想。该功能的大致思路如下:
(1)Dao层去进行具体的数据库操作代码实现,就是说sql语句从这里写并执行完成数据库操作,返回相应的值,一般是增删改返回具体的数字,就是影响了数据库多少行,查询的话一般是返回具体的结果,打比方说要查询的是是数据库的用户表,那么会将查到的数据全部通过User实体类里的set方法封装到这个类里边,吧这个user对象返回给service层。
(2)Service等主要进行业务逻辑代码的实现,就是根据Dao层返回的数据调用Dao层的相关的方法继续往上返回数据。
(3)Servlet层主要是通过getParameter方法获取前端相应的参数,然后调用业务层方法获取业务层方法返回的数据与从前端获取的参数进行比对,完成相关操作。
2. 修改密码的实现
(1)在准备工作阶段数据库已经建立完毕
(2)编写Dao层的接口和实现类,因为操作数据库,所以Connection参数一定是要传的,又因为我们要改密码,所以要传一个用户的id和密码这两个参数
1 package com.xiaoma.dao.user; 2 3 import com.xiaoma.pojo.User; 4 import java.sql.Connection; 5 6 public interface UserDao { 7 //得到要登录的用户 8 public User getLoginUser(Connection connection,String userCode) throws Exception; 9 10 //修改当前用户密码 11 public int updataPwd(Connection connection,int id,String passsword) throws Exception; 12 }
//修改密码,在userDaoImpl类中编写,放在用户登录方法(getLoginUser)的下面即可 @Override public int updataPwd(Connection connection, int id, String password) throws Exception { //1.首先想一下,我们肯定要用BaseDao里的写好的公共查询方法去查询,去执行我们的sql,从BaseDao中的公共查询方法中可以看到 //我们需要创建connection,resultSet,preparedStatement,sql和params五个参数对象,其中connection已经有了 PreparedStatement pstm = null; int updateRow=0; //当我们数据库链接了才会去执行下面的代码,数据库链接了丢一个sql进去并执行 if (connection != null) { String sql = "update smbms_user set userPassword=? where id=?";//为了安全,使用预编译的sql Object[] params = {password,id}; //2.去调用BaseDao里的写好的公共查询方法去执行sql updateRow = BaseDao.execute(connection, pstm, sql, params); //3.查询完之后要关闭,其中connection连接不用关 BaseDao.closeResourses(null, pstm,null); } //4.返回更新了多少行 return updateRow; }
(3)service层接口和实现类的编写
1 package com.xiaoma.service.user; 2 3 import com.xiaoma.pojo.User; 4 5 public interface UserService { 6 //用户登录业务 7 public User Login(String userCode,String password); 8 9 //根据用户id修改密码 10 public boolean updataPwd(int id, String password); 11 }
1 //修改密码,同样在userServiceImpl类中实现的该接口 2 @Override 3 public boolean updataPwd(int id, String password) { 4 Connection connection=null; 5 boolean flag=false; 6 7 //连接数据库 8 try { 9 connection=BaseDao.getConnection(); 10 if (userDao.updataPwd(connection,id,password)>0) { 11 flag=true; 12 } 13 } catch (Exception e) { 14 e.printStackTrace(); 15 }finally { 16 //关闭资源 17 BaseDao.closeResourses(connection,null,null); 18 } 19 20 return flag; 21 }
(4)编写servlet,启动tomcat进行测试
1 package com.xiaoma.servlet.user; 2 3 import com.mysql.jdbc.StringUtils; 4 import com.xiaoma.pojo.User; 5 import com.xiaoma.service.user.UserService; 6 import com.xiaoma.service.user.UserServiceImpl; 7 import com.xiaoma.util.Constants; 8 import javax.servlet.ServletException; 9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 import java.io.IOException; 13 14 public class UserServlet extends HttpServlet { 15 @Override 16 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 17 doPost(req, resp); 18 } 19 20 @Override 21 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 22 //获取用户session 23 Object o = request.getSession().getAttribute(Constants.USER_SESSION); 24 //拿到前端的newpassword参数 25 String newpassword = request.getParameter("newpassword"); 26 System.out.println("Servlet:"+newpassword); 27 boolean flag = false; 28 //当密码不为空并且session也不为空往下走 29 if (o != null && !StringUtils.isNullOrEmpty(newpassword)) { 30 UserService userService = new UserServiceImpl(); 31 //拿到用户id和密码 32 flag = userService.updatePwd(((User) o).getID(), newpassword); 33 if (flag) { 34 request.setAttribute(Constants.USER_SESSION, "修改密码成功,请退出并使用新密码重新登录!"); 35 //如果密码修改成功就吧session移除掉 36 request.getSession().removeAttribute(Constants.USER_SESSION);//session注销 37 } else { 38 request.setAttribute(Constants.USER_SESSION, "修改密码失败!"); 39 } 40 } else { 41 request.setAttribute(Constants.USER_SESSION, "修改密码失败!"); 42 } 43 request.getRequestDispatcher("pwdmodify.jsp").forward(request, response); 44 } 45 }
(5)下一部分:修改密码的时候去验证旧密码
来源:https://www.cnblogs.com/XiaoMaGuai/p/15441353.html