你的位置:首页 > Java教程

[Java教程]SpringMVC 配置多个dispatcher 及WebApplicationInitializer的使用


SpringMVC 在配置多个dispatcher时,一般可以如下配置:
<!-- spring mvc start -->  <servlet>    <servlet-name>springMVC</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <init-param>      <param-name>contextConfigLocation</param-name>      <param-value>classpath*:/spring-mvc.</param-value>    </init-param>    <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>springMVC</servlet-name>    <url-pattern>/</url-pattern>  </servlet-mapping>  <servlet>    <servlet-name>SytDeveloper</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <init-param>      <param-name>contextConfigLocation</param-name>      <param-value>classpath*:/developer-spring-mvc.</param-value>    </init-param>    <load-on-startup>2</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>SytDeveloper</servlet-name>    <url-pattern>/developer/*</url-pattern>  </servlet-mapping>    <servlet-mapping>    <servlet-name>default</servlet-name>    <url-pattern>*.html</url-pattern>  </servlet-mapping>  <!-- spring mvc end -->

注意:

 1.在developer-spring-mvc.

No mapping found for HTTP request with URI [/developer/html/index.jsp] in DispatcherServlet with name 'developerMvc'

 因为DispatcherServlet会把页面路径当做URI处理,而不是进行视图解析

2.SytDeveloper的 url-pattern 后面要代*,如果不带,会使用名称为SpringMVC 的DispatcherServlet进行处理

 

另外,在多模块的开发过程中,如果需要多个DispatcherServlet,可能需要修改web. Servlet 3.0+才可以实现。关于WebApplicationInitializer的详细介绍,网上有许多详细介绍,主要原理是容器会自动扫面ServletContainerInitializer接口的实现类 ,然后调用onStartup方法,Spring为我们提供了一个实现类SpringServletContainerInitializer,而只要是WebApplicationInitializer的实现类就都可以被SpringServletContainerInitializer自动识别处理,想详细了解可以查看这几个类的源代码。

例子:

将上面web.

 

/** * @title: FrameDefaultInitializer.java * @package com.shuyuntu.initializer * @description: TODO 对Frame进行初始化配置,可以初始化配置filter、listener、servlet等 * @copyright: shuyuntu.com * @author 张世民 * @date 2016年8月17日 上午9:28:03 * @version 1.0 */public class FrameDefaultInitializer implements WebApplicationInitializer {  @Override  public void onStartup(ServletContext servletContext) throws ServletException {    // TODO 运行初始化    //servletContext.getServletRegistration("default").addMapping("*.html");    // 添加Spring mvc 配置    new "classpath*:/spring-mvc.);    ServletRegistration.Dynamic dispatcher = servletContext.addServlet("springMvc",        new DispatcherServlet(appContext));    dispatcher.setLoadOnStartup(100);    dispatcher.addMapping("/");  }}

 

附:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/WebApplicationInitializer.html

 

使用代码进行配置,感觉模块与模块之间更加灵活,一个平台需要哪些模块就可以直接在maven中配置随意引用