基於Servlet+JSP+JavaBean開發模式的用戶登錄注冊


參考鏈接:https://www.cnblogs.com/xdp-gacl/p/3902537.html

 

Servlet+JSP+JavaBean架構屬於Web MVC模型,控制器采用Servlet、模型采用JavaBean、視圖采用JSP,其中

servlet負責處理用戶請求,jsp負責數據顯示,javabean負責封裝數據,如圖

分層架構的代碼也是按照【域模型層(domain)】→【數據訪問層(dao、dao.impl)】→【業務處理層(service、service.impl)】→【表現層(web.controller、web.UI、web.filter、web.listener)】→【工具類(util)】→【測試類(junit.test)】的順序進行編寫的。

項目所需要的包
序號 包名 描述 所屬層次
1 me.gacl.domain 存放系統的JavaBean類(只包含簡單的屬性以及屬性對應的get和set方法,不包含具體的業務處理方法),提供給【數據訪問層】、【業務處理層】、【Web層】來使用  domain(域模型)層
2 me.gacl.dao 存放訪問數據庫的操作接口類 數據訪問層
3 me.gacl.dao.impl 存放訪問數據庫的操作接口的實現類
4 me.gacl.service 存放處理系統業務接口類 業務處理層
5 me.gacl.service.impl 存放處理系統業務接口的實現類
6 me.gacl.web.controller 存放作為系統控制器的Servlet Web層(表現層)
7 me.gacl.web.UI 存放為用戶提供用戶界面的servlet(UI指的是user interface)
8 me.gacl.web.filter 存放系統的用到的過濾器(Filter)
9 me.gacl.web.listener 存放系統的用到的監聽器(Listener)
10 me.gacl.util 存放系統的通用工具類,提供給【數據訪問層】、【業務處理層】、【Web層】來使用  
11 junit.test 存放系統的測試類  

 

 

 

 

 

 

 

 

 

 

 

 

 

開發總結

  通過這個小例子,可以了解到mvc分層架構的項目搭建,在平時的項目開發中,也都是按照如下的順序來進行開發的:

  1、搭建開發環境

    1.1 創建web項目

    1.2 導入項目所需的開發包

    1.3 創建程序的包名,在java中是以包來體現項目的分層架構的

  2、開發domain

  把一張要操作的表當成一個VO類(VO類只定義屬性以及屬性對應的get和set方法,沒有涉及到具體業務的操作方法),VO表示的是值對象,通俗地說,就是把表中的每一條記錄當成一個對象,表中的每一個字段就作為這個對象的屬性。每往表中插入一條記錄,就相當於是把一個VO類的實例對象插入到數據表中,對數據表進行操作時,都是直接把一個VO類的對象寫入到表中,一個VO類對象就是一條記錄。每一個VO對象可以表示一張表中的一行記錄,VO類的名稱要和表的名稱一致或者對應。

  3、開發dao

    3.1 DAO操作接口:每一個DAO操作接口規定了,一張表在一個項目中的具體操作方法,此接口的名稱最好按照如下格式編寫:“I表名稱Dao”。

      ├DAO接口里面的所有方法按照以下的命名編寫:

        ├更新數據庫:doXxx()

        ├查詢數據庫:findXxx()getXxx()

    3.2 DAO操作接口的實現類:實現類中完成具體的增刪改查操作

      ├此實現類完成的只是數據庫中最核心的操作,並沒有專門處理數據庫的打開和關閉,因為這些操作與具體的業務操作無關。

  4、開發service(service 對web層提供所有的業務服務)

  5、開發web層

缺點

1、Servlet作為控制器的缺點

  此處的控制器使用Servlet,使用Servlet作為控制器有以下幾個缺點:

  1、控制邏輯可能比較復雜,其實我們可以按照規約,如請求參數submitFlag=toLogin,我們其實可以直接調用toLogin方法,來簡化控制邏輯;而且每個模塊基本需要一個控制器,造成控制邏輯可能很復雜。現在流行的Web MVC框架(如Struts2)都支持"請求參數submitFlag=toAdd,就可以直接調用toAdd方法"這樣的處理機制,在Struts2中類似這樣的處理機制就稱為"動態方法調用"

  2、請求參數到模型的封裝比較麻煩,如果能交給框架來做這件事情,我們可以從中得到解放。

  請求參數到模型的封裝代碼:

// 1收集參數
String username = req.getParameter("username");
String password = req.getParameter("password");
// 2封裝參數
UserBean user = new UserBean();
user.setUsername(username);
user.setPassword(password);

  當有幾十個甚至上百個參數需要封裝到模型中時,這樣寫恐怕就痛苦萬分了,要寫幾十次甚至上百次這樣的代碼,估計寫到吐了,所以現在流行的Web MVC框架(如Struts2)都提供了非常方便的獲取參數,封裝參數到模型的機制,減少這些繁瑣的工作

  3、選擇下一個視圖,嚴重依賴Servlet API,這樣很難或基本不可能更換視圖。

例如:使用Servlet API提供的request對象的getRequestDispatcher方法選擇要展示給用戶看的視圖

 

private void toLogin(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
    //使用Servlet API提供的request對象的getRequestDispatcher方法選擇視圖
     // 此處和JSP視圖技術緊密耦合,更換其他視圖技術幾乎不可能 
    request.getRequestDispatcher("/mvc/login.jsp").forward(request, response);
}

 

  4、給視圖傳輸要展示的模型數據,也需要使用Servlet API,更換視圖技術也要一起更換,很麻煩。

例如:使用Servlet API提供的request對象給視圖傳輸要展示的模型數據

//使用Servlet API提供的request對象給視圖login.jsp傳輸要展示的模型數據(user) request.setAttribute("user", user); request.getRequestDispatcher("/mvc/login.jsp").forward(request, response)

3.2、JavaBean作為模型的缺點

  此處模型使用JavaBean,JavaBean組件類既負責收集封裝數據,又要進行業務邏輯處理,這樣可能造成JavaBean組件類很龐大,所以一般現在項目都是采用三層架構,而不直接采用JavaBean

3.3、視圖的缺點

  現在被綁定在JSP,很難更換視圖,比如Velocity、FreeMarker;比如我要支持Excel、PDF視圖等等。

  點擊此處下載項目源碼:


免責聲明!

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



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