應用系統三層架構:
-
C/S架構:客戶端/服務器架構
-
B/S架構:瀏覽器/服務器架構
Java開發的大多是web應用,是基於B/S架構開發的。JavaEE指定了一套規范,去進行BS結構的處理,這套規范就是Servlet。
B/S架構中,應用系統標准的三層架構為: 表現層、業務層、持久層。
表現層(Web層)
- 負責接收客戶端請求,向客戶端響應結果,通常客戶端使用http協議請求 web,web層需要接收 http請求,完成http響應。
- 表現層包括展示層和控制層:控制層負責接收請求,展示層負責結果的展示。
- 表現層依賴業務層,接收到客戶端請求一般會調用業務層進行業務處理,並將處理結果響應給客戶端。
- 表現層的設計一般都使用 MVC 模型。 MVC 是表現層的設計模型,和其他層沒有關系。
業務層 (Service層)
- 它負責業務邏輯處理,和我們開發項目的需求息息相關。web層依賴業務層,但是業務層不依賴Web層。
- 業務層在業務處理時可能會依賴持久層,如果要對數據持久化需要保證事務一致性。 (事務應該放到業務層來控制)
持久層 (dao 層)
- 負責數據持久化,包括數據層即數據庫和數據訪問層,數據庫是對數據進行持久化的載體,數據訪問層是業務層和持久層交互的接口;業務層需要通過數據訪問層將數據持久化到數據庫中。
- 持久層就是和麵庫交互,對麵庫表進行曽刪改査的。
MVC 設計模式
MVC是模型(model)-視圖(view)-控制器(controller)的縮寫,是一種用於設計編寫Web應用程序表現層的
模式。
MVC設計模式的三大角色:
Model (模型)
模型包含業務模型和數據模型,數據模型用於封裝數據,業務模型用於處理業務。
View (視圖)
通常指的就是我們的jsp或者html。作用一般就是展示數據的。
通常視圖是依據數據模型創建的。
Controller (控制器)
是應用程序中處理用戶交互的部分。作用一般就是處理程序邏輯的。
Spring MVC
Spring MVC是一種基於MVC設計模型的請求驅動類型的輕置級Web框架,屬於Spring FrameWork的后續產品,已經融合在Spring Web Flow里面Spring 框架提供了構建Web應用程序的全功能MVC模塊。
Spring MVC 與 Spring
Spring MVC 全稱為Spring Web MVC,它是Spring家族中Web模塊的一個重要成員。
SpringMVC六大組件
MVC組件:前端控制器、處理器、視圖
三大組件:處理器映射器、處理器適配器、視圖解析器
需要開發的組件:處理器、視圖(前后端分離后,后端不需要開發)
DispatcherServlet : 前端控制器
用戶請求到達前端控制器,它就相當於mvc模式中的C , dispatcherservlet是整個流程控制的中心,由它調用其它組件處理用戶的請求,dispatcherservlet的存在降低了組件之間的耦合性。
Handler : 處理器
Handler是繼DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler對具體的用戶請求進行處理。
由於Handler涉及到具體的用戶業務請求,所以一般情況需要程序員根據業務需求開發Handler。
View : 視圖
Spring MVC框架提供了很多的View視圖類型的支持,包括:jstlView、freemarkerView、pdfView等。最常用的視圖就是jsp。
通過頁面標簽或頁面模版技術將模過頁面展示給用戶,需要由程序員根據業務需求開發具體的頁面。
HandlerMapping:處理器映射器
HandlerMapping負責根據用戶請求找到Handler處理器,spring MVC提供了不同的映射器實現不同的映射方式,例如:配置文件方式,實現接口方式,注解方式等。
HandlerAdapter:處理器適配器
通過HandlerAdapter對處理器進行執行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執行。
View Resolver:視圖解析器
View Resolver負責將處理結果生成View視圖,View Resolver首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最后對View進行渲染將處理結果通過頁面展示給用戶。
web應用的訪問流程
Spring MVC底層是通過servlet實現的。
Servlet實例由Servlet容器(tomcat、jboss、jetty)產生。
Servlet實例什么時候產生?
一種是第一次訪問一個請求的時候,產生對應的Servlet對象,只會產生一次。
另一種需要針對Servlet標簽特殊配置
[Servlet] (https://www.cnblogs.com/kuotian/p/13141784.html)
客戶端訪問請求:http://xxx:8080/kkb/hello
域名/ip:確定哪台服務器 --- xxx:8080
應用名稱:確定哪個應用 --- kkb
請求字符串:需要根據web.xml中的配置找到相應的類去處理 --- hello