spring與servlet3.0無web.xml文件時的配置方式

jopen 8年前發布 | 56K 次閱讀 Servlet Java開發


    這里只做簡要的記錄,更詳細的使用方式,更詳細的資料參見spring參考文檔(21.15 Code-based Servlet container initialization),以后會慢慢補充。


21.15 Code-based Servlet container initialization

In a Servlet 3.0+ environment, you have the option of configuring the Servlet container programmatically as an alternative or in combination with a web.xml file. Below is an example of registering a DispatcherServlet:

import org.springframework.web.WebApplicationInitializer; 
public class MyWebApplicationInitializer implements WebApplicationInitializer {     
    @Override
    public void onStartup(ServletContext container) {
        XmlWebApplicationContext appContext = new XmlWebApplicationContext();
        appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");

        ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext));
        registration.setLoadOnStartup(1);
        registration.addMapping("/");
    }

}

WebApplicationInitializer is an interface provided by Spring MVC that ensures your implementation is detected and automatically used to initialize any Servlet 3 container. An abstract base class implementation of WebApplicationInitializer named AbstractDispatcherServletInitializer makes it even easier to register the DispatcherServlet by simply overriding methods to specify the servlet mapping and the location of the DispatcherServlet configuration:

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

}

The above example is for an application that uses Java-based Spring configuration. If using XML-based Spring configuration, extend directly from AbstractDispatcherServletInitializer:

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer { 
    @Override
    protected WebApplicationContext createRootApplicationContext() { 
        return null;
    } 
    @Override
    protected WebApplicationContext createServletApplicationContext() {

        XmlWebApplicationContext cxt = new XmlWebApplicationContext();
        cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml"); 
        return cxt;
    } 
    @Override
    protected String[] getServletMappings() { 
        return new String[] { "/" };
    }

}

AbstractDispatcherServletInitializer also provides a convenient way to add Filter instances and have them automatically mapped to the DispatcherServlet:

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {    // ...    @Override
    protected Filter[] getServletFilters() { 
        return new Filter[] { new HiddenHttpMethodFilter(), new CharacterEncodingFilter() };
    }

}

Each filter is added with a default name based on its concrete type and automatically mapped to the DispatcherServlet.

The isAsyncSupported protected method of AbstractDispatcherServletInitializer provides a single place to enable async support on the DispatcherServlet and all filters mapped to it. By default this flag is set to true.

Finally, if you need to further customize the DispatcherServlet itself, you can override the createDispatcherServlet method.

來自: http://my.oschina.net/u/1011578/blog/601719

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!