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)下一部分:修改密碼的時候去驗證舊密碼
