美文网首页Spring-webmvc
配置DispatcherServlet

配置DispatcherServlet

作者: xzz4632 | 来源:发表于2019-07-06 15:44 被阅读0次

    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没有为其提供默认值, 因此在使用时要配置.

    相关文章

      网友评论

        本文标题:配置DispatcherServlet

        本文链接:https://www.haomeiwen.com/subject/fbguhctx.html