Spring MVC(6):静态资源处理

Spring MVC 静态资源处理


早期的 Spring MVC 不能很好地处理静态资源(静态html,js,css,图片,视频等资源),所以在 web.xml 中配置 DispatcherServlet 的请求映射时,往往采用 *.do、*.xhtml 的方式来匹配非静态请求,这样无法采用真正 REST 风格的 URL,因此后来的 Spring MVC 提供了以下2种方式用于处理静态资源:

首先要先 web.xml 中  DispatcherServlet 的 url-pattern 调整为 /,如下:
 
    <servlet>
        <servlet-name>assad</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>assad</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>


采用<mvc:default-servlet-handler>

这种方式在 spring-mvc 配置文件中定义一个  <mvc:default-servlet-handler/> 后,会自动在 Spring MVC 上下文中定义一个 org.springframework.web.servlet.resource. DefaultServletHttpRequestHandler 对象,对进入 DispatcherServlet 的 URL 进行筛选:
  • 如果是静态资源,则请求转由 Web 应用服务器默认的 Servlet 处理;
  • 如果不是静态资源,则由 DispatcherServlet 处理;

一般 Web 服务器(Tomcat、Jetty、Glassfish、JBoss、Resin、WebLogic、WebSphere)默认 Servlet 名称为 ”default“ ,DefaultServletHttpRequestHandler 可以自动找到它,如果默认servlet名称非default,可以通过以下显示指定:
 
 <mvc:default-servlet-handler default-servlet-name="MyServerDefaultServletName" />

基本过程如下:
spring-mvc 配置文件添加如下:
 
 <mvc:default-servlet-handler/>
静态资源如下:
 
webapp
 ├ resource_public
 |      ├ images
 |      |  └ testImg.jpg ...
 |      └ js
 |          └ testjs.js ...
 |
 └  WEB-INF 
在 jsp 中访问静态资源
 
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>静态资源测试页</title>
    <script src="<c:url value="/resources_public/js/testjs.js" />" type="text/javascript"></script>
</head>
<body>
<img src="<c:url value="/resources_public/images/testImg.jpg" />" /><br/>
<button onclick="test()">Action</button>
</body>
</html>


采用<mvc:resources>

采用<mvc:resources>可以直接由 Spring MVC 框架自己处理静态资源,并添加上一些有用的信息;

spring-mvc 配置文件添加如下:
 
 <!--静态资源映射,将逻辑路径"/resources/"映射到物理路径"/resources_public/"客户端静态资源缓存时间为1年-->
  <mvc:resources mapping="/resources/**"  location="/resources_public/" cache-period="31536000"/>
在 jsp 中访问静态资源(静态资源列表如上)
 
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>静态资源测试页</title>
    <script src="<c:url value="/resources/js/testjs.js" />" type="text/javascript"></script>
</head>
<body>
<img src="<c:url value="/resources/images/testImg.jpg" />" /><br/>
<button onclick="test()">Action</button>
</body>
</html>

使用第二种方式一个是可以隐藏真实的静态资源物理路径,有利于防止安全资源泄露,同时可以设定静态资源在客户端的行为,如在客户端的缓存时间等;





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值