当前位置: 首页 > news >正文

SPRING-MVC 访问静态资源

 

转:http://lzy83925.iteye.com/blog/1186609

 

 

 

 

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

 

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

Xml代码  
<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 的使用方法:

Xml代码  
<!-- 对静态资源文件的访问 -->    
<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/>

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

 

访问一个图片,还要走层层匹配。真不知性能如何?改天做一下压力测试,与Apache比一比。

 

最后再说明一下,如何你的DispatcherServlet拦截 *.do这样的URL,就不存上述问题了。

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

 

相关文章:

  • IE6下position:fixed不支持问题及其解决方式
  • Erlang库 -- 有意思的库汇总
  • 《大数据算法》一2.3 时间亚线性判定算法概述
  • 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
  • Setfocus - IE 需要使用setTimeout
  • linux 文件名编码批量转换
  • zabbix监控:监控windows进程
  • CGAL4.10 / CGAL4.13编译
  • multiMap by angular
  • Context源码分析
  • [转]CentO下限制SSH登录次数
  • 《软件工艺师:专业、务实、自豪》一3.2 维基百科对软件工艺的定义
  • SIM卡
  • angular select 默认值
  • Java日期的格式String类型GMT,GST换算成日期Date种类
  • __proto__ 和 prototype的关系
  • 【EOS】Cleos基础
  • interface和setter,getter
  • js数组之filter
  • 你真的知道 == 和 equals 的区别吗?
  • 删除表内多余的重复数据
  • 深度学习在携程攻略社区的应用
  • 小程序 setData 学问多
  • 与 ConTeXt MkIV 官方文档的接驳
  • 源码安装memcached和php memcache扩展
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #QT(TCP网络编程-服务端)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (二)windows配置JDK环境
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)VirtualBox安装增强功能
  • *** 2003
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net中生成excel后调整宽度
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • /var/lib/dpkg/lock 锁定问题
  • [ NOI 2001 ] 食物链
  • [android] 练习PopupWindow实现对话框
  • [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)
  • [CTSC2014]企鹅QQ
  • [Docker]十.Docker Swarm讲解
  • [IDF]被改错的密码
  • [JavaEE系列] Thread类的基本用法
  • [LeetCode]-Integer to Roman 阿拉伯数字转罗马数字
  • [Linux] 常用命令--版本信息/关机重启/目录/文件操作
  • [Mvc]在ASP.NET MVC中使用Repeater
  • [one_demo_5]命令行输入输出