`

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

阅读更多


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



如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了。

 目的:可以正常访问静态文件,不要找不到静态文件报404。
 
方案一:激活Tomcat的defaultServlet来处理静态文件

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping> 

要配置多个,每种文件配置一个  

要写在DispatcherServlet的前面, 让defaultServlet先拦截,这个就不会进入Spring了,我想性能是最好的吧。

Tomcat, Jetty, JBoss, and GlassFish  默认 Servlet的名字 -- "default"
Google App Engine 默认 Servlet的名字 -- "_ah_default"
Resin 默认 Servlet的名字 -- "resin-file"
WebLogic 默认 Servlet的名字  -- "FileServlet"
WebSphere  默认 Servlet的名字 -- "SimpleFileServlet"

方案二: 在spring3.0.4以后版本提供了mvc:resources

<mvc:resources 的使用方法:

<!--对静态资源文件的访问-->
<mvc:resources mapping="/images/**" location="/images/" />

  /images /**映射到 ResourceHttpRequestHandler 进行处理,location指定静态资源的位置.可以是web application根目录下、jar包里面,这样可以把静态资源压缩到jar包中。cache-period可以使得静态资源进行web cache 

如果出现下面的错误,可能是没有配置 <mvc:annotation-driven /> 的原因。
报错WARNING: No mapping found for HTTP request with URI [/mvc/user/findUser/lisi/770] in DispatcherServlet with name 'springMVC'

使用 <mvc:resources/> 元素,把 mapping 的 URI 注册到 SimpleUrlHandlerMapping的urlMap 中,
key 为 mapping 的 URI pattern值,而 value为 ResourceHttpRequestHandler,
这样就巧妙的把对静态资源的访问由 HandlerMapping 转到 ResourceHttpRequestHandler 处理并返回,所以就支持 classpath 目录, jar 包内静态资源的访问.
另外需要注意的一点是,不要对 SimpleUrlHandlerMapping 设置 defaultHandler. 因为对 static uri 的 defaultHandler 就是ResourceHttpRequestHandler,
否则无法处理static resources request.

方案三 ,使用<mvc:default-servlet-handler/>
本文原始链接:http://unmi.cc/spring-mvc-access-static-resources-jpgjscss, 来自:隔叶黄莺 Unmi Blog

<mvc:default-servlet-handler/>

会把 "/**" url,注册到 SimpleUrlHandlerMapping 的 urlMap 中,把对静态资源的访问由 HandlerMapping 转到 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 处理并返回.
DefaultServletHttpRequestHandler 使用就是各个 Servlet 容器自己的默认 Servlet.

补充说明:多个HandlerMapping的执行顺序问题:

DefaultAnnotationHandlerMapping 的 order 属性值是:0

<mvc:resources/ >自动注册的 SimpleUrlHandlerMapping 的 order 属性值是: 2147483646

<mvc:default-servlet-handler/>自动注册的 SimpleUrlHandlerMapping 的 order 属性值是:2147483647

spring 会先执行 order 值比较小的。当访问一个 a.jpg 图片文件时,先通过 DefaultAnnotationHandlerMapping 来找处理器,一定是找不到的,我们没有叫 a.jpg 的 Action。再按 order 值升序找,由于最后一个 SimpleUrlHandlerMapping 是匹配 "/**" 的,所以一定会匹配上,再响应图片。

访问一个图片,还要走层层匹配。真不知性能如何?改天做一下压力测试,与Apache比一比。

最后再说明一下,如何你的 DispatcherServlet 拦截 *.do 这样的 URL,就不存上述问题了。


      

 

2
1
分享到:
评论
3 楼 lkl 2015-05-19  
说的没错。
2 楼 lkl 2015-04-06  
说的太对了,但是我们现在项目的配置在web.xml中,想改一下,但是你懂的,权限木有,我有个问题是这样的,这三种配置方式,谁的访问效率更高一些。上线时是用的nginx。
1 楼 酷的飞上天空 2015-04-02  
一般都是使用<mvc:default-servlet-handler/>
前面两种方式配置起来不灵活,有新的资源都需要重新添加配置。

正式上线的时候都会在前端部署一个nginx一类的web服务器,静态资源不通过后台,所以不会出现访问静态文件还要经过spring的层层过滤的问题。

相关推荐

    SpringMVC访问静态资源

    总结来说,Spring MVC提供了多种方式来管理和优化静态资源的访问,包括自定义静态资源路径、缓存控制、避免与控制器冲突以及性能优化。通过灵活的配置,开发者可以根据项目需求来定制最佳的静态资源处理策略。

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

    本篇文章将总结Spring MVC访问静态资源的三种主要方式,帮助开发者更好地理解和配置项目。 ### 方案一:利用Tomcat的默认Servlet 在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中,处理静态资源的主要方法有两种: 1. **通过Servlet映射配置**: - **问题**:当使用默认的`DispatcherServlet`配置时,所有的URL请求都会被路由到Spring MVC控制器,...

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

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

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

    然而,有时我们需要自定义静态资源的处理方式,例如缓存控制、权限验证等,这时就需要了解Spring MVC如何配置和管理静态资源。 首先,Spring MVC通过`DispatcherServlet`来分发请求,如果请求的目标是静态资源,...

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

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

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

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

    springMVC静态资源

    然而,有时我们可能需要自定义静态资源的路径或者对静态资源的处理方式进行调整。这可以通过在Spring MVC的配置类中添加`WebMvcConfigurer`接口的实现来完成。例如,我们可以在`addResourceHandlers`方法中指定额外...

    SpringMVC访问图片

    总的来说,Spring MVC访问图片主要涉及静态资源的配置、Controller的处理以及图片数据的获取方式。理解这些要点,可以确保你的Spring MVC应用能够流畅地处理图片的显示和访问。在实际项目中,还需要考虑性能优化,...

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

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

    SpringMVC使用的Swagger UI静态资源

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

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

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

    SpringMVC框架架构介绍

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

    spring+mybatis+springmvc 全注解框架

    4. **webapp**:Web应用目录,包含WEB-INF下的web.xml(Web应用配置)、jsp页面以及静态资源。 5. **logs**:日志文件存放位置。 6. **README.md**:项目说明文档,可能包含如何运行和配置的指南。 在这个框架中,...

    SpringMVC demo 完整源码实例下载

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

    SpringMVC Mysql 实例详解

    `WebRoot`是Web应用的根目录,包含静态资源如HTML、CSS、JavaScript文件,以及SpringMVC的视图解析器查找的JSP或Thymeleaf模板。`WEB-INF`子目录下通常会有`web.xml`部署描述符,用于配置SpringMVC的...

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

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

Global site tag (gtag.js) - Google Analytics