1、WebApplicationContext中一些特殊的Bean
在Spring MVC中DispatcherServlet
使用特殊bean来处理请求并呈现适当的视图。这些bean是Spring MVC的一部分。你可以选择使用这些特殊bean通过简单配置一个或多个WebApplicationContext
其中。这些bean对Spring MVC进行从request传到response返回,起到了至关重要的作用.首先看下DispatcherServlet
依赖的特殊bean类型的表清单。
Bean | 说明 |
---|---|
HandlerMapping | 将传入的请求映射到处理程序和基于HandlerMapping 实现中一系列的预处理和后处理器(handler interceptors[处理程序拦截器])。最受欢迎的实现支持注释控制器,当然同时也存在其他实现。 |
HandlerAdapter | 帮助DispatcherServlet 调用映射到一个请求处理程序。例如,调用一个带注释的控制器需要解决各种注释。因此HandlerAdapter 的主要目的是帮助DispatcherServlet 隐藏这些细节。 |
HandlerExceptionResolver | 异常映射到视图也允许更复杂的异常处理代码,可用于Controller的异常统一处理。 |
ViewResolver | 解析一个基于合理的String类的的页面名称为真正的org.springframework.web.servlet.View |
LocaleResolver & LocaleContextResolver | 解析客户端的使用的locale与他们的时区,这样就能够提供国际化页面 |
ThemeResolver | 解析你的web应用中使用到的主题,这样就可以提供个性化布局 |
MultipartResolver | 支持多角色的请求。例如支持处理从HTML表单上传文件。文件上传必须手动添加这个类的实现类到Springbean中,而且文件上传是依赖commons-fileupload.jar。 |
FlashMapManager | 存储和检索”输入”和”输出”FlashMap 可以用来传递属性从一个请求到另一个,通常在一个重定向。具体的实例为:POST/Redirect/GET模式问题 |
2、默认的DispatcherServlet配置
在前面提到的每个特殊的bean。在DispatcherServlet
包含都默认实现使用的列表。这个信息被保存到在org.springframework.web.servlet
包中的DispatcherServlet.properties
文件中。该文件如下所示:
# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
所有特殊bean有自己的合理的默认值。虽然你迟早需要定制这些bean提供的一个或多个属性。例如很常见一个InternalResourceViewResolver
设置它的prefix
属性用于定制你的视图文件保存的位置。
无论细节,概念的理解是最重要的,一旦你在你的WebApplicationContext
中配置等特殊bean。比如说InternalResourceViewResolver
,您有效覆盖默认的列表实现,否则会被用于特殊bean类型。例如如果你配置一个InternalResourceViewResolver
,默认实现ViewResolver
列表将被忽略。
3、DispatcherServlet的执行顺序
一旦你设置好了一个DispatcherServlet
,当请求从这个DispatcherServlet
进来的时候,DispatcherServlet
开始以下面的顺序执行这个请求:
1. WebApplicationContext
搜寻和绑定请求作为控制器和其他元素在这个过程中可以使用的属性。绑定默认是通过DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE
这个元素来作为Key值。
2. locale解析器绑定到请求启用过程中的元素来解决时所使用的语言环境处理请求(渲染视图、准备数据,等等)。如果你不需要解析locale,你不需要关注它。这里主要是Spring MVC的国际化实现。
3. 主题解析器是绑定到请求让元素,如页面确定使用哪个主题。如果你不使用的主题,你可以忽略它。这里是Spring MVC动态绑定页面样式。
4. 如果你指定一个multipart文件解析器,请求检查multiparts;如果找到multiparts,请求被包装到MultipartHttpServletRequest
进一步被其他元素处理。这里主要是Sping MVC中的文件上传。
5. 寻找一个适当的处理程序。如果找到一个处理程序,执行链相关的处理程序执行(预处理器,处理器和控制器)被执行,准备一个模型或者渲染模型。
6. 如果返回一个模型,视图也被渲染好了。如果没有返回模型(可能是由于预处理或后处理程序拦截请求,也有可能出于安全的考虑),没有渲染视图,因为请求可能已经满足了前面的条件。
在WebApplicationContext
中声明了异常处理解析器接处理请求期间抛出的异常。使用这些异常解析器允许你定义自定义异常地址。具体来说就是可以统一定义Controller的异常处理。
Spring MVC中DispatcherServlet
还支持通过指定的Servlet API返回最后一次修改日期。为一个特定的请求确定最后的修改日期的过程很简单:DispatcherServlet会查找一个合适的处理程序映射并且测试这个被发现处理程序是否实现LastModified
接口。如果实现了,调用接口LastModified 的long getLastModified()
方法就会返回最后一次修改日期给客户端。
你可以定制自己的DispatcherServlet
实例通过在web.xml
的Servlet声明中添加Servlet初始化参数(<init-param>
元素)。见下表支持的参数列表:
参数 | 说明 |
---|---|
contextClass | WebApplicationContext 的实现类,通过这个Servlet实例化使用到的的上下文。默认情况下,使用XmlWebApplicationContext |
contextConfigLocation | 传递给上下文实例的字符串(由contextClass 指定)来表示Spring MVCh上下文的资源路径。这个字符串可能包含多个用来支持多个上下文的字符串(使用逗号作为分隔符)。如果多个上下文的中定义两次bean,越后面越的优先考虑。 |
namespace | WebApplicationContext 的命名空间,默认是[servlet-name]-servlet |
因为水平有限,翻译不足之处还望见谅。
原文地址:spring-framework-reference-4.2.6.RELEASE