<!-- 主 MVC -->
<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.xml</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>
<!-- 開發者專用 MVC -->
<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.xml</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 -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
url-pattern=/developer/*,prefix 配置 /WEB-INF/views/ 而非 /developer/WEB-INF/views/,否則報 404:No mapping found for HTTP request with URI [/developer/html/index.jsp]模塊化開發中,避免修改 web.xml,使用代碼自動註冊:
public class FrameDefaultInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
// 靜態資源映射
servletContext.getServletRegistration("default").addMapping("*.html");
// 主 SpringMVC
XmlWebApplicationContext appContext = new XmlWebApplicationContext();
appContext.setConfigLocation("classpath*:/spring-mvc.xml");
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("springMvc",
new DispatcherServlet(appContext));
dispatcher.setLoadOnStartup(100);
dispatcher.addMapping("/");
}
}
ServletContainerInitializer 實現類SpringServletContainerInitializer 實現WebApplicationInitializer 實現類的 onStartup()WebApplicationInitializer 實現
// 模塊內部初始化器示例
@Order(100) // 控制啟動順序
public class DeveloperModuleInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
XmlWebApplicationContext ctx = new XmlWebApplicationContext();
ctx.setConfigLocation("classpath*:/developer-spring-mvc.xml");
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("developerMvc",
new DispatcherServlet(ctx));
dispatcher.setLoadOnStartup(200);
dispatcher.addMapping("/developer/*");
}
}
主項目只需依賴模塊 JAR,容器自動掃描啟動,實現真正的插拔式架構。