你怎么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后缀,就不存上述问题了。还是有后缀方便。

版权声明:本文博主原创文章,博客,未经同意不得转载。

springmvc如何访问静态文件,例如jpg,js,css的更多相关文章

  1. SPRING-MVC访问静态文件,如jpg,js,css

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

  2. idea中JSP页面不能访问静态资源(图片,js,css)

    必须配置SpringMvc对访问静态资源的支持,idea默认就是在main/webapp 下的文件路径,要在web-info同级的resource文件下放置,JSP中 ${pageContext.re ...

  3. SpringMVC之访问静态文件

    我们在进行springMVC开发时,必定会在jsp页面引入js文件.img文件和css文件.大多数人会将这些分类存放在WebRoot文件下新建的文件夹下面.同时,会在web.xml文件中配置拦截所有请 ...

  4. SpringMVC——正常访问静态文件,不要找不到静态文件报404的方法

    方案一:激活Tomcat的defaultServlet来处理静态文件 <span style="font-size:12px;"> <servlet-mappin ...

  5. springMVC如何访问静态文件

    在进行Spring MVC的配置时,通常我们会配置一个dispatcher servlet用于处理对应的URL.配置如下:<servlet><servlet-name>mvc- ...

  6. springmvc配置访问静态文件

    xmlns:mvc="http://www.springframework.org/schema/mvc" <mvc:annotation-driven /><m ...

  7. 在django中访问静态文件(js css img)

    刚开始参考的是别的文章,后来参考文章<各种 django 静态文件的配置总结>才看到原来没有但是没有注意到版本,折腾了一晚上,浪费了很多很多时间.后来终于知道搜索django1.7访问静态 ...

  8. Springmvc加载静态文件和开启EL表达式的支持

    一.静态文件加载问题 刚开始学习SpringMVC,发现静态文件无法加载 web.xml配置如下: <web-app id="WebApp_ID" version=" ...

  9. spingmvc 访问静态文件,比如css,img等

    这里我来引用一段别人的原话 url-pattern有5种配置模式: (1)/xxx:完全匹配/xxx的路径 (2)/xxx/*:匹配以/xxx开头的路径,请求中必须包含xxx. (3)/*:匹配/下的 ...

随机推荐

  1. liGDX life_cycle (生命周期)

    本文章翻译自libGDX官方wiki,,转载请注明出处:http://blog.csdn.net/kent_todo/article/details/37940489 libGDX官方网址:http: ...

  2. Delphi 的绘图功能(29篇博客)

    http://www.cnblogs.com/del/category/123038.html

  3. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 站点设置

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 站点设置         你应该熟悉(假设还咩有)的SharePo ...

  4. 求第i个小的元素 时间复杂度O(n)

    #include<iostream> //求第i个小的元素 时间复杂度O(n) #include<cstdlib> #include<ctime> using na ...

  5. ubuntu 64位下安装wps

    首先,去官网下载wps.地址:http://community.wps.cn/download/ 然后切换到下载文件夹.运行例如以下命令: $ sudo apt-get install ia32-li ...

  6. nRF Toolbox 1.2 使用AKII的实现,而Becon始终不好使

    这几天调试使用nRF51822驱动mpu6050及其数据传输到android中,调试的过程遇到一些困难,apptimer不太会用,然后就參考了下ble_app_hrs的程序,结果成功搞定,demo的价 ...

  7. 解决windows下的mysql匿名登陆无法使用mysql数据库的问题

    原文:解决windows下的mysql匿名登陆无法使用mysql数据库的问题 我在windows下安装了mysql,但是不用密码就能登进去,而root明明是有密码的,我用select user()命令 ...

  8. POJ1182 食物链 【并查集变种】

    挺简单的 N个元素扩展为 3*N个 i-A i-B i-C A吃B吃C吃A 挑战程序设计的89面 #include <cstdio> #include <cstdlib> #i ...

  9. python中print,return和yield的区别

    def func1(): for i in range(1, 5): print i def func2(): for i in range(1, 5): return i def func3(): ...

  10. IntelliJ IDEA中怎样使用JUnit4

     背景 近期參与了一个Anroid医疗项目,当中项目底层有非常多基础类及通讯类,并且非常多涉及复杂的字节操作还有多线程同步及状态机处理.这种项目做一下TDD还是必要的,尽量项眼下期把风险减少一些. ...