`

SpringMVC中如何访问到静态的文件

阅读更多

如何你的DispatcherServlet拦截"*.do"这样的有后缀的URL,就不存在访问不到静态资源的问题。

如果你的DispatcherServlet拦截"/",为了实现REST风格,拦截了所有的请求,那么同时对*.js,*.jpg等静态文件的访问也就被拦截了。

我们要解决这个问题。

 

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

  1. <servlet-mapping>
  2. <servlet-name>default</servlet-name>
  3. <url-pattern>*.jpg</url-pattern>
  4. </servlet-mapping>
  5. <servlet-mapping>
  6. <servlet-name>default</servlet-name>
  7. <url-pattern>*.js</url-pattern>
  8. </servlet-mapping>
  9. <servlet-mapping>
  10. <servlet-name>default</servlet-name>
  11. <url-pattern>*.css</url-pattern>
  12. </servlet-mapping>
  13. 要配置多个,每种文件配置一个要写在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 , 使用方法:

  1. <!-- 对静态资源文件的访问 -->
  2. <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/>

  1. <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 是匹配 "/**"的,所以一定会匹配上,就可以响应图片。

 

 

访问一个图片,还要走层层匹配。不知性能如何?

最后再说明一下,方案二、方案三 在访问静态资源时,如果有匹配的(近似)总拦截器,就会走拦截器。如果你在拦截中实现权限检查,要注意过滤这些对静态文件的请求。

如何你的DispatcherServlet拦截 *.do这样的URL后缀,就不存上述问题了。还是有后缀方便。

 

转载请注明:http://www.xujin.org

分享到:
评论

相关推荐

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

    在SpringMVC的配置文件中可以添加,这允许SpringMVC使用默认的Servlet来处理静态文件请求。通过在web.xml文件中对默认Servlet进行映射(通常是url-pattern为/*),可以让默认Servlet先于SpringMVC的...

    SpringMVC访问静态资源

    为了提高性能,Spring MVC允许你在部署时将静态资源打包在WAR文件中,而不是放在类路径下。此外,使用CDN(内容分发网络)可以进一步提高静态资源的加载速度,特别是对于全球范围内的用户。 ### 8. 资源版本控制 ...

    springmvc静态资源访问

    - **解决方法**:在Spring配置文件中添加`&lt;mvc:default-servlet-handler/&gt;`标签。该标签告诉Spring MVC框架,如果找不到任何匹配的处理器,则将请求转发给Web服务器的默认Servlet。这意味着对于那些未被Spring MVC...

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

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

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

    SpringMvc静态资源访问实现方法代码实例 SpringMvc静态资源访问实现方法代码实例介绍了如何在SpringMvc框架中访问静态资源的方法代码实例。该实例通过示例代码详细介绍了如何配置SpringMvc来访问静态资源,从而为...

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

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

    SpringMVC访问静态资源的方法

    这样,当浏览器请求`/resources/`下的任何资源时,SpringMVC将不再拦截,而是直接返回对应路径的静态文件。 除了上述方法,还有其他几种处理静态资源的方式: 1. 使用`&lt;mvc:default-servlet-handler/&gt;`:在`...

    JavaWeb项目中springmvc和tomcat对静态文件的处理

    在`web.xml`配置文件中,可以通过以下方式激活`defaultServlet`来处理特定类型的静态文件: ```xml &lt;servlet-name&gt;default *.js ``` 这段配置意味着,所有以`.js`结尾的URL请求都将由`defaultServlet`来处理。...

    springMVC伪静态和restful服务以及json日期格式

    restful访问方式: http://localhost:8080/jsp-rewrite/api/saveUser requestheader:Content-Type=application/json;charset=UTF-8 requestbody:{"id":3,"username":"王五","userpwd":"123456","birthdy":"2013-11...

    SpringMVC demo 完整源码实例下载

    在这个"SpringMVC demo 完整源码实例下载"中,我们能够深入理解并学习SpringMVC的核心概念和实际应用。 首先,SpringMVC是Spring框架的一部分,它通过Model-View-Controller(MVC)设计模式来分离应用程序的业务...

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

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

    SpringMVC核心配置文件示例.rar

    下面将详细解释`springMVC.xml`这个核心配置文件中的重要知识点。 1. **组件扫描**: 在`&lt;context:component-scan&gt;`标签中,你可以指定要扫描的包,以便Spring自动发现并管理Bean。例如: ```xml ``` 这会...

    SpringMVC_staticpage

    如果存在,它将直接返回静态文件,无需经过复杂的视图解析和数据库查询过程;若不存在,则先执行动态逻辑生成静态页面,然后将生成的页面保存并返回给客户端。 以下是一些关键知识点: 1. **DispatcherServlet**: ...

    SpringMVC使用的Swagger UI静态资源

    通常,这可以通过在 Maven 或 Gradle 的配置文件中引入相关的 Swagger 依赖完成。 接下来,我们需要配置 Swagger 的核心组件 `Swagger2`。在 SpringMVC 中,我们可以通过创建一个配置类,使用 `@EnableSwagger2` ...

    IDEA社区版编写的SpringMVC小项目

    在SpringMVC项目中,常见的目录结构包括`src/main/java`(存放源代码)、`src/main/resources`(存放配置文件和静态资源)、`src/main/webapp`(存放Web应用相关的文件,如HTML、CSS、JavaScript等)。 **单文件...

    SpringMVC之表单提交===③===多文件上传表单

    Controller中的方法会接收到`MultipartFile[] files`参数,这代表了上传的多个文件: ```java import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; ...

    SpringMVC访问图片

    为了使Spring MVC能够正确地处理图片请求,我们需要在`web.xml`或Spring配置文件中设置静态资源处理器。在`web.xml`中,可以通过`&lt;servlet-mapping&gt;`元素配置DispatcherServlet,让其排除对静态资源的处理,例如: ...

    SpringMVC 拦截器不拦截静态资源的三种处理方式方法

    在`spring-mvc.xml`配置文件中,可以通过`&lt;mvc:exclude-mapping&gt;`标签明确指定不被拦截的路径。例如: ```xml **/*"/&gt; **/fonts/*"/&gt; **/*.css"/&gt; ... ``` 这种方法的优点是配置清晰,可以直接在拦截器...

    springMVC带上传文件

    `springMVC带上传文件`的实现主要涉及到Spring MVC的控制器(Controller)和模型(Model)、视图(View)以及视图解析器的交互。在这个项目中,我们使用了`MultiActionController`来处理多种请求,包括查询、保存...

    Spring下的子框架SpringMVC实现多文件上传完整代码

    在 SpringMVC 的配置文件 `springAnnotation-servlet.xml` 中,需要配置前端控制器、注解扫描、静态资源映射以及视图解析器等。其中,配置文件解析器(如 `CommonsMultipartResolver`)是实现多文件上传的关键步骤之...

Global site tag (gtag.js) - Google Analytics