JavaEE實戰案例總結


本次復習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類
  • 實現用戶登錄界面:
  1. -------(基本業務流程)----------獲取用戶登錄界面用戶輸入的賬號和密碼,還有驗證碼,通過servlet配置調用業務層接口,業務層調用dao層,實現用戶查詢,之后將查詢到的用戶數據返回到業務層,業務層返回到表現層,將得到的用戶存放到session當中,如果查詢到用戶,將頁面跳轉到主頁,如果沒有查詢到用戶,仍然返回到登錄界面,並提示用戶用戶密碼錯誤,讓用戶重新登錄。
  2. -------(登錄過程中的細節)--------

用戶不登錄不能訪問項目中的其他界面:(使用過濾器,首先放行和登錄有關的資源,避免產生死鎖循環,之后通過判斷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框架對項目重新進行整理,不斷對本項目進行完善,希望明天的自己會更加努力!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM