Spring4.x官方参考文档中文版——第21章 Web MVC框架(30)

来源:互联网 发布:php中tr什么意思 编辑:程序博客网 时间:2024/04/29 23:55

21.15 基于代码的Servlet容器初始化

        在Servlet3.0+的环境下,你可以选择使用编程,同时结合web.xml来配置Servlet。下方是注册一个DispatcherServlet的示例:

import org.springframework.web.WebApplicationInitializer; public classMyWebApplicationInitializer implementsWebApplicationInitializer {     @Override    public voidonStartup(ServletContext container) {       XmlWebApplicationContext appContext = newXmlWebApplicationContext();       appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");        ServletRegistration.Dynamic registration = container.addServlet("dispatcher", newDispatcherServlet(appContext));       registration.setLoadOnStartup(1);       registration.addMapping("/");   } }

        WebApplicationInitializer是Spring MVC提供的接口,用来确保你的实现是被检测到的,并且自动地在任意Servlet 3容器中初始化。WebApplicationInitializer的抽象基类的实现名叫AbstractDispatcherServletInitializer,使注册DispatcherSerlvet更简单,只需覆写其方法到servlet的映射和其配置的地址,如下所示:

public classMyWebAppInitializer extendsAbstractAnnotationConfigDispatcherServletInitializer {     @Override    protected Class<?>[]getRootConfigClasses() {       return null;   }     @Override    protected Class<?>[]getServletConfigClasses() {       return new Class[] {MyWebConfig.class };   }     @Override    protected String[]getServletMappings() {       return new String[] { "/" };   } }

    上方的例子展示了基于java 的Spring配置的应用。如果使用基于XML的Spring配置,直接继承AbstractDispatcherServletInitializer:

public classMyWebAppInitializer extendsAbstractDispatcherServletInitializer {     @Override    protected WebApplicationContextcreateRootApplicationContext() {       return null;   }     @Override    protectedWebApplicationContext createServletApplicationContext() {       XmlWebApplicationContext cxt = newXmlWebApplicationContext();       cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");       return cxt;   }     @Override    protected String[]getServletMappings() {       return new String[] { "/" };   } }

        AbstractDispatcherServletInitializer同时也提供了一种很方便的方法来添加过滤器实例,并把他们自动映射到对应DispatcherServlet上:

public classMyWebAppInitializer extendsAbstractDispatcherServletInitializer {     // ...     @Override    protected Filter[]getServletFilters() {       return new Filter[] { newHiddenHttpMethodFilter(), new CharacterEncodingFilter()};   } }

        每一个被自动映射到DispatcherServlet上的过滤器的默认名,是基于其构造的类型的。

        AbstractDispatcherServletInitializer中的受保护的方法isAsyncSupported,提供了在DispatcherServlet和所有映射到此Servlet的过滤器的异步支持。此方法默认为true。

        最后,如果你需要更加个性化定制DispatcherServlet,你可以覆写createDispatcherServlet方法来实现。

1 0
原创粉丝点击