Spring3无法显示css/js/jpg/gif
项目中正在使用着Spring3 REST带来的快活,忽然一条很不和谐的错误信息出现,如下所示:
2010-05-07 09:07:43,275 WARN org.springframework.web.servlet.DispatcherServlet.noHandlerFound(DispatcherServlet.java:962) No mapping found for HTTP request with URI [/Spring3/css/mSelect.js] in DispatcherServlet with name 'springmvc'
2010-05-07 09:07:43,275 WARN org.springframework.web.servlet.DispatcherServlet.noHandlerFound(DispatcherServlet.java:962) No mapping found for HTTP request with URI [/Spring3/css/style_index.css] in DispatcherServlet with name 'springmvc'
这说明在web工程中的css、js、gif、jpg 等都无法显示出来,都是因为下面这段配置导致的
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
换成这样一点问题都没有,虽然没有问题,不是我们期望的结果,多了后缀 .do。
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
这说明要将那些不能显示的 css/js/jpg/gif 文件排除在过滤器以外不经过过滤器,不然Spring3的过滤器会认为你没有将这个url进行映射,在网上找了很多资料都没有非常针对性的答案,于是经过几番折腾,总算搞定,加上以下配置在web.xml中,将默认的过滤器选项激活,世界又恢复平静,css、js、gif、jpg 等一切显示正常。
<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>*.js</url-pattern>
</servlet-mapping>
–end–

本文由J2ee企业顾问-黄毅创作,并已采用创作共用署名2.5中国大陆版许可证授权。
评论
Comment from cx
Time 2010年05月18日 at 10:42 上午
解决了我很困扰的问题,持续关注你的博客
Comment from icantellu
Time 2010年05月24日 at 10:02 上午
如果可以这样写就更好了 期待Servlet 3.0 可以支持
default
*.css
*.gif
*.png
*.js
Comment from icantellu
Time 2010年05月24日 at 12:27 下午
问一个问题 对于hibernate 的 lazyload 的解决方案 是 hibernateOpenSessionInViewFilter 相应的 代码是
filter-mapping
filter-name hibernateOpenSessionInViewFilter /filter-name
url-pattern *.do /url-pattern
/filter-mapping
如果将servlet的 url-pattern 改成 / 那么 hibernateOpenSessionInViewFilter 是不是也相应的改成 / 不然lazyload 依然会出现
Comment from icantellu
Time 2010年05月24日 at 12:29 下午
楼主是不是禁止了 回复的内容 含有 xml 标签
Comment from helloSpringWorld
Time 2010年05月24日 at 12:52 下午
理论上OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要是在发起一个页面请求时打开Hibernate的Session,并且去一直保持这个Session,直到这个请求结束.
简单来说OpenSessionInViewFilter就是一个过滤器,根据servlet过滤器的规则肯定是需要指定一个过滤的url判定的,如果是 url-pattern>*.do &;lt/url-pattern> ,
那么就会针对*.do的url进行过滤操作,如果OpenSessionInViewFilter中指定的是<url-pattern>/</url-pattern> 那么就跟着变,如果不把.do变成/ hibernate的 OpenSessionInViewFilter不会生效。
Comment from hoho
Time 2010年06月8日 at 4:12 下午
楼主!漂亮!!!搜这个问题,找到这里!
Comment from 陈祥博
Time 2010年06月14日 at 1:12 下午
惊喜~~!!
我的QQ:273040644,期待与各位同仁交流~
Comment from melin
Time 2010年06月21日 at 3:55 下午
你可以尝试用urlrewrite
/images/**
/images/$1
/scripts/**
/scripts/$1
/styles/**
/styles/$1
/**
/app/$1
/app/**
/$1
Comment from melin
Time 2010年06月21日 at 3:58 下午
可以尝试使用urlrewrite解决这个问题,很简单
Comment from wicketyan
Time 2010年06月23日 at 11:59 上午
那为啥用却能访问图片了?
Comment from wicketyan
Time 2010年06月23日 at 12:00 下午
居然过滤了,是c:url
Comment from wicketyan
Time 2010年06月23日 at 7:48 下午
懂了,要用urlrewrite才能看到图片
Comment from nickevin
Time 2010年08月22日 at 9:35 上午
请用3.0.4新增加的特性来优雅解决此类问题 详细见 http://www.javaeye.com/topic/743651
Comment from TiY
Time 2011年04月18日 at 11:17 上午
从spring3.0.3发布以后一直等待spring3.0.4发布,今天终于出来,可以甩掉UrlRewriteFilter。
从spring3 mvc支持rest,丰富的注解,应用起来非常方便,对所有的请求当做rest来处理,这就会带来一个问题,如果是静态资源,如js、css和图片,就会导致无法完成请求。为了绕过DispatcherServlet对这些静态资源的处理,多使用UrlRewriteFilter。






Comment from lu
Time 2010年05月15日 at 10:54 下午
正是使用这样的配置,工程中使用fckeditor 无法显示,
No mapping found for HTTP request with URI [/helper/fckeditor/editor/fckeditor.html] in DispatcherServlet with name ’springmvc’
能否帮助 qq 838112113