SpringMVC对静态文件的3种访问方法

servlet在找页面时,走的是dispatcherServlet路线。找不到的时候会报404错误。

加上这个默认的servlet时候,servlet在找不到的时候会去找静态的内容。

访问到静态的文件,如jpg,js,css

如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.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 
mvc:resources 的使用方法:

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

mapping 映射到 ResourceHttpRequestHandle r进行处理;

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

时间: 2024-11-06 14:51:36

SpringMVC对静态文件的3种访问方法的相关文章

小米路由器硬盘文件怎么用电脑访问 方法二

小米路由器硬盘文件怎么用电脑访问 方法二 如果没有安装小米路由器PC客户端的话,也是可以访问的,我们可以使用映射网络驱动器的方法,打开计算机(我的电脑),选择工具-->映射网络驱动器,如下图   选择驱动器的盘符,文件夹处填上 \\192.168.31.1\XiaoMi,如下图 其中192.168.31.1是小米路由器的IP,如果你更改过,请按实际填写   当然你也可以选择浏览来进行选择,如下图 注意:带Privacy的是隐私盘 如果想电脑开机后自动连上小米路由器的共享盘,请勾选登陆时重新连接

SpringMVC处理静态文件源码分析

SpringMVC处理静态资源,主要是两个标签,mvc:resources和mvc:default-servlet-handler.在详细说明他们的原理之前,需要先简单说明下SpringMVC中请求处理机制:HandlerMapping和HandlerAdapter. 1 HandlerMapping和HandlerAdapter的来由 用过python Django框架的都知道Django对于访问方式的配置就是,一个url路径和一个函数配对,你访问这个url,就会直接调用这个函数,简单明了 然

springmvc引入静态文件报404错误

springmvc项目在引入jquery.js文件的时候报了404的错误,当然jquery也是无法使用了,出现这样的错误主要是由于dispatcherServlet拦截设置的问题,请看以下例子: 当我们在web.xml里面设置dispatcherServlet时设置了拦截"/",所以引入静态文件的时候也会因为这个设置而导致无法寻找文件 解决方案: 1.可以把这个拦截设置为*.do,那么页面中照常引入文件,web.xml设置: JSP使用并测试: 2.第二种方式可以添加文件后缀的拦截,建

SpringMVC上传文件的三种解析方式

springMVC上传文件后,在action解析file文件的三种方式. jsp页面的写法: <form action="parserUploadFile1" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit"

11.22 访问日志不记录静态文件;11.23 访问日志切割;11.24 静态元素过期时间

扩展: apache日志记录代理IP以及真实客户端IP : http://ask.apelearn.com/question/960 apache只记录指定URI的日志 : http://ask.apelearn.com/question/981 apache日志记录客户端请求的域名 : http://ask.apelearn.com/question/1037 apache 日志切割问题 : http://ask.apelearn.com/question/566 11.22 访问日志不记录静

ASP.NET上传文件的三种基本方法

ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. Test.aspx关键代码: [html] view plain copy <form id="form1" runat="server"> <asp:FileUpload ID="FileUpload1" runat="server&quo

springboot 静态文件加载失败解决方法

springboot 的启动器默认设置会去下面四个路径寻找文件:所以是不需要再properties文件或者yml文件中再配置信息了 "classpath:/META-INF/resources/", "classpath:/resources/","classpath:/static/", "classpath:/public/" 只要凡是放入其中的文件,就能被找到,但是过程并不顺利,从外面copy进来的静态文件 依然报404

Think PHP url的四种访问方法。

1.PATHINFO 模式        常用!!!重点!!! http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2.可以进行参数传值,参考写法如下: <?php class IndexController extends Controller{ public function index() { echo "欢迎你".$_Get['name']; } } ?> 在URL里就这样写locallhost:8080/Thinkphp/index.php/

SpringMVC上传文件的三种方式(转载)

直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/commonsmultipartresolver.java.html 前台: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <%@ page language="java" contentTy