`
sb33060418
  • 浏览: 152482 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]SpringMVC访问静态资源

阅读更多
本文转自
http://www.cnblogs.com/fangqi/archive/2012/10/28/2743108.html
http://www.cnblogs.com/luxh/archive/2013/03/14/2959207.html

SpringMVC访问静态资源可能会存在找不到资源的问题。
1、如果只配置拦截类似于*.do格式的url,则对静态资源的访问是没有问题的,如下:
<!-- SpringMVC核心分发器 -->
    <servlet> 
        <servlet-name>dispatcherServlet</servlet-name> 
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
        <init-param> 
            <param-name>contextConfigLocation</param-name> 
            <param-value>classpath*:config/dispatcher-servlet.xml</param-value> 
        </init-param> 
        <load-on-startup>1</load-on-startup> 
    </servlet> 
    <!-- 映射*.do的请求 -->
    <servlet-mapping> 
        <servlet-name>dispatcherServlet</servlet-name> 
        <url-pattern>*.do</url-pattern> 
    </servlet-mapping> 

  2、如果配置拦截了所有的请求,如下:
<!-- SpringMVC核心分发器 -->
    <servlet> 
        <servlet-name>dispatcherServlet</servlet-name> 
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
        <init-param> 
            <param-name>contextConfigLocation</param-name> 
            <param-value>classpath*:config/dispatcher-servlet.xml</param-value> 
        </init-param> 
        <load-on-startup>1</load-on-startup> 
    </servlet> 
    <!-- 映射所有的请求 -->
    <servlet-mapping> 
        <servlet-name>dispatcherServlet</servlet-name> 
        <url-pattern>/</url-pattern> 
    </servlet-mapping> 

通过上面url-pattern的配置,所有URL请求都将被Spring MVC的DispatcherServlet截获。这样的配置,会造成js文件、css文件、图片文件等静态资源无法访问。

解决方法:
1.采用<mvc:default-servlet-handler />

在springMVC-servlet.xml中配置<mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:
<mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />

2.采用<mvc:resources />

<mvc:default-servlet-handler />将静态资源的处理经由Spring MVC框架交回Web应用服务器处理。而<mvc:resources />更进一步,由Spring MVC框架自己处理静态资源,并添加一些有用的附加值功能。

首先,<mvc:resources />允许静态资源放在任何地方,如WEB-INF目录下、类路径下等,你甚至可以将JavaScript等静态文件打到JAR包中。通过location属性指定静态资源的位置,由于location属性是Resources类型,因此可以使用诸如"classpath:"等的资源前缀指定资源位置。传统Web容器的静态资源只能放在Web容器的根路径下,<mvc:resources />完全打破了这个限制。

其次,<mvc:resources />依据当前著名的Page Speed、YSlow等浏览器优化原则对静态资源提供优化。你可以通过cacheSeconds属性指定静态资源在浏览器端的缓存时间,一般可将该时间设置为一年,以充分利用浏览器端的缓存。在输出静态资源时,会根据配置设置好响应报文头的Expires 和 Cache-Control值。

在接收到静态资源的获取请求时,会检查请求头的Last-Modified值,如果静态资源没有发生变化,则直接返回303相应状态码,提示客户端使用浏览器缓存的数据,而非将静态资源的内容输出到客户端,以充分节省带宽,提高程序性能。

在springMVC-servlet中添加如下配置:
<mvc:resources location="/,classpath:/META-INF/publicResources/" mapping="/resources/**"/>
以上配置将Web根路径"/"及类路径下 /META-INF/publicResources/ 的目录映射为/resources路径。假设Web根路径下拥有images、js这两个资源目录,在images下面有bg.gif图片,在js下面有test.js文件,则可以通过 /resources/images/bg.gif 和 /resources/js/test.js 访问这二个静态资源。

假设WebRoot还拥有images/bg1.gif 及 js/test1.js,则也可以在网页中通过 /resources/images/bg1.gif 及 /resources/js/test1.js 进行引用。

也可以简单配置WEB-INF/spring-servlet.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xsi:schemaLocation="
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />
	<!-- spring mvc对静态资源的访问 -->
	<resources location="/image/" mapping="/image/**"/>	
	<resources location="/js/" mapping="/js/**"/>	
	<resources location="/style/" mapping="/style/**"/>	
</beans:beans>
分享到:
评论
1 楼 shiylqq 2014-09-16  
楼主写的不错,对我启发很大

相关推荐

    SpringMVC访问静态资源

    在本篇文章中,我们将深入探讨Spring MVC如何配置和管理静态资源的访问。 ### 1. 静态资源默认处理 Spring MVC默认会自动处理应用中的静态资源。在`DispatcherServlet`的配置中,有一个`...

    springmvc如何访问静态资源

    该txt文档主要讲了在利用springmvc框架来搭建项目时有什么方法可以访问静态资源。

    SpringMVC访问静态资源的方法

    本文将介绍如何在SpringMVC中配置访问静态资源。 首先,我们需要了解SpringMVC的默认配置。在`web.xml`文件中,`DispatcherServlet`通常被配置为监听所有URL模式(例如,`&lt;url-pattern&gt;/&lt;/url-pattern&gt;`),这意味...

    防止SpringMVC拦截器拦截js等静态资源文件的解决方法

    在本文中,我们讨论了三种解决SpringMVC拦截器拦截静态资源文件的方法,并对这些方法的优劣进行了分析。 方案一是在拦截器中排除静态资源路径。在SpringMVC的配置文件中(通常是spring-mvc.xml),可以通过配置元素...

    SpringMVC访问静态资源的三种方式小结

    本篇文章将总结Spring MVC访问静态资源的三种主要方式,帮助开发者更好地理解和配置项目。 ### 方案一:利用Tomcat的默认Servlet 在Spring MVC的`DispatcherServlet`拦截所有请求(例如`/`)的情况下,静态资源...

    springmvc静态资源访问

    ### Spring MVC 中静态资源访问详解 #### 一、引言 在Web开发中,静态资源如CSS、JavaScript、图片等是构建用户界面不可或缺的一部分。Spring MVC作为一款流行的Java Web框架,提供了灵活的方式来处理这些静态资源...

    SpringMvc静态资源访问实现方法代码实例

    SpringMvc静态资源访问实现方法代码实例介绍了如何在SpringMvc框架中访问静态资源的方法代码实例。该实例通过示例代码详细介绍了如何配置SpringMvc来访问静态资源,从而为开发者提供了一定的参考价值。 首先,我们...

    springmvc-demo03-静态资源访问处理.zip

    在Spring MVC框架中,静态资源处理是一个至关重要的部分,它涉及到网页应用中JavaScript、CSS、图片等非Java代码文件的访问。Spring MVC默认情况下,并不直接处理这些静态资源,而是交由Web服务器(如Tomcat)来处理...

    SSM笔记-SpringMVC的CRUD和静态资源

    SpringMVC默认不处理静态资源(如CSS、JavaScript、图片等),为了使这些资源正常访问,我们需要在`web.xml`或`DispatcherServlet`的配置中添加映射规则。 ```xml &lt;!-- web.xml --&gt; &lt;servlet-name&gt;dispatcher ...

    springMVC静态资源

    例如,我们可以创建一个拦截器来记录静态资源的访问日志: ```java @Component public class StaticResourceInterceptor implements HandlerInterceptor { @Override public boolean preHandle...

    springMVC3学习(四)--访问静态文件如js,jpg,css(源码)

    springMVC3学习(四)--访问静态文件如js,jpg,css(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25987411

    SpringMVC访问图片

    在Spring MVC框架中,访问图片是一项常见的需求,它涉及到静态资源的处理。Spring MVC作为一个强大的MVC框架,不仅能够处理动态请求,也能有效地管理和提供静态资源,如图片、CSS样式表和JavaScript文件等。本篇将...

    SpringMVC专栏8、RESTful案例static静态资源

    本节我们将深入探讨RESTful原则与`static`目录如何协同工作,以及如何在Spring MVC项目中有效地管理静态资源。 首先,RESTful是一种软件架构风格,它基于HTTP协议,通过URI(统一资源标识符)来定位资源,使用HTTP...

    SpringMVC使用的Swagger UI静态资源

    **Spring MVC 使用 Swagger UI 静态资源** Swagger 是一个强大的工具,专为 RESTful API 设计,它允许开发者通过 YAML 或 JSON 语言编写接口定义,进而生成清晰、交互式的文档,同时支持代码生成,方便客户端和...

    SpringMVC框架架构介绍

    三、访问静态资源: Spring MVC允许通过配置访问静态文件,如图片、JavaScript和CSS,这通常在web.xml或Spring配置文件中设置。 四、请求映射到Action方法: 使用@RequestMapping注解,可以将HTTP请求映射到特定的...

    详解SpringMVC中设置静态资源不被拦截的问题

    此外,还可以考虑使用Spring Security等安全框架,它们提供了更灵活的控制方式,可以针对静态资源设定特殊的访问规则,而无需在拦截器中处理。 总的来说,Spring MVC中处理静态资源不被拦截的关键在于正确配置静态...

    详解springmvc拦截器拦截静态资源

    为了确保静态资源能够正常访问,我们需要在 Spring MVC 的配置中明确指定它们的映射路径,如下所示: ```xml **" location="/static/resources" /&gt; **" location="/static/css/" /&gt; **" location="/static/images/...

    SpringMVC demo 完整源码实例下载

    `src`目录通常是源代码存放的地方,而`WebContent`则包含了Web应用的静态资源和部署相关的文件,如HTML、CSS、JavaScript以及Web应用的入口点`WEB-INF/web.xml`。 `build`目录则可能包含编译后的Java类文件、打包后...

    SpringMVC 入门小程序

    - `src/main/webapp`:Web应用目录,包含`WEB-INF`下的`web.xml`,以及静态资源(如HTML、CSS、JS)。 ### 5. 主要组件 - **DispatcherServlet**:前端控制器,接收所有请求,根据配置进行分发。 - **...

    SpringMVC如何在生产环境禁用Swagger的方法

    SpringMVC如何在生产环境禁用Swagger的方法 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,...

Global site tag (gtag.js) - Google Analytics