1. SpringMVC的執行流程
- 使用者發送請求至前端控制器DispatcherServlet。
- DispatcherServlet收到請求調用HandlerMapping處理器映射器。
- 處理器映射器找到具體的處理器(可以根據xml配置、注解進行查找),生成處理器對象及處理器攔截器(如果有則生成)一并傳回給DispatcherServlet。
- DispatcherServlet調用HandlerAdapter處理器擴充卡。
- HandlerAdapter經過适配調用具體的處理器(Controller,也叫後端控制器)。
- Controller執行完成傳回ModelAndView。
- HandlerAdapter将controller執行結果ModelAndView傳回給DispatcherServlet。
- DispatcherServlet将ModelAndView傳給ViewReslover視圖解析器。
- ViewReslover解析後傳回具體View。
- DispatcherServlet根據View進行渲染視圖(即将模型資料填充至視圖中)。DispatcherServlet響應使用者。
2. SpringMVC元件解析
- 前端控制器:
使用者請求到達前端控制器,它就相當于 MVC 模式中的 C,DispatcherServlet 是整個流程控制的中心,由它調用其它元件處理使用者的請求,DispatcherServlet 的存在降低了元件之間的耦合性。DispatcherServlet
- 處理器映射器:
HandlerMapping 負責根據使用者請求找到 Handler 即處理器,SpringMVC 提供了不同的映射器實作不同的映射方式,例如:配置檔案方式,實作接口方式,注解方式等。HandlerMapping
- 處理器擴充卡:
通過 HandlerAdapter 對處理器進行執行,這是擴充卡模式的應用,通過擴充擴充卡可以對更多類型的處理器進行執行。HandlerAdapter
- 處理器:
它就是我們開發中要編寫的具體業務控制器。由 DispatcherServlet 把使用者請求轉發到 Handler。由Handler 對具體的使用者請求進行處理。Handler
- 視圖解析器:
View Resolver 負責将處理結果生成 View 視圖,View Resolver 首先根據邏輯視圖名解析成實體圖名,即具體的頁面位址,再生成 View 視圖對象,最後對 View 進行渲染将處理結果通過頁面展示給使用者。View Resolver
- 視圖:
SpringMVC 架構提供了很多的 View 視圖類型的支援,包括:jstlView、freemarkerView、pdfView等。最常用的視圖就是 jsp。一般情況下需要通過頁面标簽或頁面模版技術将模型資料通過頁面展示給使用者,需要由程式員根據業務需求開發具體的頁面。View
3. @RequestMapping
- 作用:用于建立請求 URL 和處理請求方法之間的對應關系
- 位置:
1、類上,請求URL 的第一級通路目錄。此處不寫的話,就相當于應用的根目錄
2、方法上,請求 URL 的第二級通路目錄,與類上的使用
@ReqquestMapping
标注的一級目錄一起組成通路虛拟路徑
- 屬性:
1、
value
:用于指定請求的URL。它和path屬性的作用是一樣的
2、
method
:用于指定請求的方式
3、
params
:用于指定限制請求參數的條件。它支援簡單的表達式。要求請求參數的key和value必須和配置的一模一樣
- 例如:
params = {"accountName"}
,表示請求參數必須有
accountName
params = {"moeny!100"}
,表示請求參數中
money
不能是
100
- 測試在類上加上路徑。下面 return 傳回的位址改成了絕對位址,如果是相對的話就會去找 user 檔案夾下的 user/success.jsp
- 設定必須帶上參數
,參數值随便給個username
4. SpringMVC的XML配置解析
- mvc命名空間引入
- 命名空間:
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
- 限制位址:
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
- 元件掃描
SpringMVC基于Spring容器,是以在進行SpringMVC操作時,需要将Controller存儲到Spring容器中,如果使用
@Controller
注解标注的話,就需要使用
<context:component-scan base-package=“com.xdr630.controller"/>
- 視圖解析器SpringMVC有預設元件配置,預設元件都是
配置檔案中配置的,該配置檔案位址 org/springframework/web/servlet/DispatcherServlet.properties 該檔案中DispatcherServlet.properties
- 翻看該解析器源碼,可以看到該解析器的預設設定,如下:
REDIRECT_URL_PREFIX = "redirect:" --重定向字首
FORWARD_URL_PREFIX = "forward:" --轉發字首(預設值)
prefix = ""; --視圖名稱字首
suffix = ""; --視圖名稱字尾
- 預設的為請求轉發
- 改成重定向redirect,通路的時候直接重定向到 success.jsp 頁面
- 視圖解析器,可以通過屬性注入的方式修改視圖的的前字尾
把success.jsp 移到建立的 jsp 檔案夾下
<!--配置内部資源視圖解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- /jsp/success.jsp -->
<property name="prefix" value="/jsp"></property>
<property name="suffix" value=".jsp"></property>
</bean>
5. 知識要點
- SpringMVC的相關元件
前端控制器:DispatcherServlet
處理器映射器:HandlerMapping
處理器擴充卡:HandlerAdapter
處理器:Handler
視圖解析器:View Resolver
視圖:View
- 請求映射注解:@RequestMapping
視圖解析器配置:
REDIRECT_URL_PREFIX = "redirect:"
FORWARD_URL_PREFIX = "forward:"
prefix = "";
suffix = "";