web.xml中的dispatchservlet后,js,css,甚至gif都不能正常显示

Posted K____K

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web.xml中的dispatchservlet后,js,css,甚至gif都不能正常显示相关的知识,希望对你有一定的参考价值。

这个可以说是很多初学Springmvc的人都会碰到一个令人头痛的问题

那就是为什么我配置好web.xml中的dispatchservlet后,js,css,甚至gif都不能正常显示了

我们来看看我们配置的web.xml

 

[html] view plain copy
 
 print?
  1. <!-- 核心控制器 -->  
  2.     <servlet>  
  3.         <servlet-name>springmvc</servlet-name>  
  4.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  5.         <init-param>  
  6.             <param-name>contextConfigLocation</param-name>  
  7.             <param-value>/WEB-INF/applicationContext.xml</param-value>  
  8.         </init-param>  
  9.         <load-on-startup>1</load-on-startup>  
  10.     </servlet>  
  11.     <servlet-mapping>  
  12.         <servlet-name>springmvc</servlet-name>  
  13.         <url-pattern>/</url-pattern>  
  14.     </servlet-mapping>  


之前我是这样的,那么这个是什么意思呢?

 

这个就涉及到一个知识点了,就是url-pattern的/于*的区别了

这里我来引用一段别人的原话

 

[plain] view plain copy
 
 print?
  1. url-pattern有5种配置模式:  
  2.   
  3. (1)/xxx:完全匹配/xxx的路径  
  4.   
  5. (2)/xxx/*:匹配以/xxx开头的路径,请求中必须包含xxx。  
  6.   
  7. (3)/*:匹配/下的所有路径,请求可以进入到action或controller,但是转发jsp时再次被拦截,不能访问jsp界面。  
  8.   
  9. (4).xx:匹配以xx结尾的路径,所有请求必须以.xx结尾,但不会影响访问静态文件。  
  10.   
  11. (5)/:默认模式,未被匹配的路径都将映射到刺servlet,对jpg,js,css等静态文件也将被拦截,不能访问。  


因此,如果我们一开始就采用了/的方式,那么就需要补上如下的web.xml配置来让静态文件可访问了

 

 

[html] view plain copy
 
 print?
  1. <!-- static resources -->  
  2.     <servlet-mapping>  
  3.         <servlet-name>default</servlet-name>  
  4.         <url-pattern>*.css</url-pattern>  
  5.     </servlet-mapping>  
  6.   
  7.     <servlet-mapping>  
  8.         <servlet-name>default</servlet-name>  
  9.         <url-pattern>*.gif</url-pattern>  
  10.   
  11.     </servlet-mapping>  
  12.   
  13.     <servlet-mapping>  
  14.         <servlet-name>default</servlet-name>  
  15.         <url-pattern>*.jpg</url-pattern>  
  16.     </servlet-mapping>  
  17.   
  18.     <servlet-mapping>  
  19.         <servlet-name>default</servlet-name>  
  20.         <url-pattern>*.js</url-pattern>  
  21.     </servlet-mapping>  


但是其实简单的做法就是,我们并不需要这么复杂,其实就是把所有需要springmvc dispatchservlet的地方,设置成.do就可以了,这样静态文件还是可以继续访问的。

 

否则我们要设置需要servlet-mapping的defaultServlet了。

最后再介绍一种方法,这个是网上看来的,我没有尝试过,先贴出来

 

[html] view plain copy
 
 print?
    1. <!-- 静态资源访问  
    2.  <mvc:resources location="/img/" mapping="/img/**"/>   
    3.  <mvc:resources location="/js/" mapping="/js/**"/>    
    4.  <mvc:resources location="/css/" mapping="/css/**"/>  
    5. -->  



以上是关于web.xml中的dispatchservlet后,js,css,甚至gif都不能正常显示的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC核心类和注解

springMvc

springMVC工作过程

springMVC 下访问静态资源

springMVC学习笔记手写springmvc

springMVC学习笔记DispatchServlet与九大组件