程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> SpringMVC 配置多個dispatcher 及WebApplicationInitializer的使用,springmvcdispatcher

SpringMVC 配置多個dispatcher 及WebApplicationInitializer的使用,springmvcdispatcher

編輯:JAVA綜合教程

SpringMVC 配置多個dispatcher 及WebApplicationInitializer的使用,springmvcdispatcher


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.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中配置隨意引用

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved