spring mvc的web应用容器(webApplicationContext)配置详解

一、指定配置文件目录

一般而言,在web项目主配置web.xml(WEB-INF/web.xml)中指定web应用容器配置文件(web上下文配置文件)的位置,如果不指定,它默认读取WEB-INF目录下的[servletName]-servlet.xml文件。
在web.xml中通过init-param来指定容器配置文件目录,如下:

  1. <servlet>
  2. <servlet-name>dispatcher</servlet-name>
  3. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  4. <init-param>
  5. <param-name>contextConfigLocation</param-name>
  6. <param-value>webconext-servlet.xml</param-value>
  7. </init-param>
  8. <load-on-startup>1</load-on-startup>
  9. </servlet>

二、容器配置文件的作用:

容器配置文件主要是指定与DispatcherServlet相关的beans。DispatcherServlet 使用了其专用的 bean 来处理请求和渲染视图。这些 bean 是 Spring 的组成部分之一,你可以选择在 WebApplicationContext配置所使用一个或多个专用的bean。当然,比并不需要一开始就去配置这些专用的 bean,因为在你不配置这些 bean时,Spring 会维护一系列默认的 bean。

三、容器配置文件详解

1、配置文件格式
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <!--<context:component-scan base-package="com.shixinke"/>-->
  6. <!--InternalResourceViewResolver:用于支持Servlet、JSP视图解析-->
  7. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  8. <!--模板文件的前缀,一般指目录-->
  9. <property name="prefix" value="/WEB-INF/jsp/" />
  10. <!--模板文件的后缀-->
  11. <property name="suffix" value=".jsp" />
  12. </bean>
  13. </beans>
2、专用beans详解
Bean 类型 解释
HandlerMapping 将传入的请求映射到处理器,与一系列基于各种条件的 pre- 和 post- 处理器,这些处理器根据HandlerMapping 实现的不同而会有所差异。最会欢迎的 HandlerMapping 实现提供注解控制器,但其他实现也仍然是存在的。
HandlerAdapter 帮助 DispatcherServlet 去调用请求所映射的 handler,不管hadler 最终是否会被调用,这个处理过程都会存在的。比如,调用注解控制器前需要解析各种 annotations。因此,HandlerAdapter 的主要目的就是从 DispatcherServlet 中屏蔽这些处理细节。
HandlerExceptionResolver 将异常映射到指定视图,也支持自定义更加复杂的异常处理流程
ViewResolver 将合理的视图名称解释为真实的视图类型
LocaleResolver &LocaleContextResolver 解释客户端所在地区和其时区(本地化),以便提供国际化的视图
ThemeResolver 解释 web 程序可用的主题,比如,提供个性化的布局
MultipartResolver 解释 multi-part 请求,比如,在 html form 里支持文件上传
FlashMapManager 通常通过重定向将参数从一个请求传递到另一个请求