此文章轉載:https://blog.csdn.net/khxu666/article/details/79913151
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層(mapper): 負責數據庫的訪問,增、刪、改、查等,在MyBatis框架中也常被定義為Mapper層。
- Service層:由業務邏輯對象組成,是不同系統的業務邏輯的具體實現。
- Controller層:由控制器組成,對來自瀏覽器的用戶請求進行攔截,並調用Service層的響應的業務邏輯組件處理用戶請求,並轉發返回結果到View層。
- View層:由JSP界面,PDF文檔等組件組成,用於顯示系統對用戶請求的處理結果
其中SSM框架經常把dao包命名為mapper包,並將mybatis框架的xxxMapper.java和xxxMapper.xml文件放到此包中
Java 代碼源文件中幾個包的作用
包名 | 名稱 | 作用 |
DAO | 數據訪問層(接口) | 封裝對數據庫的操作,與數據操作有關的都放在這里 |
DTO | 數據傳輸層 | 用於 service 層與 web 層之間傳輸,是Entity的一部分或組合 |
Entity | 實體類 | 一般與數據庫的表相對應,封裝 dao 層取出來的數據為一個對象 |
Service | 業務邏輯(接口) | 寫我們的業務邏輯 |
Service-Impl | 業務邏輯具體實現 | 實現我們業務接口,一般事務控制是寫在這里 |
Controller | MVC控制器 | Spring MVC 就是在這里發揮作用的 |
Mapper | 數據庫具體操作 | 包含 xxxMapper.xml(和xxxMapper.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:存放后端配置文件
配置文件 | 名稱 | 內容 |
spring-dao.xml | spring數據連接配置 | 配置數據庫連接池、sqlSessionFactory對象,掃描DAO接口 |
spring-service.xml | spring 服務配置 | 掃描service包下注解、配置事務管理器、基於注解的事務 |
spring-mvc.xml | spring MVC 配置 | 開啟框架注解模式、處理靜態資源、配置jsp、掃描Controller |
jdbc.properties | 數據庫連接參數 | 配置 JDBC、數據庫url、用戶名、密碼等 |
mybatis-config.xml | mybatis 配置文件 | 開啟自增主鍵、使用列別名、駝峰轉換 |
log4j.properties | web 日志輸出參數 | web 日志輸出參數 |
applicationContext.xml | Spring與mybatis整合配置 | 配置數據庫連接池、sqlSessionFactory對象,掃描DAO接口 |
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),事務控制。