本次復習JavaEE基於servlet技術、jsp技術、JDBC技術,來實現一個用戶登錄以及用戶信息的增刪改查
- 項目需求:實現用戶登錄,以及用戶信息的增刪改查
- 項目配置:Java語言(Java1.8)、tomcat服務器(tomcat9.0.34)、Mysql數據庫(MySQL8.0)、前端技術、JavaEE技術,IDEA開發工具,navicat數據庫管理工具
- 項目地址:https://gitee.com/jun-hong-wu/java--ee-simple-case
- 項目截圖:
項目准備:
- 創建數據庫表
- 搭建項目結構
項目實現過程:
- 搭建好項目結構之后,通過根據數據庫的表定義對應的實體文件,pojo包里面有個User類
- 實現用戶登錄界面:
- -------(基本業務流程)----------獲取用戶登錄界面用戶輸入的賬號和密碼,還有驗證碼,通過servlet配置調用業務層接口,業務層調用dao層,實現用戶查詢,之后將查詢到的用戶數據返回到業務層,業務層返回到表現層,將得到的用戶存放到session當中,如果查詢到用戶,將頁面跳轉到主頁,如果沒有查詢到用戶,仍然返回到登錄界面,並提示用戶用戶密碼錯誤,讓用戶重新登錄。
- -------(登錄過程中的細節)--------
用戶不登錄不能訪問項目中的其他界面:(使用過濾器,首先放行和登錄有關的資源,避免產生死鎖循環,之后通過判斷session中是否有用戶來判斷用戶是否登錄,如果沒有則跳轉到登錄界面,如果有則放行);
// 首先要對登錄資源放行 HttpServletRequest request=(HttpServletRequest) servletRequest; String uri = request.getRequestURI(); if (uri.indexOf("login.jsp")!=-1||uri.indexOf("login.do")!=-1||uri.indexOf("validateCode.do")!=-1){ filterChain.doFilter(servletRequest, servletResponse); }else { // 判斷用戶是否登錄 HttpSession session = request.getSession(); Users user = (Users) session.getAttribute(Constants.USER_SESSION_KEY); if (user!=null){ filterChain.doFilter(servletRequest, servletResponse); }else { request.setAttribute(Constants.REQUEST_MSG,"請先進行登錄"); request.getRequestDispatcher("login.jsp").forward(servletRequest, servletResponse); } }
一個用戶只能在一個瀏覽器上登錄,如果多處登錄會把之前的擠掉:使用servletContext對象,當在一處登錄的時候,將本次登錄的session放到servletContext對象中,key為用戶對應的id。例如:當用戶在ie瀏覽器上進行登錄的時候,首先根據用戶id判斷servletContext中有沒有對應的session,如果有,將session銷毀,將ie瀏覽器對應的session放到servletContext對象中,當另一處的用戶訪問資源的時候,會通過過濾器進行攔截,讓用戶進行登錄;如果沒有就將本次登錄的session放到servlet中。
// 獲取用戶輸入的賬號和密碼 String username = req.getParameter("username"); String userpwd = req.getParameter("userpwd"); String code = req.getParameter("code"); try{ // 建立會話連接 HttpSession session = req.getSession(); String codetemp = (String) session.getAttribute(Constants.VALIDATE_CODE_MSG); if (codetemp.equals(code)){ // 創建業務層對象 UserLoginService userLoginService=new UserLoginServiceImpl(); Users users = userLoginService.userLogin(username, userpwd); // 根據用戶id將用戶session放入到servletContext對象中 ServletContext servletContext = this.getServletContext(); // 避免硬編碼,將用戶信息放入到session中 session.setAttribute(Constants.USER_SESSION_KEY,users); HttpSession temp = (HttpSession) servletContext.getAttribute(users.getUserid() + ""); if (temp!=null){ servletContext.removeAttribute(users.getUserid() + ""); temp.invalidate(); } servletContext.setAttribute(users.getUserid()+"",session); // 使用重定向跳轉到主頁 resp.sendRedirect("main.jsp"); }else { session.setAttribute(Constants.REQUEST_MSG,"驗證碼有誤,請重新輸入"); req.getRequestDispatcher("login.jsp").forward(req,resp); } } catch (UserNotFoundException e){ req.setAttribute("msg",e.getMessage()); // 使用請求轉發讓用戶重新登錄 req.getRequestDispatcher("login.jsp").forward(req,resp); }catch (Exception e){ resp.sendRedirect("error.jsp"); }
用戶權限控制;如果有郵箱,需要進行正則表達式的判斷;注冊的時候,用戶通過短信獲得驗證碼------這兩個本項目中沒有涉及,如果之后有項目涉及會進行補充。
- 進入主頁之后實現用戶信息的查詢和用戶信息的添加
用戶信息的增刪改查:通過查看前端代碼,編寫每次需要操作數據庫的接口,在servlet中調用接口,使用請求轉發和重定向來進行頁面跳轉將數據展示到界面就可以
- 最后實現 用戶退出登錄
銷毀session連接,跳轉到登錄界面。
到此項目就結束了,本項目只是一個表的增刪改查,不過都差不多,本次項目讓我認識到,需要對JavaEE中的常用對象的理解,才可以更好的解決問題。之后會基於ssm框架以及spring boot框架對項目重新進行整理,不斷對本項目進行完善,希望明天的自己會更加努力!!