如何你的DispatcherServlet拦截"*.do"这样的有后缀的URL,就不存在访问不到静态资源的问题。
如果你的DispatcherServlet拦截"/",为了实现REST风格,拦截了所有的请求,那么同时对*.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 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/>
- <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的配置文件中可以添加,这允许SpringMVC使用默认的Servlet来处理静态文件请求。通过在web.xml文件中对默认Servlet进行映射(通常是url-pattern为/*),可以让默认Servlet先于SpringMVC的...
为了提高性能,Spring MVC允许你在部署时将静态资源打包在WAR文件中,而不是放在类路径下。此外,使用CDN(内容分发网络)可以进一步提高静态资源的加载速度,特别是对于全球范围内的用户。 ### 8. 资源版本控制 ...
- **解决方法**:在Spring配置文件中添加`<mvc:default-servlet-handler/>`标签。该标签告诉Spring MVC框架,如果找不到任何匹配的处理器,则将请求转发给Web服务器的默认Servlet。这意味着对于那些未被Spring MVC...
springmvc_access_static_resourcespringMVC3学习(四)--访问静态文件如js,jpg,css(源码)
SpringMvc静态资源访问实现方法代码实例 SpringMvc静态资源访问实现方法代码实例介绍了如何在SpringMvc框架中访问静态资源的方法代码实例。该实例通过示例代码详细介绍了如何配置SpringMvc来访问静态资源,从而为...
springMVC3学习(四)--访问静态文件如js,jpg,css(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25987411
这样,当浏览器请求`/resources/`下的任何资源时,SpringMVC将不再拦截,而是直接返回对应路径的静态文件。 除了上述方法,还有其他几种处理静态资源的方式: 1. 使用`<mvc:default-servlet-handler/>`:在`...
在`web.xml`配置文件中,可以通过以下方式激活`defaultServlet`来处理特定类型的静态文件: ```xml <servlet-name>default *.js ``` 这段配置意味着,所有以`.js`结尾的URL请求都将由`defaultServlet`来处理。...
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的核心概念和实际应用。 首先,SpringMVC是Spring框架的一部分,它通过Model-View-Controller(MVC)设计模式来分离应用程序的业务...
在Spring MVC框架中,静态资源处理是一个至关重要的部分,它涉及到网页应用中JavaScript、CSS、图片等非Java代码文件的访问。Spring MVC默认情况下,并不直接处理这些静态资源,而是交由Web服务器(如Tomcat)来处理...
下面将详细解释`springMVC.xml`这个核心配置文件中的重要知识点。 1. **组件扫描**: 在`<context:component-scan>`标签中,你可以指定要扫描的包,以便Spring自动发现并管理Bean。例如: ```xml ``` 这会...
如果存在,它将直接返回静态文件,无需经过复杂的视图解析和数据库查询过程;若不存在,则先执行动态逻辑生成静态页面,然后将生成的页面保存并返回给客户端。 以下是一些关键知识点: 1. **DispatcherServlet**: ...
通常,这可以通过在 Maven 或 Gradle 的配置文件中引入相关的 Swagger 依赖完成。 接下来,我们需要配置 Swagger 的核心组件 `Swagger2`。在 SpringMVC 中,我们可以通过创建一个配置类,使用 `@EnableSwagger2` ...
在SpringMVC项目中,常见的目录结构包括`src/main/java`(存放源代码)、`src/main/resources`(存放配置文件和静态资源)、`src/main/webapp`(存放Web应用相关的文件,如HTML、CSS、JavaScript等)。 **单文件...
Controller中的方法会接收到`MultipartFile[] files`参数,这代表了上传的多个文件: ```java import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; ...
为了使Spring MVC能够正确地处理图片请求,我们需要在`web.xml`或Spring配置文件中设置静态资源处理器。在`web.xml`中,可以通过`<servlet-mapping>`元素配置DispatcherServlet,让其排除对静态资源的处理,例如: ...
在`spring-mvc.xml`配置文件中,可以通过`<mvc:exclude-mapping>`标签明确指定不被拦截的路径。例如: ```xml **/*"/> **/fonts/*"/> **/*.css"/> ... ``` 这种方法的优点是配置清晰,可以直接在拦截器...
`springMVC带上传文件`的实现主要涉及到Spring MVC的控制器(Controller)和模型(Model)、视图(View)以及视图解析器的交互。在这个项目中,我们使用了`MultiActionController`来处理多种请求,包括查询、保存...
在 SpringMVC 的配置文件 `springAnnotation-servlet.xml` 中,需要配置前端控制器、注解扫描、静态资源映射以及视图解析器等。其中,配置文件解析器(如 `CommonsMultipartResolver`)是实现多文件上传的关键步骤之...