springmvc.xml 中 url-pattern/url-pattern节点详解
1. ?先來上段常見的代碼
1 <!-- MVC Servlet --> 2 <servlet> 3 <servlet-name>springServlet</servlet-name> 4 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 5 <init-param> 6 <param-name>contextConfigLocation</param-name> 7 <param-value>classpath*:/spring-mvc*.xml</param-value> 8 </init-param> 9 <load-on-startup>1</load-on-startup> 10 </servlet> 11 <servlet-mapping> 12 <servlet-name>springServlet</servlet-name> 13 <url-pattern>/</url-pattern> 14 </servlet-mapping> 15 16 <filter> 17 <filter-name>encodingFilter</filter-name> 18 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 19 <init-param> 20 <param-name>encoding</param-name> 21 <param-value>UTF-8</param-value> 22 </init-param> 23 <init-param> 24 <param-name>forceEncoding</param-name> 25 <param-value>true</param-value> 26 </init-param> 27 </filter> 28 <filter-mapping> 29 <filter-name>encodingFilter</filter-name> 30 <url-pattern>/*</url-pattern> 31 </filter-mapping>正所謂mvc配置千篇一律,不過這個(gè)<url-pattern>/</url-pattern> 跟 <url-pattern>/*</url-pattern> 概念還是有點(diǎn)模糊。
?
2. ?兩者的解釋
2.1 ?<url-pattern>/</url-pattern>
會(huì)匹配到/login這樣的路徑型的url,不會(huì)匹配到模式為*.jsp這樣的后綴型url,言外之意就是不攔截jsp文件。
故經(jīng)過視圖解析器后返回jsp視圖時(shí)不會(huì)再進(jìn)入DispatcherServlet。
說到為什么JSP頁(yè)面的請(qǐng)求并不會(huì)命中這個(gè)Servlet,那是因?yàn)閟ervlet容器內(nèi)建的JSP Servlet將會(huì)被調(diào)用,而這個(gè)容器內(nèi)建的JSP Servlet已經(jīng)默認(rèn)地映射在了*.jsp上。但還是能攔截到靜態(tài)資源,如*.js,*.css。
?
2.2 ?<url-pattern>/*</url-pattern>
會(huì)匹配所有的url:路徑型的和后綴型的url(包括/login,*.jsp,*.js和*.html等)。
故經(jīng)過視圖解析器后返回jsp視圖時(shí)會(huì)再進(jìn)入DispatcherServlet,導(dǎo)致找不到對(duì)應(yīng)的controller所以報(bào)404錯(cuò)。
No mapping found for HTTP request with URI [/Shiro-Spring/WEB-INF/jsp/login.jsp] in DispatcherServlet with name ‘springmvc’?
3. ?/和/*的區(qū)別總結(jié)
先說一種問題,假設(shè)你方法請(qǐng)求后想返回index.jsp界面:return "index";
如果配置成< url-pattern > /* </ url-pattern >這樣,即使你配置了如下這些同樣會(huì)報(bào)錯(cuò)。
<!-- 配置視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 前綴 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后綴 --><property name="suffix" value=".jsp" /> </bean>錯(cuò)誤提示:
org.springframework.web.servlet.DispatcherServlet noHandlerFound警告: No mapping found for HTTP request with URI [/myspring/WEB-INF/jsp/index.jsp] in DispatcherServlet with name ‘spring’ 錯(cuò)誤,
也就是找不到 index.jsp
通過這種錯(cuò)誤配置再來看一下兩者區(qū)別吧:
< url-pattern > / </ url-pattern > 不會(huì)匹配到*.jsp,即:*.jsp不會(huì)進(jìn)入spring的 DispatcherServlet類 。
< url-pattern > /* </ url-pattern > 會(huì)匹配*.jsp,會(huì)出現(xiàn)返回jsp視圖時(shí)再次進(jìn)入spring的DispatcherServlet 類,重復(fù)的去分配到方法里面,最終導(dǎo)致找不到對(duì)應(yīng)的controller所以報(bào)404錯(cuò)。
?
總之,關(guān)于web.xml的url映射的小知識(shí):
< url-pattern>/</url-pattern> 會(huì)匹配到/login這樣的路徑型url,不會(huì)匹配到模式為*.jsp這樣的后綴型url
< url-pattern>/*</url-pattern> 會(huì)匹配所有url:路徑型的和后綴型的url(包括/login,*.jsp,*.js和*.html等)
轉(zhuǎn)載于:https://www.cnblogs.com/niceyoo/p/8764584.html
總結(jié)
以上是生活随笔為你收集整理的springmvc.xml 中 url-pattern/url-pattern节点详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android adb命令,linux中
- 下一篇: C/C++练习题(一)