servlet mapping 中URL pattern

在controller裏面返回 ModelAndView 遇到No mapping found for HTTP request with URI [/WEB-INF/xx.jsp] in Dispatcher的問題,/WEB-INF/xx.jsp被當成request送給 DispatcherServlet所以會有報錯notfound

問題在於<url-pattern>/</url-pattern> 和<url-pattern>/*</url-pattern>  的區別。

<url-pattern>/</url-pattern> only matches the URL host/servlet <url-pattern>/*</url-pattern> matches everything under host/servlet, such as /index.html, /foo.jpg and, most importantly in this case, /WEB-INF/pages/apiForm.jsp the * is the wildcard, which says "anything" In the earlier suggestion, *.do matches anything that ends in .do, for example, /foo.do, /foo/bar.do. It doesn't match anything ending in jsp, so a request for /WEB-INF/pages/apiFrom.jsp is not matched, and is not routed to the DispatcherServlet


但是問題又來了。.css .jpg等也會被攔截 導致圖片 風格不能顯示

解決方法是

  1. <servlet-mapping>   
  2.     <servlet-name>default</servlet-name>  
  3.     <url-pattern>*.jpg</url-pattern>     
  4. </servlet-mapping>    
  5. <servlet-mapping>       
  6.     <servlet-name>default</servlet-name>    
  7.     <url-pattern>*.js</url-pattern>    
  8. </servlet-mapping>    
  9. <servlet-mapping>        
  10.     <servlet-name>default</servlet-name>       
  11.     <url-pattern>*.css</url-pattern>      
  12. </servlet-mapping> 
激活default sevlet來處理靜態文件,

Tomcat, Jetty, JBoss, and GlassFish 自帶的默認Servlet的名字 -- "default"
Google App Engine
自帶的默認Servlet的名字 -- "_ah_default"
Resin
自帶的默認Servlet的名字 -- "resin-file"
WebLogic
自帶的 默認Servlet的名字  -- "FileServlet"
WebSphere 
自帶的默認Servlet的名字 -- "SimpleFileServlet" 

這種方法對不同的服務器要改defaultservlet 的名稱 個人覺得不是很適用 更好的方法是指定靜態資源位置

在mvc-dispatcher-servlet.xml中

<mvc:resources mapping="/images/**" location="/images/" /> 
<mvc:annotation-driven />



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