怎样訪问到静态的文件,如jpg,js,css?

怎样你的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://elf8848.iteye.com/blog/875830

Spring MVC学习-------------訪问到静态的文件的更多相关文章

  1. Spring MVC程序中怎么得到静态资源文件css,js,图片文件的路径问题

    问题描述 在用springmvc开发应用程序的时候.对于像我一样的初学者,而且还是自学的人,有一个很头疼的问题.那就是数据都已经查出来了,但是页面的样式仍然十分简陋,加载不了css.js,图片等资源文 ...

  2. Spring MVC 学习总结(六)——Spring+Spring MVC+MyBatis框架集成

    与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和 ...

  3. Spring MVC 学习总结(一)——MVC概要与环境配置 转载自【张果】博客

    Spring MVC 学习总结(一)--MVC概要与环境配置   目录 一.MVC概要 二.Spring MVC介绍 三.第一个Spring MVC 项目:Hello World 3.1.通过Mave ...

  4. Spring MVC 学习总结(十一)——IDEA+Maven+多模块实现SSM框架集成

    一.SSM概要 与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC ...

  5. Spring MVC 学习总结(十)——Spring+Spring MVC+MyBatis框架集成(IntelliJ IDEA SSM集成)

    与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和 ...

  6. Spring MVC学习总结

    Spring MVC学习总结 Spring MVC学习路(一) 下载配置文件 Spring MVC学习路(二) 设置配置文件 Spring MVC学习路(三) 编写第一个demo Spring MVC ...

  7. Spring MVC 学习 -- 创建过程

    Spring MVC 学习 -- 创建过程 Spring MVC我们使用的时候会在web.xml中配置 <servlet> <servlet-name>SpringMVC< ...

  8. 《Spring MVC学习指南》怎么样?答:书名具有很大的欺骗性

    2016年6月21日 最近,因为工作需要,我从网上买了一本<Spring MVC学习指南>,ISBN编号: 978-7-115-38639-7,定价:49.00元.此书是[美]Paul D ...

  9. Spring MVC 学习总结(五)——校验与文件上传

    Spring MVC不仅是在架构上改变了项目,使代码变得可复用.可维护与可扩展,其实在功能上也加强了不少. 验证与文件上传是许多项目中不可缺少的一部分.在项目中验证非常重要,首先是安全性考虑,如防止注 ...

随机推荐

  1. 在eclipse里如何快速定位到某一行?

    使用快捷键ctrl+L讲每一行的行号显示出来:在eclipse的某一行的最左边,右键——show Line Numbers就可以将行数都显示出来.

  2. Redis系列(七)--Sentinel哨兵模式

    在上一篇文章了解了主从复制,主从复制本身的容错性很差,一旦master挂掉,只能进行手动故障转移,很难完美的解决这个问题 而本文讲解的sentinel可以解决这个问题 Redis sentinel示意 ...

  3. 苹果和虫子问题C++

    如果需要转载,请注明出处:http://www.cnblogs.com/wongyi/p/8205305.html 最近在给小朋友补奥数课,顺便看了几道题目,觉得写出来会比较集中,整理一下哈哈哈. 问 ...

  4. swift中tableview的使用和注意事项

    今天使用swift写了个简单的tableView,语法和用法上跟oc没多大的区别.但是还是有一些细节的地方需要注意一下的. 先上代码 import UIKit class ViewController ...

  5. javaHashcode与equals

    转载自:http://blog.csdn.net/jiangwei0910410003/article/details/22739953 Java中的equals方法和hashCode方法是Objec ...

  6. [Luogu] P4366 [Code+#4]最短路

    题目背景 在北纬 91° ,有一个神奇的国度,叫做企鹅国.这里的企鹅也有自己发达的文明,称为企鹅文明.因为企鹅只有黑白两种颜色,所以他们的数学也是以二进制为基础发展的. 比如早在 1110100111 ...

  7. 服务器做ssh免秘钥登陆

    集群内服务器做非root用户免秘钥登陆:1.node1新建用户abc1,制作公钥.私钥(一路回车键即可)ssh-keygen –t rsa将自动在/home/abc1/.ssh/目录下创建公私钥文件如 ...

  8. Linux有几种安装软件的方式?????

    看了Windows后台软件安装的过程,想必Linux也是这样.拿RHEL7来打比方 最开始Linux上安装软件只提供源代码,需要自己去编译源代码,拷贝库文件等 RPM 红帽软件包管理器可以自动地执行上 ...

  9. 自己动手编写vue插件

    一.为什么要自己动手写插件呢,原因有二: 其一:是因为最近产品了提了一个在web端接收,消息通知的需求,产品要求在若干个页面内如果有消息,就要弹出消息弹窗展示给用户,略加思索之后,第一反应就是写个消息 ...

  10. Spring核心技术(四)——Spring的依赖及其注入(续二)

    前面两篇文章描述了IoC容器中依赖的概念,包括依赖注入以及注入细节配置.本文将继续描述玩全部的依赖信息. 使用 depends-on 如果一个Bean是另一个Bean的依赖的话,通常来说这个Bean也 ...