SpringMVC DispatcherServlet 說明與web配置

jopen 11年前發布 | 65K 次閱讀 SpringMVC Spring MVC Web框架
使用Spring MVC,配置DispatcherServlet是第一步。
DispatcherServlet是一個Servlet,所以可以配置多個DispatcherServlet。
DispatcherServlet是前置控制器,配置在web.xml文件中的。攔截匹配的請求,Servlet攔截匹配規則要自已定義,把攔截下來的請求,依據某某規則分發到目標Controller(我們寫的Action)來處理。
HandlerMapping接口的實現類的不同而不同。
第一個例子
    <?xml version="1.0" encoding="UTF-8"?>  
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
        id="WebApp_ID" version="2.5">  

        <servlet>  
        <!-- Servlet的名字是 springmvc,可以有多個DispatcherServlet,是通過名字來區分的。每一個DispatcherServlet有自己的  
            WebApplicationContext上下文對象。同時保存的ServletContext中和Request對象中,關于key,以后說明。 在DispatcherServlet的初始化過程中,框架會在web應用的  
            WEB-INF文件夾下尋找名為[servlet-name]-servlet.xml 的配置文件,生成文件中定義的bean。 -->  
            <servlet-name>springmvc</servlet-name>  
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
            <!-- 啟動順序,讓這個Servlet隨容器一起啟動 -->  
            <load-on-startup>1</load-on-startup>  
        </servlet>  

        <servlet-mapping>  
            <servlet-name>springmvc</servlet-name>  
            <!-- 注意不要使用/* -->  
            <!-- 會攔截* 結尾請求 -->  
            <url-pattern>*.do</url-pattern>  
        </servlet-mapping>  
    </web-app>  

第二種示例

    <?xml version="1.0" encoding="UTF-8"?>  
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
        id="WebApp_ID" version="2.5">  
        <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*:/springMVC.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>  
    </web-app>  

指明了配置文件的文件名,不使用默認配置文件名,而使用springMVC.xml配置文件。
其中<param-value>**.xml</param-value> 這里可以使用多種寫法 
 1、不寫,使用默認值:/WEB-INF/<servlet-name>-servlet.xml 
 2、<param-value>/WEB-INF/classes/springMVC.xml</param-value> 
 3、<param-value>classpath*:springMVC-mvc.xml</param-value> 
 4、多個值用逗號分隔
Servlet攔截匹配規則可以自已定義,攔截哪種URL合適? 
 
當映射為@RequestMapping("/user/add")時,為例:
1、攔截*.do、*.htm, 
例如:/user/add.do
這是最傳統的方式,最簡單也最實用。不會導致靜態文件(jpg,js,css)被攔截。
2、攔截/,例如:/user/add
可以實現現在很流行的REST風格。很多互聯網類型的應用很喜歡這種風格的URL。
弊端:會導致靜態文件(jpg,js,css)被攔截后不能正常顯示。想實現REST風格,事情就是麻煩一些。后面有解決辦法還算簡單。
3、攔截/*,這是一個錯誤的方式,請求可以走到Action中,但轉到jsp時再次被攔截,不能訪問到jsp。
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!