訂閱
糾錯
加入自媒體

springMVC原理及執(zhí)行流程詳解

SpringMVC 簡介

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

SpringMVC 優(yōu)點

1. 基于MVC 架構(gòu)

基于 MVC 架構(gòu),功能分工明確。解耦合,

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

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

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

4. SpringMVC 強(qiáng)化注解的使用,在控制器,Service,Dao 都可以使用注解。方便靈活。使用@Controller 創(chuàng)建處理器對象,@Service 創(chuàng)建業(yè)務(wù)對象,@Autowired 或者@Resource 在控制器類中注入 Service, Service 類中注入Dao。

第一個注解的 SpringMVC 程序

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

項目:primary-annotation

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

新建maven web 項目

pom.xml

在創(chuàng)建好web 項目后,加入 Servlet 依賴,SpringMVC 依賴

依賴:

插件:

注冊中央調(diào)度器

(1) 全限定性類名

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

(2) <load-on-startup/>

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

它的值必須是一個整數(shù)。

當(dāng)值大于等于 0 時,表示容器在啟動時就加載并初始化這個 servlet,數(shù)值越小,該Servlet 的優(yōu)先級就越高,其被創(chuàng)建的也就越早;

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

當(dāng)值相同時,容器會自己選擇創(chuàng)建順序。

(3) <url-pattern/>

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

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

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

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

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

創(chuàng)建SpringMVC 配置文件

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

創(chuàng)建處理器

在類上與方法上添加相應(yīng)注解即可。@Controller:表示當(dāng)前類為處理器

@RequestMapping:表示當(dāng)前方法為處理器方法。該方法要對 value 屬性所指定的URI 進(jìn)行處理與響應(yīng)。被注解的方法的方法名可以隨意。

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

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

Model 中的數(shù)據(jù)存儲在 request 作用域中,SringMVC 默認(rèn)采用轉(zhuǎn)發(fā)的方式跳轉(zhuǎn)到視圖,本次請求結(jié)束,模型中的數(shù)據(jù)被銷毀。

聲明組件掃描器

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

定義目標(biāo)頁面

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

修改視圖解析器的注冊

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

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

修改處理器

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

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

SpringMVC 的 MVC 組件

SpringMVC 執(zhí)行流程

流程圖

執(zhí)行流程簡單分析

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

(2) 中央調(diào)度器直接將請求轉(zhuǎn)給處理器映射器。

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

(4) 中央調(diào)度器根據(jù)處理器執(zhí)行鏈中的處理器,找到能夠執(zhí)行該處理器的處理器適配器。

(5) 處理器適配器調(diào)用執(zhí)行處理器。

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

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

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

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

(10) 中央調(diào)度器調(diào)用視圖對象,讓其自己進(jìn)行渲染,即進(jìn)行數(shù)據(jù)填充,形成響應(yīng)對象。

(11) 中央調(diào)度器響應(yīng)瀏覽器。

image.png

image.png

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

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

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

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

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

暫無評論

暫無評論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯
x
*文字標(biāo)題:
*糾錯內(nèi)容:
聯(lián)系郵箱:
*驗 證 碼:

粵公網(wǎng)安備 44030502002758號