Spring MVC之DispatcherServlet_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Spring MVC之DispatcherServlet
使用Spring MVC,配置DispatcherServlet是第一步。
DispatcherServlet是一個(gè)Servlet,所以可以配置多個(gè)DispatcherServlet。
DispatcherServlet是前置控制器,配置在web.xml文件中的。攔截匹配的請(qǐng)求,Servlet攔截匹配規(guī)則要自已定義,把攔截下來(lái)的請(qǐng)求,依據(jù)某某規(guī)則分發(fā)到目標(biāo)Controller(我們寫(xiě)的Action)來(lái)處理。
“某某規(guī)則”:是根據(jù)你使用了哪個(gè)HandlerMapping接口的實(shí)現(xiàn)類的不同而不同。
先來(lái)看第一個(gè)例子:
<web-app> <servlet> <servlet-name>example</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>example</servlet-name> <url-pattern>*.form</url-pattern> </servlet-mapping> </web-app>
<load-on-startup>1</load-on-startup>是啟動(dòng)順序,讓這個(gè)Servlet隨Servletp容器一起啟動(dòng)。
<url-pattern>*.form</url-pattern> 會(huì)攔截*.form結(jié)尾的請(qǐng)求。
<servlet-name>example</servlet-name>這個(gè)Servlet的名字是example,可以有多個(gè)DispatcherServlet,是通過(guò)名字來(lái)區(qū)分的。每一個(gè)DispatcherServlet有自己的WebApplicationContext上下文對(duì)象。同時(shí)保存的ServletContext中和Request對(duì)象中,關(guān)于key,以后說(shuō)明。
在DispatcherServlet的初始化過(guò)程中,框架會(huì)在web應(yīng)用的 WEB-INF文件夾下尋找名為[servlet-name]-servlet.xml 的配置文件,生成文件中定義的bean。
第二個(gè)例子:
<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>
指明了配置文件的文件名,不使用默認(rèn)配置文件名,而使用springMVC.xml配置文件。
其中<param-value>**.xml</param-value> 這里可以使用多種寫(xiě)法
1、不寫(xiě),使用默認(rèn)值:/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、多個(gè)值用逗號(hào)分隔
Servlet攔截匹配規(guī)則可以自已定義,攔截哪種URL合適?
當(dāng)映射為@RequestMapping("/user/add")時(shí),為例:
1、攔截*.do、*.htm, 例如:/user/add.do
這是最傳統(tǒng)的方式,最簡(jiǎn)單也最實(shí)用。不會(huì)導(dǎo)致靜態(tài)文件(jpg,js,css)被攔截。
2、攔截/,例如:/user/add
可以實(shí)現(xiàn)現(xiàn)在很流行的REST風(fēng)格。很多互聯(lián)網(wǎng)類型的應(yīng)用很喜歡這種風(fēng)格的URL。
弊端:會(huì)導(dǎo)致靜態(tài)文件(jpg,js,css)被攔截后不能正常顯示。想實(shí)現(xiàn)REST風(fēng)格,事情就是麻煩一些。后面有解決辦法還算簡(jiǎn)單。
3、攔截/*,這是一個(gè)錯(cuò)誤的方式,請(qǐng)求可以走到Action中,但轉(zhuǎn)到j(luò)sp時(shí)再次被攔截,不能訪問(wèn)到j(luò)sp。
相關(guān)文章
Java 創(chuàng)建cookie和刪除cookie
java下創(chuàng)建cookie的代碼,包括了創(chuàng)建跟刪除。2009-04-04關(guān)于JSP的一點(diǎn)疑問(wèn)小結(jié)
我在做一個(gè)JSP小測(cè)試.寫(xiě)的一些代碼如下2009-02-02