此文章轉載:https://blog.csdn.net/khxu666/article/details/79913151css
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應用分紅如下幾層:java
- POJO層: 由一組POJO組成,是對系統各類對象的抽象表達。
- DAO層(mapper): 負責數據庫的訪問,增、刪、改、查等,在MyBatis框架中也常被定義爲Mapper層。
- Service層:由業務邏輯對象組成,是不一樣系統的業務邏輯的具體實現。
- Controller層:由控制器組成,對來自瀏覽器的用戶請求進行攔截,並調用Service層的響應的業務邏輯組件處理用戶請求,並轉發返回結果到View層。
- View層:由JSP界面,PDF文檔等組件組成,用於顯示系統對用戶請求的處理結果
其中SSM框架常常把dao包命名爲mapper包,並將mybatis框架的xxxMapper.java和xxxMapper.xml文件放到此包中web
Java 代碼源文件中幾個包的做用
包名 | 名稱 | 做用 |
DAO | 數據訪問層(接口) | 封裝對數據庫的操做,與數據操做有關的都放在這裏 |
DTO | 數據傳輸層 | 用於 service 層與 web 層之間傳輸,是Entity的一部分或組合 |
Entity | 實體類 | 通常與數據庫的表相對應,封裝 dao 層取出來的數據爲一個對象 |
Service | 業務邏輯(接口) | 寫咱們的業務邏輯 |
Service-Impl | 業務邏輯具體實現 | 實現咱們業務接口,通常事務控制是寫在這裏 |
Controller | MVC控制器 | Spring MVC 就是在這裏發揮做用的 |
Mapper | 數據庫具體操做 | 包含 xxxMapper.xml(和xxxMapper.java 兩者互相對應 |
DAO: 裏面能夠是數據庫操做,也能夠是文件讀寫操做,甚至是redis緩存操做。也有人叫作數據持久層。由於Mybatis能夠直接在配置文件中實現接口的每一個方法,因此不須要DAOImpl。redis
DTO:剛學框架的人可能不明白這個有什麼用,其實就是用於service層與web層之間傳輸,爲何不直接用entity(pojo)?其實在實際開發中發現,不少時間一個entity並不能知足咱們的業務需求,可能呈現給用戶的信息十分之多;或者一個 Entity 包含的信息過多,咱們須要的信息僅僅是Entity的一部分,爲了減小網絡傳輸,這時候就有了dto。 通常咱們使用DTO類來繼承entity實體類,在DTO類裏放一些業務字段,並提供get、set方法。當咱們在業務邏輯層或者交互層用到一些數據庫中不存在的字段時,咱們就須要在DTO類裏放這些字段,這些字段的意義就至關於一些經處理過的數據庫字段,實質意義就是方便數據交互,提升效率。spring
Entity:通常與數據庫的表相對應,封裝dao層取出來的數據爲一個對象,也就是咱們常說的pojo,通常只在dao層與service層之間傳輸sql
可選的額外包:數據庫
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),事務控制。