<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【項(xiàng)目實(shí)踐】SMBMS(Javaweb版)(三)登出、注冊(cè)、注銷、修改

      登出、注冊(cè)、注銷、修改

      登出屬于斷開登錄,操作session就可以解決

      應(yīng)用更改數(shù)據(jù)庫(kù)的處理模式,add,delete,modify都是屬于事務(wù)處理操作

      登出操作的實(shí)現(xiàn)邏輯及方式

      清楚session就可以,不再保存登錄記錄

      package com.dashangms.servlet.user;
      
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      
      public class LogoutServlet extends HttpServlet {
      
          @Override
          public void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
      
              // 移除session 中的用戶信息
              request.getSession().removeAttribute("user");
      
              // 跳轉(zhuǎn)到登錄頁(yè)面
              response.sendRedirect(request.getContextPath() + "/jsp/login.jsp");
      
          }
      
          Override
          public void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
      
              this.doGet(request, response);
      
          }
      }
      
      
          <!--注冊(cè)Logout servlet-->
          <servlet>
              <servlet-name>logout</servlet-name>
              <servlet-class>com.dashangms.servlet.user.LogoutServlet</servlet-class>
          </servlet>
          <!--Logout servlet請(qǐng)求路徑-->
          <servlet-mapping>
              <servlet-name>logout</servlet-name>
              <url-pattern>/logout</url-pattern>
          </servlet-mapping>
      

      防止用戶登出后可以繼續(xù)訪問(wèn)

      1. 思路:頁(yè)面登出時(shí)先走login攔截器,如果session清空就說(shuō)明已退出
      package com.dashangms.filter;
      
      import com.common.Constants;
      
      import javax.servlet.FilterChain;
      import javax.servlet.ServletException;
      import javax.servlet.ServletRequest;
      import javax.servlet.ServletResponse;
      import javax.servlet.http.HttpFilter;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      
      public class LoginFilter extends HttpFilter {
      
          /**
           * 執(zhí)行過(guò)濾操作
           *
           * @param request  Servlet請(qǐng)求,用于獲取HTTP請(qǐng)求信息
           * @param response Servlet響應(yīng),用于向客戶端發(fā)送數(shù)據(jù)
           * @param chain    過(guò)濾鏈,用于將請(qǐng)求傳遞給下一個(gè)過(guò)濾器或目標(biāo)資源
           * @throws IOException 如果在執(zhí)行過(guò)程中發(fā)生I/O錯(cuò)誤
           * @throws ServletException 如果在執(zhí)行過(guò)程中發(fā)生Servlet錯(cuò)誤
           */
          @Override
          public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{
              // 將ServletRequest和ServletResponse轉(zhuǎn)換為HttpServletRequest和HttpServletResponse
              // 以使用它們提供的高級(jí)功能和方法
              HttpServletRequest httpServletRequest = (HttpServletRequest) request;
              HttpServletResponse httpServletResponse = (HttpServletResponse) response;
      
              // 檢查用戶會(huì)話中是否存在用戶信息
              // 如果不存在,說(shuō)明用戶未登錄或會(huì)話已過(guò)期
              if (httpServletRequest.getSession().getAttribute(Constants.USER_SESSION) == null) {
                  // 重定向用戶到錯(cuò)誤頁(yè)面
                  // 這里假設(shè)錯(cuò)誤頁(yè)面為"/error.jsp",實(shí)際路徑應(yīng)根據(jù)項(xiàng)目具體結(jié)構(gòu)設(shè)置
                  httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/error.jsp");
              } else {
                  // 如果用戶會(huì)話中存在用戶信息,繼續(xù)執(zhí)行過(guò)濾鏈
                  // 這允許請(qǐng)求繼續(xù)傳遞到目標(biāo)資源或下一個(gè)過(guò)濾器
                  chain.doFilter(request, response);
              }
      
          }
      
          @Override
          public void init() throws ServletException {
              super.init();
          }
      
          @Override
          public void destroy() {
              super.destroy();
          }
      }
      
      
      1. 登出后訪問(wèn)任意頁(yè)面走過(guò)濾器處理
      <!--    判斷用戶是否登錄的過(guò)濾器-->
          <filter>
              <filter-name>LoginFilter</filter-name>
              <filter-class>com.csnz.filter.LoginFilter</filter-class>
          </filter>
          <filter-mapping>
              <filter-name>LoginFilter</filter-name>
              <url-pattern>/jsp/*</url-pattern>
          </filter-mapping>
      
      

      修改密碼功能實(shí)現(xiàn)

      導(dǎo)入jsp

      <li><a href=${pageContext.request.contextPath}"/jsp/pwdmodify.jsp">密碼修改</a></li>
      
      

      實(shí)現(xiàn)Dao層數(shù)據(jù)接口

      1. 在Dao寫一個(gè)接口
      int updatePwd(Connection connection, Integer id, String newPwd) throws Exception;
      
      1. 實(shí)現(xiàn)這個(gè)接口
          /**
           * 更新用戶密碼
           *
           * @param connection 數(shù)據(jù)庫(kù)連接對(duì)象
           * @param id         用戶id
           * @param newPwd     新密碼
           * @return 影響行數(shù)
           * @throws Exception 異常處理
           */
          @Override
          public int updatePwd(Connection connection, Integer id, String newPwd) throws Exception {
      
              // 初始化影響行數(shù)為0
              int updateRow = 0;
      
              // 檢查數(shù)據(jù)庫(kù)連接是否為空
              if (connection != null){
                  // 預(yù)編譯SQL語(yǔ)句以提高性能和安全性
                  PreparedStatement preparedStatement = null;
                  String sql = "update smbms_user set userPassword = ? where id = ?";
                  preparedStatement = connection.prepareStatement(sql);
                  // 設(shè)置SQL語(yǔ)句參數(shù)
                  preparedStatement.setString(1, newPwd);
                  preparedStatement.setInt(2, id);
                  // 執(zhí)行更新操作并獲取影響行數(shù)
                  updateRow = preparedStatement.executeUpdate();
                  // 關(guān)閉數(shù)據(jù)庫(kù)連接和預(yù)編譯語(yǔ)句資源
                  BaseDao.closeResource(connection, preparedStatement, null);
              }
      
              // 返回影響行數(shù)
              return updateRow;
          }
      

      實(shí)現(xiàn)Service層業(yè)務(wù)接口

      1. 在Service上寫一個(gè)接口
          /**
           * 修改密碼
           * @param id 用戶id
           * @param newPwd 新密碼
           * @return 修改成功 flag
           */
          public boolean updatePwd(Integer id, String newPwd);
      
      1. 實(shí)現(xiàn)這個(gè)Service
          /**
           * 修改密碼
           *
           * @param id     用戶id
           * @param newPwd 新密碼
           * @return 修改成功 flag
           */
          @Override
          public boolean updatePwd(Integer id, String newPwd) {
              Connection conn = null;
              boolean flag = false;
      
              try {
                  conn = BaseDao.connection();
                  if (userDao.updatePwd(conn, id, newPwd) > 0){
                      flag = true;
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              } finally {
                  BaseDao.closeConnection(conn);
              }
      
              return flag;
          }
      

      注冊(cè)Servlet

      1. 多個(gè)按鈕會(huì)在同一個(gè)Servlet的中調(diào)用不同的方法;
      2. 相關(guān)密碼的check邏輯:
      • 密碼不能為空
      • 密碼與舊密碼不能相同
      • 密碼輸入要合法化
      1. 密碼修改成功與否都會(huì)返回原頁(yè)面。有msg顯示。
      package com.dashangms.servlet.user;
      
      import com.dashangms.pojo.User;
      import com.dashangms.service.user.UserService;
      import com.dashangms.service.user.UserServiceImpl;
      
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      
      public class UserServlet extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              String method = req.getParameter("method");
              if ("savePassword".equals(method)) {
                  savePassword(req, resp);
              }
          }
      
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              this.doGet(req, resp);
          }
      
          /**
           * 保存用戶新密碼
           *
           * @param req  HTTP請(qǐng)求對(duì)象,用于獲取請(qǐng)求參數(shù)和進(jìn)行頁(yè)面轉(zhuǎn)發(fā)
           * @param resp HTTP響應(yīng)對(duì)象,用于進(jìn)行頁(yè)面轉(zhuǎn)發(fā)
           * @throws ServletException 如果Servlet操作出錯(cuò)
           * @throws IOException      如果輸入輸出操作出錯(cuò)
           */
          private void savePassword(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      
              // 獲取用戶ID和新密碼
              String id = req.getParameter("id");
              String newPwd = req.getParameter("newPwd");
      
              Object object = req.getSession().getAttribute("user");
              User user = (User) object;
      
              // 創(chuàng)建UserService對(duì)象
              UserService userService = new UserServiceImpl();
      
              if (user.getUserPassword().isEmpty()) {
                  req.getSession().setAttribute("message", "密碼不能為空!");
      
              } else if (user.getUserPassword().equals(newPwd)) {
                  req.getSession().setAttribute("message", "新密碼不能與舊密碼相同!");
      
              } else {
                  // 調(diào)用UserService的updatePwd方法更新用戶密碼
                  if (userService.updatePwd(Integer.parseInt(id), newPwd)) {
      
                      req.getSession().setAttribute("message", "密碼修改成功!請(qǐng)使用新密碼重新登陸");
                      // 移除用戶會(huì)話中的用戶信息,表示用戶已經(jīng)注銷
                      req.getSession().removeAttribute("user");
                  } else {
                      // 如果密碼更新失敗,轉(zhuǎn)發(fā)到錯(cuò)誤頁(yè)面
                      req.getSession().setAttribute("message", "密碼更新失敗!");
                  }
              }
      
              // 如果密碼更新成功,轉(zhuǎn)發(fā)到密碼修改頁(yè)面
              req.getRequestDispatcher("/pwdmodify.jsp").forward(req, resp);
          }
      }
      
      1. 注冊(cè)Servlet
          <servlet>
              <servlet-name>UserServlet</servlet-name>
              <servlet-class>com.dashangms.servlet.user.UserServlet</servlet-class>
          </servlet>
          <servlet-mapping>
              <servlet-name>UserServlet</servlet-name>
              <url-pattern>/jsp/user.do</url-pattern>
          </servlet-mapping>
      

      注冊(cè)和注銷 用戶的方式

      同上 改善點(diǎn)

      導(dǎo)入jsp

      可以共同使用同一個(gè)頁(yè)面,根據(jù)前面頁(yè)面?zhèn)鞯闹凳褂胔idden確定顯示哪部分內(nèi)容;

      實(shí)現(xiàn)Dao層的數(shù)據(jù)邏輯

      • 插入新用戶 insert
      • 注銷(刪除)新用戶 update (邏輯刪除)

      實(shí)現(xiàn)Service邏輯

      • 插入新用戶 insert
        • 使用前先判斷是否有同樣的賬號(hào),判斷一致性插入
      • 注銷(刪除)新用戶 update (邏輯刪除)
        • 停用功能,:停用和啟用相對(duì)應(yīng),不會(huì)刪除數(shù)據(jù)
        • 刪除功能
          • 物理刪除?
          • 邏輯刪除?

      注冊(cè)Servlet

      同樣在UserServlet中調(diào)用其他的邏輯,主要點(diǎn) 在jsp中確定實(shí)現(xiàn)

      不需要再新注冊(cè)Servlet來(lái)實(shí)現(xiàn)

      posted @ 2025-06-05 09:32  柯基大大  閱讀(15)  評(píng)論(0)    收藏  舉報(bào)  來(lái)源
      主站蜘蛛池模板: 少妇又爽又刺激视频| 免费视频成人片在线观看| 欧洲lv尺码大精品久久久| 九九久久人妻一区精品色| 国产精品自产在线观看一| 亚洲日韩一区二区| 搡老熟女老女人一区二区 | 综合久久av一区二区三区| 少妇又紧又色又爽又刺激视频| 在线视频中文字幕二区| 极品无码国模国产在线观看| 老太脱裤子让老头玩xxxxx| 国模雨珍浓密毛大尺度150p| 色综合天天综合网国产人| 视频二区中文字幕在线| 一本无码av中文出轨人妻| 国产精品一区二区三区黄| 制服丝袜美腿一区二区| 蜜桃精品成人影片| 国产成本人片无码免费| 国产成人综合色就色综合| 免费超爽大片黄| 日韩有码中文在线观看| 国产乱啊有帅gv小太正| 又黄又爽又无遮挡免费的网站| 精品尤物国产尤物在线看| 欧美成人精品手机在线| 天天做天天躁天天躁| 国产精品白丝一区二区三区| 日本亚洲中文字幕不卡| 国产不卡在线一区二区| 日韩精品av一区二区三区| 日本中文字幕亚洲乱码| 国产免费高清69式视频在线观看 | 国产乱码精品一区二三区| 日本道不卡一二三区视频| 伊人久久大香线蕉av一区二区| 国产一区国产精品自拍| 中文字幕国产精品一二区| 亚洲AV无码破坏版在线观看| 中文字幕va一区二区三区|