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

avatar 2017年08月25日10:05:41 1 5755 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此
这个可以说是很多初学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

  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0