[1] 错误现象
在做项目的时候,希望路径是以服务器的根路径为基准,所以就用到了 request.getContextPath()。
在代码中是可以按”command“键+鼠标点击进入资源的,说明路径是没有问题的。但是加载页面的时候 css 文件 和 js 文件都没有起作用。
<%--
Created by IntelliJ IDEA.
User: hedon-
Date: 2020-05-26
Time: 11:23
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>珞珈图书馆</title>
<%
pageContext.setAttribute("APP_PATH",request.getContextPath()); //以 "/"开始,不以 "/" 结束
%>
<!-- 引入 jQuery,要在引入 Bootstrap 之前 -->
<script type="text/javascript" src="${APP_PATH}/static/js/jquery-1.11.3.js"></script>
<!-- 引入 Bootstrap 的 js 文件 -->
<script type="text/javascript" src="${APP_PATH}/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
<!-- 引入 Bootstrap 的 css 文件 -->
<link href="${APP_PATH}/static/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
<!-- 引入自定义的 css 文件-->
<link href="${APP_PATH}/static/css/index.css" rel="stylesheet">
</head>
</html>
[2] 错误分析
我在网上找了很多的资料,但是都没有解决问题,于是还是决定自己瞎搞搞。
首先在打开的网页上查看源代码:
发现这里 {APP_PATH} 并没有得到解析。所以问题肯定就出在这里了。
这时候我突然想到 EL 表达式默认是会被忽略的,所以我就想会不会就是这个原因,所以才没有读到资源。
终于,问题确实是出现在这里。
[3] 解决方案
关闭对 EL 表达式的忽略,执行解析 EL 表达式。
重点是在 jsp 文件的前面加上:
<%@page isELIgnored="false" %>
如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false" %>
<html>
<head>
<meta charset="UTF-8">
<title>珞珈图书馆</title>
<%
pageContext.setAttribute("APP_PATH",request.getContextPath()); //以 "/"开始,不以 "/" 结束
%>
<!-- 引入 jQuery,要在引入 Bootstrap 之前 -->
<script type="text/javascript" src="${APP_PATH}/static/js/jquery-1.11.3.js"></script>
<!-- 引入 Bootstrap 的 js 文件 -->
<script type="text/javascript" src="${APP_PATH}/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
<!-- 引入 Bootstrap 的 css 文件 -->
<link href="${APP_PATH}/static/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
<!-- 引入自定义的 css 文件-->
<link href="${APP_PATH}/static/css/index.css" rel="stylesheet">
</head>
这样问题就解决了!
[4] 效果演示
我们在来看看源码:
可以发现这里 {APP_PATH} 被成功解析了。
Over~ 希望我的方法能帮助到你~