Java Web常見的三層結構
表現層:也就是Web層,常見的框架有Spring MVC、Struts2 ,並包括用於展示的界面,如JSP界面;
業務層:Service層,專注於業務邏輯的實現;
持久層:也叫Dao層,常見的框架是Hibernate、MyBatis。負責與數據庫的交互,封裝數據庫的訪問細節;從數據庫表中讀取加載數據並實例化領域對象(Domian Object)也就是從數據庫中讀取數據,或者返過來將領域對象實例化到數據庫中,也就是將數據寫入到數據庫中。
當服務器接受到來時瀏覽器的請求后,web層首先開始工作,根據不同的請求創建相應的servlet對請求進行處理轉發,業務層在收到來自web層的信息之后,調用持久層,持久層訪問數據庫后得到返回結果,經過業務層將返回結果填充到顯示界面中(JSP中),web層將Jsp界面作為瀏覽器請求的響應結果返回到瀏覽器。
工作流程圖如下所示:(引用他處圖片,侵刪)
三層結構在SSM框架中的體現
在用Java開發互聯網應用時,SSM框架(Spring + Spring MVC + MyBatis)成為了越來越主流的選擇。
在輕量級的開發中,常對Web應用分成以下幾層:
POJO層: 由一組POJO組成,是對系統各種對象的抽象表達。
DAO層: 負責數據庫的訪問,增、刪、改、查等,在MyBatis框架中也常被定義為Mapper層。
Service層:由業務邏輯對象組成,是不同系統的業務邏輯的具體實現。
Controller層:由控制器組成,對來自瀏覽器的用戶請求進行攔截,並調用Service層的響應的業務邏輯組件處理用戶請求,並轉發返回結果到View層。
View層:由JSP界面,PDF文檔等組件組成,用於顯示系統對用戶請求的處理結果。
因此,在常見的輕量級Java Web開發中,通常會將項目建立成如下的結構:
其中SSM框架經常把dao包命名為mapper包,並將mybatis框架的xxxMapper.java和xxxMapper.xml文件放到此包中
- Java 代碼源文件中幾個包的作用
DAO: 里面可以是數據庫操作,也可以是文件讀寫操作,甚至是redis緩存操作。也有人叫做數據持久層。因為Mybatis可以直接在配置文件中實現接口的每個方法,所以不需要DAOImpl。
DTO:剛學框架的人可能不明白這個有什么用,其實就是用於service層與web層之間傳輸,為什么不直接用entity(pojo)?
其實在實際開發中發現,很多時間一個entity並不能滿足我們的業務需求,可能呈現給用戶的信息十分之多;或者一個 Entity 包含的信息過多,
我們需要的信息僅僅是Entity的一部分,為了減少網絡傳輸,這時候就有了dto。 一般我們使用DTO類來繼承entity實體類,在DTO類里放一些業務字段,
並提供get、set方法。當我們在業務邏輯層或者交互層用到一些數據庫中不存在的字段時,我們就需要在DTO類里放這些字段,這些字段的意義就相當於一些
經處理過的數據庫字段,實質意義就是方便數據交互,提高效率。
Entity:一般與數據庫的表相對應,封裝dao層取出來的數據為一個對象,也就是我們常說的pojo,一般只在dao層與service層之間傳輸
可選的額外包:
Exception:自定義異常。
Utils,即utility,工具輔助層,一組通用的代碼集合,比如處理多語言功能,網站非法信息過濾等等功能的代碼集;
resource:存放后端配置文件
webapp:前端頁面與配置文件:
存放jsp、css等靜態文件,web.xml 配置文件主要包含:
配置 Spring 需要加載的配置文件、啟用 disapatcher 轉發處理所有的請求、指定編碼格式
關於幾個包之間的關系
controller 包是 Spring MVC 的主要文件,其中對來自瀏覽器的各種請求進行轉發和處理。在 controller 中會內置各種 Service 包中的對象,當接收到新的請求的時候,解析 url ,根據注解調用相應的服務來完成請求。
entity 包常常與數據庫中的表一一對應,dao 包中定義了數據庫的基本操作,並在 mapper 包中的 xml 配置文件中完成數據操作的具體實現(也就是增、刪、改、查)。Mybatis 可以實現 dao 與 .xml 的自動匹配,這時候就需要把 xxxMapper.xml 和 xxxMapper.java 放在同一個包內。
在 Service 包中定義了各種服務的接口,然后在 Service-Impl 包中對接口進行實現,在實現接口的時候會內置一個 DAO 包中的對象(因為 web 服務的實現肯定是涉及到數據訪問的,而數據訪問被抽象成了 DAO 包中的對象,所以服務的實現必須借助 DAO 包),然后我們借助 DAO 中的對象所實現的各種數據訪問處理方法來實現具體的服務。
SSM框架中各框架的作用
MyBatis:持久層框架,負責數據庫訪問。
Spring MVC:表現層框架,把模型、視圖、控制器分離,組合成一個靈活的系統。
Spring: 整合項目的所有框架,管理各種Java Bean(mapper、service、controller),事務控制。