1 Spring Web MVC
Spring Web MVC来源于spring-webmvc模块。
1.1 DispatcherServlet前端控制器
处于中央Servlet的DispatcherServlet,提供了一种用于请求处理的共享算法,而实际的工作由可配置的委托组件来执行。支持多种工作流程。
DispatcherServlet使用spring的配置来发现它需要的请求映射、视图解析、异常处理、委托组件及其他。
以下是在web.xml配置中注册、初试化DispatcherServlet:
<web-app>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
// springmvc配置文件
<param-value>/WEB-INF/app-context.xml</param-value>
</context-param>
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
</web-app>
1.1.1 应用程序上下文层次结构
Root WebApplicationContext通常包含基础结构bean,在多个DispatcherServlet(或其他Servlet)实例之间共享,每个实例还有其自己的子Servlet WebApplicationContext配置。
在web.xml配置应用程序上下文层次结构:
<web-app>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- 根上下文配置文件 -->
<param-value>/WEB-INF/root-context.xml</param-value>
</context-param>
<servlet>
<servlet-name>app1</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- servlet实例子上下文配置文件 -->
<param-value>/WEB-INF/app-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app1</servlet-name>
<url-pattern>/app1/*</url-pattern>
</servlet-mapping>
</web-app>
如果不需要应用程序上下文层次结构,则应用程序可以仅配置“根”上下文,并将contextConfigLocationServlet参数保留为空。
1.1.2 特殊类型bean-处理请求、渲染响应
在DispatcherServlet中特殊类型bean用于处理请求、渲染响应。
特殊类型bean指带有内置约束,但可以自定义属性、扩展、替换它们。如:
特殊类型bean | 说明 |
---|---|
HandlerMapping | 将请求映射到处理程序以及用于预处理和后处理的拦截器列表 。 映射基于某些标准,其细节因HandlerMapping实现类而异。两个主要HandlerMapping实现类:RequestMappingHandlerMapping (支持带@RequestMapping注释的方法)和SimpleUrlHandlerMapping(维护URI路径模式到处理程序的显式注册)。 |
HandlerAdapter | DispatcherServlet无论如何调用处理程序,都可以使调用映射到请求的处理程序。例如,调用带注解的控制器需要解析注,HandlerAdapter主要目的是保护DispatcherServlet这些细节。< |