本文所需的資源檔案為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.uj5u.com/houduan/335050.html
標籤:Java
上一篇:分庫分表利器之Sharding Sphere(深度好文,看過的人都說好)
下一篇:Mybatis 動態批量修改
