Spring MVC 教程,快速入門,深入分析——DispatcherServlet

四、DispatcherServlet說明

 

使用Spring MVC,配置DispatcherServlet是第一步。

DispatcherServlet是一個Servlet,所以可以配置多個DispatcherServlet。

DispatcherServlet是前置控制器,配置在web.xml文件中的。攔截匹配的請求,Servlet攔截匹配規則要自已定義,把攔截下來的請求,依據某某規則分發到目標Controller(我們寫的Action)來處理。

 

“某某規則”:是根據你使用了哪個HandlerMapping接口的實現類的不同而不同。

 

先來看第一個例子:

Xml代碼  收藏代碼

  1. <web-app>  

  2.     <servlet>  

  3.         <servlet-name>example</servlet-name>  

  4.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

  5.         <load-on-startup>1</load-on-startup>  

  6.     </servlet>  

  7.     <servlet-mapping>  

  8.         <servlet-name>example</servlet-name>  

  9.         <url-pattern>*.form</url-pattern>  

  10.     </servlet-mapping>  

  11. </web-app>  

 <load-on-startup>1</load-on-startup>是啓動順序,讓這個Servlet隨Servletp容器一起啓動。

 <url-pattern>*.form</url-pattern> 會攔截*.form結尾的請求。

 

 <servlet-name>example</servlet-name>這個Servlet的名字是example,可以有多個DispatcherServlet,是通過名字來區分的。每一個DispatcherServlet有自己的WebApplicationContext上下文對象。同時保存的ServletContext中和Request對象中,關於key,以後說明。

 

在DispatcherServlet的初始化過程中,框架會在web應用的 WEB-INF文件夾下尋找名爲[servlet-name]-servlet.xml 的配置文件,生成文件中定義的bean。

 

 

第二個例子:

Xml代碼  收藏代碼

  1. <servlet>  

  2.     <servlet-name>springMVC</servlet-name>  

  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

  4.     <init-param>  

  5.         <param-name>contextConfigLocation</param-name>  

  6.         <param-value>classpath*:/springMVC.xml</param-value>  

  7.     </init-param>  

  8.     <load-on-startup>1</load-on-startup>  

  9. </servlet>  

  10. <servlet-mapping>  

  11.     <servlet-name>springMVC</servlet-name>  

  12.     <url-pattern>/</url-pattern>  

  13. </servlet-mapping>  

指明瞭配置文件的文件名,不使用默認配置文件名,而使用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。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章