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

简介: 今天遇到一个比较新奇的问题,但是也应该是使用spring MVC框架时由于疏忽经常会遇到的一个,解决后写出来和大家分享分享。 问题描述:项目正常启动,可以访问页面,但是无法找到静态资源文件,如css,js等文件资源。

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

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


浏览器控制台报错信息:

idea后台报错信息:

[java] view plain copy

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

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

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

[html] view plain copy

  1. <servlet>
  2.   <servlet-name>mvc-dispatcher</servlet-name>
  3.   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  4.   <init-param>
  5.     <param-name>contextConfigLocation</param-name>
  6.     <param-value>classpath*:/spring/applicationContext-mvc.xml</param-value>
  7.   </init-param>
  8.   <load-on-startup>1</load-on-startup>
  9. </servlet>
  10. <servlet-mapping>
  11.   <servlet-name>mvc-dispatcher</servlet-name>
  12.   <url-pattern>/</url-pattern>
  13. </servlet-mapping>

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

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

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

直接在web.xml文件中进行配置,如下:

[html] view plain copy

  1. <servlet-mapping>
  2.    <servlet-name>default</servlet-name>
  3.    <url-pattern>*.css</url-pattern>
  4.  </servlet-mapping>
  5.  <servlet-mapping>
  6.    <servlet-name>default</servlet-name>
  7.    <url-pattern>*.xml</url-pattern>
  8.  </servlet-mapping>
  9.  <servlet-mapping>
  10.    <servlet-name>default</servlet-name>
  11.    <url-pattern>*.swf</url-pattern>
  12.  </servlet-mapping>
  13.  <servlet-mapping>
  14.    <servlet-name>default</servlet-name>
  15.    <url-pattern>*.zip</url-pattern>
  16.  </servlet-mapping>
  17.  <servlet-mapping>
  18.    <servlet-name>default</servlet-name>
  19.    <url-pattern>*.gif</url-pattern>
  20.  </servlet-mapping>
  21.  <servlet-mapping>
  22.    <servlet-name>default</servlet-name>
  23.    <url-pattern>*.jpg</url-pattern>
  24.  </servlet-mapping>
  25.  <servlet-mapping>
  26.    <servlet-name>default</servlet-name>
  27.    <url-pattern>*.png</url-pattern>
  28.  </servlet-mapping>
  29.  <servlet-mapping>
  30.    <servlet-name>default</servlet-name>
  31.    <url-pattern>*.js</url-pattern>
  32.  </servlet-mapping>

 

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

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

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

  
  
  

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

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

[html] view plain copy

  1. <mvc:default-servlet-handler/>

比较懒得童鞋可以直接在MVC配置文件加上这么一句,这个确实方便,但是弊端就是他会把你发出的请求全部按照默认的处理了!
如果直接贴出这一句,我怕又有筒子会说怎么报错了,mvc标签报错了!
哥们,你要是这种错误都解决不了,你也先别看这博文了,先去看看什么叫namespace吧!还来得及治疗!

[html] view plain copy

  1. <pre code_snippet_id="2167768" snippet_file_name="blog_20170207_4_9118558" style="margin-top: 0px; margin-bottom: 0px; margin-left: 22px; white-space: pre-wrap; word-wrap: break-word; line-height: 18px; font-family: 'Courier New' !important;"></pre>
  2. <pre></pre>
  3. <pre></pre>
相关文章
|
3月前
|
Java Shell API
【Azure 环境】Update-MgEntitlementManagementAccessPackageAssignmentPolicy 命令执行时候遇见的 No HTTP Resource was found 问题分析
【Azure 环境】Update-MgEntitlementManagementAccessPackageAssignmentPolicy 命令执行时候遇见的 No HTTP Resource was found 问题分析
|
Java
The superclass “javax.servlet.http.HttpServlet“ was not found on the Java Build Path的解决方案
The superclass “javax.servlet.http.HttpServlet“ was not found on the Java Build Path的解决方案
472 0
The superclass “javax.servlet.http.HttpServlet“ was not found on the Java Build Path的解决方案
java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must b
java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must b
248 0
|
6月前
|
监控 搜索推荐 定位技术
HTTP状态码:如何修复 404 Not Found错误?
互联网上各种类型的网站非常多,无论用户还是网站运营者不可避免的会遇到404 Not Found错误,如果遇到404错误,我们应该如何解决呢?
129 1
|
缓存 Linux 开发工具
centos 7 yum安装失败(HTTP Error 404 - Not Found)的解决方法
centos 7 yum安装失败(HTTP Error 404 - Not Found)的解决方法
2486 0
|
移动开发 缓存 前端开发
前端性能优化 - 静态资源合并与压缩减少HTTP请求
这是一个基于.Net Core开发的,实现压缩Css、Javascript、Html资源的压缩、合并功能的组件。通过这个组件我们就可以实现静态资源的捆绑,实现对js、css、less、scss等静态资源的自动打包捆绑处理。
318 0
前端性能优化 - 静态资源合并与压缩减少HTTP请求
|
Java 应用服务中间件 Apache
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path类似问题简单解决方案
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path类似问题简单解决方案
501 0
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path类似问题简单解决方案
|
Java Maven
maven jsp报错javax.servlet.http.HttpServlet“ was not found on the Java Build Path
maven jsp报错javax.servlet.http.HttpServlet“ was not found on the Java Build Path
242 0
|
Java 应用服务中间件 Apache
springMvc14-the superclass “javax.servlet.http.HttpServlet” was not found
springMvc14-the superclass “javax.servlet.http.HttpServlet” was not found
138 0
|
XML JavaScript 前端开发
No mapping found for HTTP request with URI [/zjic] in DispatcherServlet
最近做项目 出现了前台访问出现404 控制台出现 No mapping found for HTTP request with URI [/zjic] in DispatcherServlet
287 0
No mapping found for HTTP request with URI [/zjic] in DispatcherServlet