springmvc解决静态资源无法访问的两种方法

这个可以说是很多初学Springmvc的人都会碰到一个令人头痛的问题 那就是为什么我配置好web.xml中的dispatchservlet后,js,css,甚至gif都不能正常显示了 比如我们要在 index.jsp 中引用 resource (你也可以把静态文件放在 WEB-INF 里)文件夹下的 静态文件,但是正常情况我们是无法访问的。 下面是解决方法。  

方法一、开放指定类型文件访问(推荐)

1、web.xml
  1. <!-- 核心控制器 -->
  2. <servlet>
  3.   <servlet-name>forestblog</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/springmvc.xml</param-value>
  8.   </init-param>
  9. </servlet>
  10. <servlet-mapping>
  11.   <servlet-name>forestblog</servlet-name>
  12.   <url-pattern>/</url-pattern>  
  13. </servlet-mapping>
2、这里稍微补充一下这个 url-pattern
  1. url-pattern有5种配置模式:
  2. 1)/xxx:完全匹配/xxx的路径
  3. 2)/xxx/*:匹配以/xxx开头的路径,请求中必须包含xxx。
  4. 3)/*:匹配/下的所有路径,请求可以进入到action或controller,但是转发jsp时再次被拦截,不能访问jsp界面。
  5. 4).xx:匹配以xx结尾的路径,所有请求必须以.xx结尾,但不会影响访问静态文件。
  6. 5)/:默认模式,未被匹配的路径都将映射到刺servlet,对jpg,js,css等静态文件也将被拦截,不能访问。
3、然后再在 web.xml 里添加以下代码 要写在DispatcherServlet的前面, 让 defaultServlet先拦截请求,这样请求就不会进入spring了,我想性能是最好的吧。
  1. <!-- static resources -->
  2. <servlet-mapping>
  3.   <servlet-name>default</servlet-name>
  4.   <url-pattern>*.css</url-pattern>
  5.   <url-pattern>*.js</url-pattern>
  6.   <url-pattern>*.gif</url-pattern>
  7.   <url-pattern>*.jpg</url-pattern>
  8.   <url-pattern>*.jpeg</url-pattern>
  9.   <url-pattern>*.png</url-pattern>
  10.   <url-pattern>*.ico</url-pattern>
  11.   <url-pattern>*.zip</url-pattern>
  12.   <url-pattern>*.rar</url-pattern>
  13. </servlet-mapping>
4、根据我们的需求,index.jsp 里引用路径可以这样写啦
  1.  <script src="resource/assets/js/script.js"></script>
  2. <link rel="stylesheet" href="resource/assets/css/style.css">
  3. <img src="resource/uploads/${user.avatar}" alt="">
   

方法二、配置静态资源映射

这个方法也挺好的,甚至可以配合使用。 1、同方法一的第一步,web.xml 要添加如下代码
  1. <!-- 核心控制器 -->
  2. <servlet>
  3.   <servlet-name>forestblog</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/springmvc.xml</param-value>
  8.   </init-param>
  9. </servlet>
  10. <servlet-mapping>
  11.   <servlet-name>forestblog</servlet-name>
  12.   <url-pattern>/</url-pattern>  
  13. </servlet-mapping>
  2、在 springmvc 配置文件里添加如下代码
  1. <!-- 静态资源映射 -->
  2. <mvc:resources mapping="/css/**" location="/resource/assets/css/"></mvc:resources>
  3. <mvc:resources mapping="/js/**" location="/resource/assets/js/"></mvc:resources>
  4. <mvc:resources mapping="/img/**" location="/resource/assets/img/"></mvc:resources>
  5. <mvc:resources mapping="/uploads/**" location="/resource/uploads/"></mvc:resources>
这里的 /** 表示目录下所有文件包括子文件夹 3、然后index.jsp 里引用今天资源可以这样写
  1.  <script src="js/script.js"></script>
  2.  <link rel="stylesheet" href="css/style.css">
  3. <img src="uploads/${user.avatar}" alt="" >
  这个方法好像有的小问题,不太稳定     这里还是用第一种方法吧     本文链接:https://liuyanzhao.com/6050.html  

发表评论

目前评论:1