Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决

最近项目中使用到Spring3,在感叹Spring3注解配置清爽的同时竟然出现了这个不和谐的事情,实在无法忍受

问题:部署项目后程序加载或用浏览器访问时出现类似的警告,2011-01-19 10:52:51,646 WARN [org.springframework.web.servlet.PageNotFound] -<No mapping found for HTTP request with URI [/sandDemo001/images/1.jpg] in DispatcherServlet with name 'spring'>,主要看尖括号内部分。

问题原因:罪魁祸首是web.xml下对spring的DispatcherServlet请求url映射的配置,原配置如下:

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
 </servlet-mapping>

分析原因:<servlet-mapping><url-pattern>/</url-pattern>把所有的请求都交给spring去处理了,而所有available的请求url都是在Constroller里使用类似@RequestMapping(value = "/login/{user}", method = RequestMethod.GET)这样的注解配置的,这样的话对js/css/jpg/gif等静态资源的访问就会得不到。

解决方法:在web.xml里添加如下的配置

<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>

解决方法2:在spring的配置文件中添加如下一行:

<mvc:default-servlet-handler/>

注意,需要是spring3.0.5以上版本

解决方法3

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
 
 <mvc:resources mapping="/resources/**" location="/resources/" /> 
  

这个配置告诉spring 静态资源的处理方式


http://www.blogjava.net/Steven-bot/articles/361333.html

这个错误信息通常出现在使用Spring框架的Web应用程序中,特别是当使用了Spring MVC时。`DispatcherServlet.noHandlerFound` 错误表示请求的URL没有找到对应的处理器(handler)。具体来说,这个错误信息表明有一个HTTP请求发送到服务器的`/untitled30_war_exploded`路径,但是没有找到对应的处理器来处理这个请求。 这个错误通常由以下几个原因引起: 1. **URL路径配置错误**:请求的URL路径没有在Spring MVC的控制器(Controller)中定义对应的处理方法。 2. **控制器未正确扫描**:Spring容器没有扫描到对应的控制器类,导致无法找到处理请求的方法。 3. **视图解析器配置问题**:视图解析器配置不正确,导致无法找到对应的视图。 解决方法如下: 1. **检查URL路径**:确保请求的URL路径在控制器中有对应的处理方法。例如,如果请求的URL是`/untitled30_war_exploded/hello`,那么在控制器中应该有对应的`@RequestMapping`注解的方法来处理这个请求。 ```java @Controller public class HelloController { @RequestMapping("/hello") public String hello() { return "hello"; } } ``` 2. **确保控制器被扫描**:确保你的控制器类在Spring的扫描路径中,可以通过在配置类上使用`@ComponentScan`注解来扫描控制器所在的包。 ```java @Configuration @ComponentScan(basePackages = "com.example.controller") public class AppConfig { } ``` 3. **检查视图解析器配置**:确保视图解析器配置正确,能够找到对应的视图文件。 ```xml <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` 通过以上步骤,可以逐步排查并解决`DispatcherServlet.noHandlerFound`错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值