springmvc 訪問到靜態的文件,如jpg,js,css

方案一:激活Tomcat的defaultServlet來處理靜態文件css

 

  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>      
  13. 要配置多個,每種文件配置一個  

 

要寫在DispatcherServlet的前面, 讓 defaultServlet先攔截,這個就不會進入Spring了 web

 

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


方案二: 在spring3.0.4之後版本提供了mvc:resources 
mvc:resources 的使用方法:mvc

 

  1. <!-- 對靜態資源文件的訪問 -->      
  2. <mvc:resources mapping="/images/**" location="/images/" />    

 

 

  1. <span style="font-weight: normal;">mapping<span style="font-family: Arial; line-height: 1.5em; ">映射到ResourceHttpRequestHandler進行處理  
  2. location指定靜態資源的位置.能夠是web application根目錄下、jar包裏面,這樣能夠把靜態資源壓縮到jar包中  
  3. cache-period 能夠使得靜態資源進行web cache </span></span>  


若是出現下面的錯誤,多是沒有配置<mvc:annotation-driven />的緣由。 
報錯WARNING: No mapping found for HTTP request with URI [/mvc/user/findUser/lisi/770] in DispatcherServlet with name 'springMVC'app

 

 

使用<mvc:resources/>元素,把mapping的URI註冊到SimpleUrlHandlerMapping的urlMap中,key爲mapping的URI pattern值,而value爲ResourceHttpRequestHandler,這樣就巧妙的把對靜態資源的訪問由HandlerMapping轉到ResourceHttpRequestHandler處理並返回,因此就支持classpath目錄,jar包內靜態資源的訪問.另外須要注意的一點是,不要對SimpleUrlHandlerMapping設置defaultHandler.由於對static uri的defaultHandler就是ResourceHttpRequestHandler,不然沒法處理static resources request.url


方案三 ,使用<mvc:default-servlet-handler/>spa

 

  1. <mvc:default-servlet-handler/>  

 

會把"/**" url,註冊到SimpleUrlHandlerMapping的urlMap中,把對靜態資源的訪問由HandlerMapping轉到org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler處理並返回.DefaultServletHttpRequestHandler使用就是各個Servlet容器本身的默認Servlet..net

 

補充說明:多個HandlerMapping的執行順序問題:orm

DefaultAnnotationHandlerMapping的order屬性值是:0
<mvc:resources/ >自動註冊的 SimpleUrlHandlerMapping的order屬性值是: 2147483646xml

<mvc:default-servlet-handler/>自動註冊 的SimpleUrlHandlerMapping 的order屬性值是: 2147483647

spring會先執行order值比較小的。當訪問一個a.jpg圖片文件時,先經過 DefaultAnnotationHandlerMapping 來找處理器,必定是找不到的,咱們沒有叫a.jpg的Action。再按order值升序找,因爲最後一個 SimpleUrlHandlerMapping 是匹 "/**"的,因此必定會匹配上,再響應圖片。



 請求如何映射到具體的Action中的方法

方案一:基於xml配置映射,能夠利用SimpleUrlHandlerMapping、BeanNameUrlHandlerMapping進行Url映射和攔截請求。
 
方案二:基於註解映射,能夠使用DefaultAnnotationHandlerMapping。

 

  1. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">  </bean>     
  2. 簡寫  
  3. <span style="font-family: Arial; line-height: 24px; text-align: left; "><span style="font-size:10px;"><mvc:annotation-driven /></span></span>  

 並在action類上使用:
@Controller @RequestMapping("/user")

相關文章
相關標籤/搜索