如何让spring mvc伪静态化mvc对静态资源文件的访问使用文件系统的相对路径

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
本文转载自库特龙虾
要写在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 的使用方法:
&!--对静态资源文件的访问--&
&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 属性值是:&
&mvc:default-servlet-handler/&自动注册的 SimpleUrlHandlerMapping 的 order 属性值是:
spring&会先执行 order 值比较小的。当访问一个 a.jpg 图片文件时,先通过 DefaultAnnotationHandlerMapping&来找处理器,一定是找不到的,我们没有叫 a.jpg 的 Action。再按 order 值升序找,由于最后一个 SimpleUrlHandlerMapping&是匹配 "/**" 的,所以一定会匹配上,再响应图片。
访问一个图片,还要走层层匹配。真不知性能如何?改天做一下压力测试,与Apache比一比。
最后再说明一下,如何你的 DispatcherServlet 拦截 *.do 这样的 URL,就不存上述问题了。
转自:/blog/1186609
阅读(57103)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'SpringMVC访问静态资源的三种方式',
blogAbstract:'\r\n如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}求助各位大神springmvc配置mvc:resource还是不能访问静态资源?_springmvc吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:870贴子:
求助各位大神springmvc配置mvc:resource还是不能访问静态资源?收藏
&mvc:resources location=&/images/& mapping=&/images/**&/&不能访问到项目根目录下的images文件夹下的图片,,路径都是对的
斗破沙城首服开启,三大职业延续经典
是不是位置放错
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或如题,经过.do控制器处理后返回JSP页面,此JSP页面如果想引入和JSP文件同一层的JS文件,也不能使用src="http://s.yanghao.org/program/jquery-1.7.1.min.js",因为这样读取到的是和.do控制器同一层的JS文件。那么只能使用绝对路径,如下:&script src="http://s.yanghao.org/program//js/jquery-1.7.1.min.js" type="text/script"&&/script&请问高手,如何可以使用相对路径来处理?有办法吗?跪求。。
--------------------------------------
一般我都是直接用完整网址来描述...http://xxx/static/abc.js这样做静态神马的都没压力css/html(2)
& &&在使用Spring MVC做开发时,一般都要使用静态资源文件,例如js,css,jpg等等数据,如果不加配置,一般都会加载失败,解决这个问题的办法很简单,有需要的童鞋可以看看。
& &&大象以ssm3为例,web.xml这个文件里面,我们配置了DispatcherServlet,它的servlet-mapping映射如下:
&servlet-mapping&
&servlet-name&ssm3&/servlet-name&
&url-pattern&/&/url-pattern&
&/servlet-mapping&
&请注意这里&url-pattern&/&/url-pattern&,它将所有的请求都匹配了,并且交给DispatcherServlet作转发。知道了问题出在哪里就好办了,我们可以将静态资源交给服务器处理,那么服务器处理静态资源的是什么东东咧?以Tomcat为例,在它的web.xml里面开头有这样一段配置:
&org.apache.catalina.servlets.DefaultServlet就是用来处理静态资源的。于是,我们就可以在项目的web.xml里面加入相应的静态资源文件处理配置。
&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&
&servlet-mapping&
&servlet-name&default&/servlet-name&
&url-pattern&*.gif&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&default&/servlet-name&
&url-pattern&*.jpg&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&default&/servlet-name&
&url-pattern&*.ico&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&default&/servlet-name&
&url-pattern&*.png&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&default&/servlet-name&
&url-pattern&*.htm&/url-pattern&
&/servlet-mapping&
上面只列出了一部分,如果还有其它的静态资源需要过滤,可以继续添加。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:291次
排名:千里之外Spring MVC如何访问到静态的文件,如jpg,js,css?-Spring-名客技术网 |
当前位置:
> SpringSpring MVC如何访问到静态的文件,如jpg,js,css?
Spring MVC如何访问到静态的文件,如jpg,js,css?
如果你的DispatcherServlet拦截&*.do&这样的有后缀的URL,就不存在访问不到静态资源的问题。
如果你的DispatcherServlet拦截&/&,为了实现REST风格,拦截了所有的请求,那么同时对*.js,*.jpg等静态文件的访问也就被拦截了。
我们要解决这个问题。
目的:可以正常访问静态文件,不可以找不到静态文件报404。
方案一:激活Tomcat的defaultServlet来处理静态文件
要写在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 , &使用方法:
&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/&
会把&/**& url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler处理并返回.
DefaultServletHttpRequestHandler使用就是各个Servlet容器自己的默认Servlet.
补充说明:多个HandlerMapping的执行顺序问题:
DefaultAnnotationHandlerMapping的order属性值是:0
& mvc:resources/& 自动注册的 SimpleUrlHandlerMapping的order属性值是:
&mvc:default-servlet-handler/&自动注册 的SimpleUrlHandlerMapping 的order属性值是:
spring会先执行order值比较小的。当访问一个a.jpg图片文件时,先通过 DefaultAnnotationHandlerMapping 来找处理器,一定是找不到的,因为我们没有叫a.jpg的Action。然后再按order值升序找,由于最后一个 SimpleUrlHandlerMapping 是匹配 &/**&的,所以一定会匹配上,就可以响应图片。
访问一个图片,还要走层层匹配。不知性能如何?
最后再说明一下,方案二、方案三 在访问静态资源时,如果有匹配的(近似)总拦截器,就会走拦截器。如果你在拦截中实现权限检查,要注意过滤这些对静态文件的请求。
如何你的DispatcherServlet拦截 *.do这样的URL后缀,就不存上述问题了。还是有后缀方便。
以上IT文章《Spring MVC如何访问到静态的文件,如jpg,js,css?》由提供阅读!上一篇: 下一篇: 相关IT教程:[][][][][][][][][][]推荐教程推荐软件日排行榜文章软件问答备案号:鄂ICP备号-1

我要回帖

更多关于 spring mvc伪静态化 的文章

 

随机推荐