總結:前期的一個小商城項目

在開始這個小商城項目之前,就有開始寫另一個學生系統的小項目。

在學生系統上面就碰到了問題!

  1. 不會打包!不知如何分類!

  2. 發現每個業務都要創建一個Servlet!
    例如:登錄loginServlet用來處理login.jsp頁面的數據。
    註冊registerServlet用來處理register.jsp。。
    【秉承着jsp最佳實踐的原則

  3. 不算問題把,前端不是我們的重點。

然後正式開始商城項目之後,這些問題也迎刃而解了。
而且這種方法很。。。牛!

  1. 第一,包裝方法。如下
    這裏寫圖片描述
    補充:一般還會有service包和service.Impl包處理實體類數據庫業務!

  2. 第二,關於Servlet。
    我的理解是這樣的,
    i),瀏覽器訪問服務器的時候都會帶着method參數
    ii),我們將關於瀏覽器的請求業務分類,例如在商品項目中,可以分userServlet,productServlet,indexServlet(首頁)…【這些servlet不繼承HttpServlet】
    iii),然後,在這些servlet當中實現對應的方法!例如註冊,登錄。。等法。如果方法有需要轉發至那個頁面的就將路徑作爲返回值!這樣我們就可以儘量的少創建Servlet!
    列入userServlet下面的方法;

這裏寫圖片描述
login()如下:

    public String login(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("login~~~");
        String username = request.getParameter("username");
        String pswbefore = request.getParameter("psw");
        String psw = MD5Utils.md5(pswbefore);

        User user = new UserServiceImpl().login(username,psw);

        if(user==null) {
            request.setAttribute("msg", "日本人與狗禁止入內");
            return "/jsp/login.jsp";
        } else {
            if(user.getState() == utils.Const.ACTIVE) {
                //登錄成功,且郵箱激活
                //1,將user存入session
                HttpSession session = request.getSession();
                session.setAttribute("user", user);
                //2,回到首頁 baseServlet----date----->index.jsp首頁
                try {
                    response.sendRedirect(request.getContextPath()+"/indexServlet?method=getData");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                //未激活
                request.setAttribute("msg", "沒激激激激活");
                return "/jsp/login.jsp";
            }
        }
        return null;
    }

iv)重點是,我們需要創建一個父類的baseServlet這個會繼承HttpServlet! 讓上面的servlet繼承之!
然後,在baseServlet中實現service方法,然後用反射機制獲取對應的方法!並激活。然後或去返回值,並轉發!

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            Class<? extends BaseServlet> claz = this.getClass();
            //獲取方法名參數
            String metd = request.getParameter("method");
            //根據反射獲取方法
            Method method = claz.getMethod(metd,  HttpServletRequest.class,HttpServletResponse.class);

            //這裏的this,就是瀏覽器請求的子類servlet
            //調用該方法,並將該方法的返回值返回給path
            String path = (String) method.invoke(this,request,response);
            System.out.println("path=="+path);
            if (path!=null) {
                //轉發到方法返回的路徑
                request.getRequestDispatcher(path).forward(request, response);
            }

        } catch exception...
    }

整個的邏輯如下,畫了張潦草的圖。
這裏寫圖片描述

發佈了49 篇原創文章 · 獲贊 25 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章