欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

通过程序定义DispatcherServlet

程序员文章站 2022-03-02 10:35:30
...

通过程序定义DispatcherServlet

以往我们在使用SpringMVC的时候都需要在web.xml中定义一个DispatcherServlet。基于Servlet3编程时我们也可以通过程序来注册DispatcherServlet,Servlet3的ServletContainerInitializer允许我们在容器启动的时候通过程序注册一些Servlet对象,Spring提供了一个实现,叫SpringServletContainerInitializer,同时对外开放了一个WebApplicationInitializer接口,如果需要通过程序来注册DispatcherServlet,我们只需自定义一个WebApplicationInitializer实现类,在其onStartup方法体中注册即可。容器启动的时候会自动调用其onStartup方法。

在下面的代码中我们自定义了一个WebApplicationInitializer实现类,并通过程序注册了DispatcherServlet。Spring也提供了WebApplicationInitializer的一个抽象实现,AbstractDispatcherServletInitializer,通过继承该抽象类,我们可以通过重写其中的方法的方式处理我们关心的某部分内容,比如可以通过重写getServletMappings方法指定servlet的映射路径;通过重写getServletFilters方法指定DispatcherServlet需要应用的Filter;也可以通过重写customizeRegistration自定义一些配置。

public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        XmlWebApplicationContext appContext = new XmlWebApplicationContext();
        appContext.setConfigLocation("/WEB-INF/applicationContext-mvc.xml");
        ServletRegistration.Dynamic registration = servletContext.addServlet("dispatcher", new
        DispatcherServlet(appContext));
        registration.setLoadOnStartup(1);
        registration.setAsyncSupported(true);
        registration.addMapping("/springmvc/*");
    }

}

也可以选择直接继承AbstractDispatcherServletInitializer,然后实现其中的抽象方法。

(注:本文是基于Spring4.1.0所写)