18/1/14
在SpringMVC中常用的就是Controller与View。但是我们常常会需要访问静态资源,如html,js,css,image等。
一、困难
默认的访问的URL都会被DispatcherServlet所拦截,但是我们希望静态资源可以直接访问。该肿么办呢?
【1】web.xml
<!-- 配置 DispatcherServlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--容器启动时就被加载了 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
静态资源访问,其实方法有多种,如:通过开放tomcat的defaultServlet,修改默认的url-parttern。
但是SpringMVC提供了更为便捷的方式处理静态资源。解决方案:直接在 springmvc-servlet.xml 中添加资源映射。
二、解决方法
【2】在配置文件 springmvc-servlet.xml 添加以下内容:
<!-- 配置静态资源访问 -->
<mvc:resources location="/static/" mapping="/static/**"/>
2.1 mapping:映射;
2.2 location:本地资源路径,注意必须是webapp根目录下的路径;
2.3 两个‘ * ’,它表示映射resources/下所有的URL,包括子路径(即接多个/);
eg:
http://localhost:8090/firstapp/images/cookie.png
http://localhost:8090/firstapp/js/jquery-1.11.2.js
【3】注意将静态文件夹放置在 Web-app 的子路径下,这样默认能够检测得到。
三、陷阱小结
这里对访问的形式进行一个勘误,因为本人的这篇博客《SpringMVC(13):使用springmvc优化订单管理系统的示例(登陆和注销的简单实现)》 就出现了访问失效的bug(原因是我的资源路径写错了 o(╥﹏╥)o),然后我在这边作个声明:
3.1 使用超链接访问有两个写法:
<a href="${pageContext.request.contextPath}/statics/image/Eclipse.JPG">picture.</a>
和
<a href="http://localhost:80/springmvc5/statics/image/html.JPG">picture2.</a>
3.2 使用<img>标签:
<img src="${pageContext.request.contextPath}/statics/image/Eclipse.JPG" alt="上海鲜花港 - 郁金香" />
参考博文:《SpringMVC访问静态资源》(https://www.cnblogs.com/yank/p/4477204.html)