1. 配置DispatcherServlet
有两种方式配置, 一是在web.xml
中配置, 一种是实现Java配置.
1.1. 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/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>
注: 如果不指定<context-param>
, 将会默认加载/WEB-INF/applicationContext.xml
文件.
1.2. Java配置
实现WebApplicationInitializer
接口.
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletCxt) {
// 加载spring 容器
AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext();
ac.register(AppConfig.class);
ac.refresh();
// 创建并注册DispatcherServlet
DispatcherServlet servlet = new DispatcherServlet(ac);
ServletRegistration.Dynamic registration = servletCxt.addServlet("app", servlet);
registration.setLoadOnStartup(1);
registration.addMapping("/app/*");
}
}
spring会自动发现实现了WebApplicationInitializer
接口的实现类.
2. DispatcherServlet有哪些重要的初始化参数?
- contextConfigLocation: bean定义配置文件路径, 如果没有定义, 默认为
WEB-INF/namespace.xml
(namespace为其namespace
属性值). - contextClass: ApplicationContext实现类. 默认为
XmlWebApplicatinoContext
. - namespace: 默认格式为
${servlet-name}-servlet.xml
, 在XmlWebApplicationContext
下, 当没有配置contextConfigLocation
时会默认从WEB-INF
目录下以此命名的xml文件. - contextInitializerClasses:
ApplicationContextInitializer
类. 可以指定多个(用逗号分隔). 定义额外的初始化配置.
注: 以上参数是在DispatcherServlet
的父类FrameworkServlet
中定义的.
3. DispatcherServlet委托哪些类来处理请求?
3.1 HandlerMapping
处理url与controller的映射, 默认为BeanNameUrlHandlerMapping, RequestMappingHandlerMapping
.
3.2 HandlerAdapter
帮助DispatcherServlet
适配合适的请求处理程序.默认有`HttpRequestHandlerAdapter, SimpleControllerHandlerAdapter, RequestMappingHandlerAdapter.
3.3 HandlerExceptionResolver
用于处理请求过程中抛出的异常.默认为ExceptionHandlerExceptionResolver, ResponseStatusExceptionResolver, DefaultHandlerExceptionResolver
.
3.4 ViewResolver
解析视图.默认为InternalResourceViewResolver
.
3.5 RequestToViewNameTranslator
策略接口,用于在没有显式提供视图名称时将传入的HttpServletRequest转换为逻辑视图名称。默认为DefaultRequestToViewNameTranslator
.
3.6 FlashMapManager
FlashMap为一个请求提供了一种方法来存储用于另一个请求的属性。当从一个URL重定向到另一个URL时,这是最常用的. 默认为SessionFlashMapManager
.
3.7 ThemeResolver
解析web应用的主题.默认为FixedThemeResolver
.
3.8 LocaleResolver
解析程序所在的地区和时区.用于适配国际化.默认为AcceptHeaderLocaleResolver
.
3.9 MultipartResolver
解析文件上传, spring没有为其提供默认值, 因此在使用时要配置.
网友评论