【issue】完美解决SpringMVC中静态资源无法找到(No mapping found for HTTP request with URI)问题

今天遇到一个比较新奇的问题,但是也应该是使用spring MVC框架时由于疏忽经常会遇到的一个,解决后写出来和大家分享分享。

问题描述:项目正常启动,可以访问页面,但是无法找到静态资源文件,如css,js等文件资源。

浏览器控制台报错信息:

idea后台报错信息:

二月 07, 2017 11:27:35 上午 org.springframework.web.servlet.PageNotFound noHandlerFound
警告: No mapping found for HTTP request with URI [/myboss-web/js/jquery-1.8.3.js] in DispatcherServlet with name 'mvc-dispatcher'
二月 07, 2017 11:27:35 上午 org.springframework.web.servlet.PageNotFound noHandlerFound
警告: No mapping found for HTTP request with URI [/myboss-web/js/fun.base.js] in DispatcherServlet with name 'mvc-dispatcher'

因为项目使用了spring security,之前我一度怀疑是不是没有给静态文件设置访问权限,后来确认了已经设置了访问静态资源无需权限认证,也检查了mvc拦截器的配置信息,没发现什么明显异常,之后就纳闷了。去网上查阅了一些资料后发现,确实是mvc拦截器在作祟。


我之前的拦截器配置信息:

<!--配置拦截器-->
  <servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:/spring/applicationContext-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

从配置上分析,如此配置会把所有的请求都会进行拦截,交给spring去处理。而spring所有请求的URL都是在controller中使用注解@RequestMapping标明,所以这样的情况下访问静态资源是访问不到的。

以下给出三种解决方案,自行选择使用

方法1:简单粗暴地告诉服务器,这些资源不需要拦截!

直接在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>*.xml</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.swf</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.zip</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>*.png</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
  </servlet-mapping>

如果你嫌这样太麻烦,太low的话,请移步下面两种方法!

方法2:直接告诉spring,这个你就得这么做!

在MVC配置文件中添加资源文件映射。  

<resources mapping="/resources/**" location="/resources/" />
<resources mapping="/images/**" location="/images/" />
<resources mapping="/js/**" location="/js/" />


注解: 
mapping:映射     
location:本地资源路径,注意必须是webapp根目录下的路径。          
两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)
可能有筒子看完这个后会回来说:“博主写的啥玩意,照着写了还是没用,我绝对没敲错字!我还是复制过去的!!!”
如果真的有这样的哥们,别告诉我,否则我怕我会忍不住会拿出我的30米大刀!
请自行更换路径!!!
当然这个还有一个需要注意的地方:
配置的location一定要是web-app根目录下才行,如果你将资源目录,放置到web-app/WEB-INF下面的话,恭喜你,访问失败!404 NOT FOUND


方法3:全部使用默认的,也别操啥心了

<mvc:default-servlet-handler/>

比较懒得童鞋可以直接在MVC配置文件加上这么一句,这个确实方便,但是弊端就是他会把你发出的请求全部按照默认的处理了!
如果直接贴出这一句,我怕又有筒子会说怎么报错了,mvc标签报错了!
哥们,你要是这种错误都解决不了,你也先别看这博文了,先去看看什么叫namespace吧!还来得及治疗!
--------------------- 
作者:AProMonkey 
来源:CSDN 
原文:https://blog.csdn.net/jdjdndhj/article/details/54907891 
版权声明:本文为博主原创文章,转载请附上博文链接!

No mapping found for HTTP request with URI [/spmvctst/sigup.do] in DispatcherServlet with name 'springMVC'表示在DispatcherServlet找不到对应的URI映射。这个错误常见于Spring MVC框架。根据引用和引用的警告信息,这个错误可能是因为没有在DispatcherServlet的配置文件正确配置URI映射的处理器(Handler)。具体来说,可能是没有在配置文件添加对应的@Controller或@RequestMapping注解的类,或者没有在配置文件配置<mvc:annotation-driven/>和<context:component-scan/>标签。引用提到了这两个标签的作用,其<context:component-scan/>用于扫描@Controller注解的类,而<mvc:annotation-driven/>用于启动Spring MVC的注解功能。 为解决这个问题,你可以按照以下步骤进行操作: 1. 确认你的DispatcherServlet配置文件是否正确配置了@Controller注解的类。确保这些类被正确扫描到。可以使用<context:component-scan/>标签指定要扫描的包。 2. 确认你的DispatcherServlet配置文件是否配置了<mvc:annotation-driven/>标签。这个标签用于启动Spring MVC的注解功能,确保HandlerMappingHandlerAdapter和ExceptionResolver等处理器被正确注册。 3. 如果上述步骤都正确配置了,但仍然出现错误,请检查你的URI是否与配置文件URI映射匹配。确认是否存在拼写错误或者路径错误。 通过以上步骤,可以解决"No mapping found for HTTP request"的错误,确保DispatcherServlet能够找到正确的URI映射并处理请求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [No mapping found for HTTP request with URI [/.../...] in DispatcherServlet](https://blog.csdn.net/qq_45592174/article/details/112914031)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [No mapping found for HTTP request with URI [/user/login.do] in DispatcherServlet with name 'dispatch](https://blog.csdn.net/Drrier/article/details/79892351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值