(二)SpringMVC核心控制器
一、如何配置 Spring MVC 的核心控制器?
DispatcherServlet是前端控制器設計模式的實現,提供Spring Web MVC的集中訪問點,主要負責職責的分派。
配置 <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--指定配置文件的位置,默認“/WEB-INF/[servlet名字]-servlet.xml”。--> <init-param><param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
load-on-startup:表示啟動容器時初始化該Servlet;
url-pattern:表示哪些請求交給Spring Web MVC處理, “/” 是用來定義默認servlet映射的。也可以如“*.html”表示攔截所有以html為擴展名的請求。
DispatcherServlet的默認配置在DispatcherServlet.properties(和DispatcherServlet類在一個包下)中,而且是當Spring配置文件中沒有指定配置時使用的默認策略。
DispatcherServlet在啟動時會自動註冊這些默認的Bean,無需我們註冊,如果我們註冊了,默認的將不會註冊。因此我們入門案例中的BeanNameUrlHandlerMapping、SimpleControllerHandlerAdapter是不需要我們手動註冊的,DispatcherServlet默認會註冊這兩個Bean。裏面還有一些其他的默認Bean,我們可以自行去了解。
接下來我們了解一下Spring MVC需要的那些組件。
二、Spring MVC 的核心控制器的作用是?
DispatcherServlet是前端控制器設計模式的實現,提供Spring Web MVC的集中訪問點,而且負責職責的分派,而且與Spring IoC容器無縫集成,從而可以獲得Spring的所有好處。 具體請參考第二章的圖2-1。
DispatcherServlet主要用作職責調度工作,本身主要用於控制流程,主要職責如下:
1、文件上傳解析,如果請求類型是multipart將通過MultipartResolver進行文件上傳解析;
2、通過HandlerMapping,將請求映射到處理器(返回一個HandlerExecutionChain,它包括一個處理器、多個HandlerInterceptor攔截器);
3、通過HandlerAdapter支持多種類型的處理器(HandlerExecutionChain中的處理器);
4、通過ViewResolver解析邏輯視圖名到具體視圖實現;
5、本地化解析;
6、渲染具體的視圖等;
7、如果執行過程中遇到異常將交給HandlerExceptionResolver來解析。
從以上我們可以看出DispatcherServlet主要負責流程的控制(而且在流程中的每個關鍵點都是很容易擴展的)。
三、默認情況下 Spring MVC 的核心控制器從哪裏獲取配置文件?
該DispatcherServlet默認使用WebApplicationContext作為上下文,SpringMVC默認配置文件為“/WEB-INF/[servlet名字]-servlet.xml”。可以通過<init-param>來自定義文件名稱和位置。
(二)SpringMVC核心控制器