Springmvc创建后无法访问WEB-INF下面的静态文件
出现这种情况一般是一下四种情况:
1.请检查web.xml文件,是否把静态资源拦截了:
1、匹配顺序
该标签处理客户端请求的顺序为:
(1)完全匹配
<url-pattern>/test/userList.action</url-pattern>
完全匹配就是等值匹配,它是最先被匹配到的客户端请求。
(2)路径匹配
<url-pattern>/*</url-pattern> 匹配根路径下的全部请求
路径匹配类似于模糊匹配,对于/list、listInfo.do、checkInfo.action、index.jsp、abc.css、my.js等等url请求,都可以被匹配到。这种匹配的顺序排在完全匹配后面。
(3)扩展名匹配
<url-pattern>*.action</url-pattern>匹配全部action 结尾的请求
<url-pattern>*.css</url-pattern> 匹配全部 css结尾的请求
<url-pattern>*.js</url-pattern> 匹配全部 js结尾的请求
<url-pattern>*</url-pattern> 不能用 * ,否则报错
说明:这种匹配匹配在开发中用的比较多,但不能使用*代替,否则会报错。
结论:容器会首先查找完全匹配,如果找不到,再查找目录匹配,如果也找不到,就查找扩展名匹配。
2、“/” 与 “/*” 的区别
(1)<url-pattern>/</url-pattern>
会匹配到 /toIndex 这种类型的 url ,不会匹配到模式为 *.jsp 这样的后缀型 url。
(2)<url-pattern>/*</url-pattern>
会匹配所有路径型的和后缀型的url。
2.请检查springnvc.xml配置文件 需要引入必要的配置信息
a.注册mvc驱动,让容器创建HttpMessageConverters-
<mvc:annotation-driven/>
<mvc:resources mapping="/js/**" location="/WEB-INF/js/"/> // location 指文件存放的位置 mapping指文件映射(访问路径)
b. 使用默认servlet响应静态文件-
<mvc:default-servlet-handler/>
以上两种方法不要同时使用,推荐使用第一种。
3,检查对应的Jsp文件是否缺少头文件。
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
这个语句是用来拼接当前网页的相对路径的。
<base herf="...">从来表明当前页面的相对路径所使用的根路径,也就是项目名称
比如,页面内部有一个连接,完整的路径应该是 http://localhost:8080/Test/user/user_info.jsp
其中http://server/是服务器的基本路径,Test是当前应用程序的名字,那么,我的根路径应该是那么http://localhost:80/Test/。
<base href="<%=basePath%>">
用这个base,服务器就可以动态的将指定路径和页面的相对路径拼装起来,形成完整的路径。
1.request.getSchema();可以返回当前页面所使用的协议,就是"http"
2.request.getServerName();返回当前页面所在服务器的名字,就是上面例子中的"localhost"
3.request.getServerPort();返回当前页面所在服务器的端口号,就是上面例子中的"8080"
4.request.getContextPath();返回当前页面所在的应用的名字
此时文件路劲为 <script type="text/javascript" src="<%=basePath%>js/jquery-3.4.1.js"></script>
4.文件的相对、绝对路径,文件名、路径等位置不对引起的。
等项目启动完毕,去访问对应的资源看能否获取,有时候在控制台不打印错误信息,我们也要去浏览器F12看看错误信息。
资源能获取.