為什么80%的碼農都做不了架構師?>>> ??
web.xml文件中
springmvc中的url-patter 一般寫/而不是 ? ?/*
java struts框架。spring-mvc.xml文件中?? <mvc:default-servlet-handler/>
假如springmvc項目中的web.xml文件中的url-pattern 的值寫/*,那返回的jsp頁面是文本格式,而不是jsp頁面,個人理解是(相當于進行第二次過濾)
web.xml文件中
strut2中的url-pattern一般寫/*
ssh mvc、
url-pattern問題?
spring用到forward(“/WEB-INF/jsp/*.jsp”)?
而forward當然是又要經過web.xml的映射的,?
然后,在URL匹配時,?<url-pattern> / </url-pattern>
?不會匹配到*.jsp,不會進入spring的DispatcherServlet類?<url-pattern> /* </url-pattern>
?會匹配*.jsp,導致進入spring的DispatcherServlet 類,然后去尋找controller,接著找不到對應的controller所以報錯。
總之,關于web.xml的url映射的小知識:?<url-pattern>/</url-pattern>
?會匹配到/login這樣的路徑型url,不會匹配到模式為*.jsp這樣的后綴型url?<url-pattern>/*</url-pattern>
?會匹配所有url:路徑型的和后綴型的url(包括/login,.jsp,.js和*.html等)
<url-pattern>/</url-pattern>
甚至會造成The requested resource () is not available.
以上內容轉載自:http://www.cnblogs.com/Mr-Nobody/p/3642018.html?
=============================分割線:對轉載文章的補充===========================?<url-pattern> /* </url-pattern>
?會匹配*.jsp,導致進入spring的DispatcherServlet 類,然后去尋找controller,接著找不到對應的controller所以報錯。
jdbc java?這句話值得應該是請求返回到瀏覽器,頁面顯示的是jsp源碼,這樣才能與題相對應。
那么為什么匹配*.jsp,導致進入spring的DispatcherServlet 類頁面就顯示jsp源碼了?原因如下:?
一般情況,在spring-mvc.xml配置文件中,都會添加如下代碼來處理對靜態資源的訪問:
<!-- 對訪問靜態資源請求的處理方式有兩種: 選擇任意一種配置都可以--><!-- 方式一:對靜態資源文件的訪問,避免controller攔截 --><mvc:default-servlet-handler /><!-- 方式二: 配置指定的靜態資源地址以及攔截的請求,static資源文件與WEB-INF同級--><mvc:resources mapping="/static/**" location="/static/" cache-period="31536000"/><!-- 此部分與題無關,作為了解內容多個HandlerMapping的執行順序問題:DefaultAnnotationHandlerMapping的order屬性值是:0<mvc:resources/ >自動注冊的 SimpleUrlHandlerMapping的order屬性值是: 2147483646<mvc:default-servlet-handler/>自動注冊 的SimpleUrlHandlerMapping 的order屬性值是: 2147483647spring會先執行order值比較小的。當訪問一個a.jpg圖片文件時,先通過 DefaultAnnotationHandlerMapping 來找處理器,一定是找不到的,我們沒有叫a.jpg的Action。再按order值升序找,由于最后一個 SimpleUrlHandlerMapping 是匹 "/**"的,所以一定會匹配上,再響應圖片。-->
?
上述配置導致了一個的結果就是把.jsp,.sql,*.txt都當做txt處理。結果就是直接在瀏覽器加載了jsp源碼。
當然,如果不配置上述對靜態資源處理的代碼,那么結果是找不到對應的controller所以報錯,404錯誤。實際上靜態資源的處理配置肯定是要加的。
Spring mvc,后臺日志也給出了上述顯示jsp源碼的經過:
//顯示Forward跳轉
Forwarding to resource [/WEB-INF/jsp/list.jsp] in InternalResourceView 'list'
//然后被DispatcherServlet攔截
DispatcherServlet with name 'springServlet' processing GET request for [/seckill/WEB-INF/jsp/list.jsp]
//然后為/WEB-INF/jsp/list.jsp請求尋找處理方法
Looking up handler method for path /WEB-INF/jsp/list.jsp
//結果當然是沒有找到了
Did not find handler method for [/WEB-INF/jsp/list.jsp]
Matching patterns for request [/WEB-INF/jsp/list.jsp] are [/**]
URI Template variables for request [/WEB-INF/jsp/list.jsp] are {}
Mapping [/WEB-INF/jsp/list.jsp] to HandlerExecutionChain with handler [org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler@5fce904c] and 1 interceptor
Last-Modified value for [/seckill/WEB-INF/jsp/list.jsp] is: -1
//一個空的ModelAndView返回給了DispatcherServlet,并認為請求已完成
Null ModelAndView returned to DispatcherServlet with name 'springServlet': assuming HandlerAdapter completed request handling
Successfully completed request
?
如果我就不想用<url-pattern>/</url-pattern>
,想用某個固定的后綴,比如<url-pattern>*.do</url-pattern>
,那么controller的@RequestMapping(value = "/xxx.do")
這樣的,地址欄請求是這樣的:http://localhost:8080/xxx.do