Spring3无法显示css/js/jpg/gif

7 五月, 2010 (09:31) | spring3 繁体 English    DeliciOus    分享到新浪微博
作者: H.E. | 您可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.javabloger.com/article/no-mapping-found-for-http-request-with-uri.html
豆瓣读书 向你推荐有关 spring3、 类别的图书。

项目中正在使用着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–

豆瓣读书  向你推荐有关 spring3、 类别的图书。



Creative Commons License
本文由J2ee企业顾问-黄毅创作,并已采用创作共用署名2.5中国大陆版许可证授权。

评论

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

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&gt*.do &;lt/url-pattern&gt ,

那么就会针对*.do的url进行过滤操作,如果OpenSessionInViewFilter中指定的是&lturl-pattern&gt/&lt/url-pattern&gt 那么就跟着变,如果不把.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。

评论

评论也是有版权的!




8430