3、Spring MVC 之 一些特殊的Bean
发布日期:2021-06-29 12:52:02 浏览次数:2 分类:技术文章

本文共 4338 字,大约阅读时间需要 14 分钟。

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可以用来传递属性从一个请求到另一个,通常在一个重定向。具体的实例为:

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.AcceptHeaderLocaleResolverorg.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolverorg.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\   org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMappingorg.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\   org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\   org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapterorg.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\   org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\   org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolverorg.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslatororg.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolverorg.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

因为水平有限,翻译不足之处还望见谅。

原文地址:

转载地址:https://carlzone.blog.csdn.net/article/details/51892501 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java JDK Integer Cache
下一篇:Spring AOP 动态多数据源

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月17日 17时34分20秒