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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值