訂閱
糾錯
加入自媒體

springMVC原理及執行流程詳解

2021-06-15 18:19
動力節點
關注

SpringMVC 簡介

SpringMVC 也叫 Spring web mvc。是 Spring 框架的一部分,是在Spring3.0 后發布的。

SpringMVC 優點

1. 基于MVC 架構

基于 MVC 架構,功能分工明確。解耦合,

2. 容易理解,上手快;使用簡單。

就可以開發一個注解的 SpringMVC 項目,SpringMVC 也是輕量級的,jar 很小。不依賴的特定的接口和類。

3. 作為Spring 框架一部分,能夠使用Spring 的IoC 和Aop。方便整合Strtus,MyBatis,Hiberate,JPA 等其他框架。

4. SpringMVC 強化注解的使用,在控制器,Service,Dao 都可以使用注解。方便靈活。使用@Controller 創建處理器對象,@Service 創建業務對象,@Autowired 或者@Resource 在控制器類中注入 Service, Service 類中注入Dao。

第一個注解的 SpringMVC 程序

所謂 SpringMVC 的注解式開發是指,在代碼中通過對類與方法的注解, 便可完成處理器在springmvc 容器的注冊。注解式開發是重點。

項目:primary-annotation

完成功能:用戶提交一個請求,服務端處理器在接收到這個請求后,給出一條歡迎信息,在響應頁面中顯示該信息。

新建maven web 項目

pom.xml

在創建好web 項目后,加入 Servlet 依賴,SpringMVC 依賴

依賴:

插件:

注冊中央調度器

(1) 全限定性類名

該中央調度器為一個 Servlet,名稱為 DispatcherServlet。中央調度器的全限定性類名在導入的Jar 文件
spring-webmvc-5.2.5.RELEASE.jar 的第一個包org.springframework.web.servlet 下可找到。

(2) <load-on-startup/>

在<servlet/>中添加<load-on-startup/>的作用是,標記是否在Web 服務器(這里是 Tomcat)啟動時會創建這個 Servlet 實例,即是否在Web 服務器啟動時調用執行該 Servlet 的 init()方法,而不是在真正訪問時才創建。

它的值必須是一個整數。

當值大于等于 0 時,表示容器在啟動時就加載并初始化這個 servlet,數值越小,該Servlet 的優先級就越高,其被創建的也就越早;

當值小于 0 或者沒有指定時,則表示該 Servlet 在真正被使用時才會去創建。

當值相同時,容器會自己選擇創建順序。

(3) <url-pattern/>

對于<url-pattern/>,可以寫為 / ,建議寫為*.do 的形式。

(4) 配置文件位置與名稱

注冊完畢后,可直接在服務器上發布運行。此時,訪問瀏覽器頁面,控制臺均會拋出FileNotFoundException 異常。即默認要從項目根下的WEB-INF 目錄下找名稱為 Servlet 名稱-servlet.xml 的配置文件。這里的“Servlet 名 稱”指的是注冊中央調度器<servlet-name/>標簽中指定的 Servlet 的name 值。本例配置文件名為springmvc-servlet.xml。

而一般情況下,配置文件是放在類路徑下,即resources 目錄下。所以, 在注冊中央調度器時,還需要為中央調度器設置查找 SpringMVC 配置文件路徑,及文件名。

打開DispatcherServlet 的源碼,其繼承自FrameworkServlet,而該類中有一個屬性 contextConfigLocation,用于設置 SpringMVC 配置文件的路徑及文件名。該初始化參數的屬性就來自于這里。

創建SpringMVC 配置文件

在工程的類路徑即src 目錄下創建 SpringMVC 的配置文件springmvc.xml。該文件名可以任意命名。

創建處理器

在類上與方法上添加相應注解即可。@Controller:表示當前類為處理器

@RequestMapping:表示當前方法為處理器方法。該方法要對 value 屬性所指定的URI 進行處理與響應。被注解的方法的方法名可以隨意。

若有多個請求路徑均可匹配該處理器方法的執行,則@RequestMapping 的value 屬性中可以寫上一個數組。

ModelAndView 類中的addObject()方法用于向其 Model 中添加數據。Model 的底層為一個HashMap。

Model 中的數據存儲在 request 作用域中,SringMVC 默認采用轉發的方式跳轉到視圖,本次請求結束,模型中的數據被銷毀。

聲明組件掃描器

在springmvc.xml 中注冊組件掃描器

定義目標頁面

在webapp 目錄下新建一個子目錄jsp,在其中新建一個jsp 頁面show.jsp。

修改視圖解析器的注冊

SpringMVC 框架為了避免對于請求資源路徑與擴展名上的冗余,在視圖解析器
InternalResouceViewResolver 中引入了請求的前輟與后輟。而ModelAndView 中只需給出要跳轉頁面的文件名即可,對于具體的文件路徑與文件擴展名,視圖解析器會自動完成拼接。

把show.jsp 文件放到 /WEB-INF/jsp/路徑中

修改處理器

使用邏輯視圖名稱,show 是邏輯視圖名稱。

使用SpringMVC 框架 web 請求處理順序

SpringMVC 的 MVC 組件

SpringMVC 執行流程

流程圖

執行流程簡單分析

(1) 瀏覽器提交請求到中央調度器

(2) 中央調度器直接將請求轉給處理器映射器。

(3) 處理器映射器會根據請求,找到處理該請求的處理器,并將其封裝為處理器執行鏈后返回給中央調度器。

(4) 中央調度器根據處理器執行鏈中的處理器,找到能夠執行該處理器的處理器適配器。

(5) 處理器適配器調用執行處理器。

(6) 處理器將處理結果及要跳轉的視圖封裝到一個對象 ModelAndView 中,并將其返回給處理器適配器。

(7) 處理器適配器直接將結果返回給中央調度器。

(8) 中央調度器調用視圖解析器,將 ModelAndView 中的視圖名稱封裝為視圖對象。

(9) 視圖解析器將封裝了的視圖對象返回給中央調度器

(10) 中央調度器調用視圖對象,讓其自己進行渲染,即進行數據填充,形成響應對象。

(11) 中央調度器響應瀏覽器。

image.png

image.png

以上SpringMVC全套視頻、資料可私信/評論免費獲取哦~~~

聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

發表評論

0條評論,0人參與

請輸入評論內容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續

暫無評論

暫無評論

    人工智能 獵頭職位 更多
    掃碼關注公眾號
    OFweek人工智能網
    獲取更多精彩內容
    文章糾錯
    x
    *文字標題:
    *糾錯內容:
    聯系郵箱:
    *驗 證 碼:

    粵公網安備 44030502002758號