<!-- 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.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> <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-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <!-- spring mvc end -->
注意:
1.在developer-spring-mvc.xml中配置viewResolver時,<property name="prefix">中不要在以/developer/開頭,不然會出現“404 Problem accessing“問題:
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.xml,比較繁瑣,還降低了模塊隨意組合性,開始考慮思路是web.xml是否可以include其他xml文件,但是web.xml好像不允許include,所以可以使用WebApplicationInitializer來進行配置,注意只有配合 Servlet 3.0+才可以實現。關於WebApplicationInitializer的詳細介紹,網上有許多詳細介紹,主要原理是容器會自動掃面ServletContainerInitializer接口的實現類 ,然後調用onStartup方法,Spring為我們提供了一個實現類SpringServletContainerInitializer,而只要是WebApplicationInitializer的實現類就都可以被SpringServletContainerInitializer自動識別處理,想詳細了解可以查看這幾個類的源代碼。
例子:
將上面web.xml中的SpringMVC配置在代碼中進行,就變成了如下:
/** * @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 配置 XmlWebApplicationContext appContext = new XmlWebApplicationContext(); appContext.setConfigLocation("classpath*:/spring-mvc.xml"); 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中配置隨意引用