SpringMVC中静态资源无法找到(No mapping found for HTTP request with URI)的四种解决方式
2018-01-15 23:16
573 查看
今天写程序遇到一个问题,及jsp页面加载静态文件加载不进来。
页面这样:
其中,
总是出现如下错误:
文字描述为:
No mapping found for HTTP request with URI [/springDemo/js/echarts.js] in DispatcherServlet with name ‘springDispatcherServlet’
即找不到资源,servlet映射不到这样的url请求。
网页变成这样,只有body中div的显示出来,却没有内容。
后来看了大神的文章《完美解决SpringMVC中静态资源无法找到(No mapping found for HTTP request with URI)问题》解决了问题,并知道了原理。
原来web.xml一开始进行servlet-mapping映射配置时候,设置如下。
servlet-mapping 设置的过滤方式为所有,确实是mvc拦截器在作祟。
从配置上分析,如此配置会把所有的请求都会进行拦截,交给spring去处理。而spring所有请求的URL都是在controller中使用注解@RequestMapping标明,所以这样的情况下访问静态资源是访问不到的。
以下给出三种解决方案,自行选择使用
方法1:简单粗暴地告诉服务器,这些资源不需要拦截!
直接在web.xml文件中进行配置,如下:
如果你嫌这样太麻烦,太麻烦、看得眼花缭乱的话,请移步下面两种方法!
方法2:直接告诉spring,这个你就得这么做!
在MVC配置文件中添加资源文件映射。
注解:
mapping:映射
location:本地资源路径,注意必须是webapp根目录下的路径。
两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)
可能有筒子看完这个后会回来说:“博主写的啥玩意,照着写了还是没用,我绝对没敲错字!我还是复制过去的!!!”
如果真的有这样的哥们,别告诉我,否则我怕我会忍不住会拿出我的30米大刀!
请自行更换路径!!!
当然这个还有一个需要注意的地方:
配置的location一定要是web-app根目录下才行,如果你将资源目录,放置到web-app/WEB-INF下面的话,恭喜你,访问失败!404 NOT FOUND
方法3:全部使用默认的,也别操啥心了
比较懒得童鞋可以直接在MVC配置文件加上这么一句,这个确实方便,但是弊端就是他会把你发出的请求全部按照默认的处理了!
如果直接贴出这一句,我怕又有筒子会说怎么报错了,mvc标签报错了!
哥们,你要是这种错误都解决不了,你也先别看这博文了,先去看看什么叫namespace吧!还来得及治疗!
方法4:
直接在web.xml更换过滤器的过滤方式:
更改为:
我用了第四种方法,重新开启服务器,运行后页面正常。
页面这样:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="../js/echarts.js"> alert('hello'); </script> <title>跳转成功页面</title> </head> <body> <h2>Echars Demo Page</h2> <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="background:#CCC;width: 600px;height:400px;" ></div> <script type="text/javascript"> // 基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('main')); //alert(typeof(myChart)); // 指定图表的配置项和数据 var option = { title: { text: 'ECharts 写入网页框架' }, tooltip: {}, legend: { data:['指标'] }, xAxis: { data: ["南航","东航","国航","春秋","澳门","首都"] }, yAxis: {}, series: [{ name: '值机数', type: 'bar', data: [50, 200, 360, 100, 100, 200] }] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); </script> </body> </html>
其中,
<script type="text/javascript" src="../js/echarts.js">需要加载一个静态js文件。
总是出现如下错误:
文字描述为:
No mapping found for HTTP request with URI [/springDemo/js/echarts.js] in DispatcherServlet with name ‘springDispatcherServlet’
即找不到资源,servlet映射不到这样的url请求。
网页变成这样,只有body中div的显示出来,却没有内容。
后来看了大神的文章《完美解决SpringMVC中静态资源无法找到(No mapping found for HTTP request with URI)问题》解决了问题,并知道了原理。
原来web.xml一开始进行servlet-mapping映射配置时候,设置如下。
<servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
servlet-mapping 设置的过滤方式为所有,确实是mvc拦截器在作祟。
从配置上分析,如此配置会把所有的请求都会进行拦截,交给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>
如果你嫌这样太麻烦,太麻烦、看得眼花缭乱的话,请移步下面两种方法!
方法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吧!还来得及治疗!
方法4:
直接在web.xml更换过滤器的过滤方式:
<servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
更改为:
<servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- Map all requests to the DispatcherServlet for handling --> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
我用了第四种方法,重新开启服务器,运行后页面正常。
相关文章推荐
- 完美解决SpringMVC中静态资源无法找到(No mapping found for HTTP request with URI)问题
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- SpringMVC资源无法找到(No mapping found for HTTP request with URI)问题解决
- 【Spring】Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决(转)
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决--转载
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决