JSP 包含指令、jsp:include 动作、相对路径与绝对路径

Mat*_* Mc 2 java jsp servlets path jspinclude

我正在我的基于 JSP 的 web 应用程序中做一些基本的模板。例如,我想要将标准页眉和页脚(基本 HTML)拉入我的每个 JSP 中。

我的内容 JSP 位于/WEB-INF/jsp/home.jsp,并且我的模板 JSP 位于/WEB-INF/jsp/template/,例如/WEB-INF/jsp/template/Body-Footer.jsp.

所以现在,在 内home.jsp,我想拉入我的模板文件。首先,我尝试以下jsp:include操作:

<jsp:include page="template/Body-Footer.jsp"></jsp:include>
Run Code Online (Sandbox Code Playgroud)

它产生错误 javax.servlet.ServletException: File &quot;/template/Body-Footer.jsp&quot; not found

对我来说很奇怪,考虑到 Eclipse 说路径是有效的。

好的,那么我切换到包含指令:

<%@ include file="template/Body-Footer.jsp" %>
Run Code Online (Sandbox Code Playgroud)

这工作得很好,拉入我的页脚 HTML。

但为什么不起作用jsp:include?经过一些实验,我发现放入绝对路径确实可以让它工作:

<jsp:include page="/WEB-INF/jsp/template/Body-Footer.jsp"></jsp:include>
Run Code Online (Sandbox Code Playgroud)

现在它工作正常,没有错误。

所以这是我的问题:为什么?为什么我(显然)需要在操作中使用绝对路径jsp:include,而不是在 include 指令中使用?

dev*_*wjk 5

/WEB-INF/jsp/template/Body-Footer.jsp不是绝对路径。它也是一个相对路径。问题是这template/Body-Footer.jsp是一个不完整的相对路径,而另一个是完整的。也就是说,路径是相对于您的应用程序路径的。由于/WEB-INF/在您的应用程序路径下,您必须包含它。绝对路径意味着像C:/program files/tomcat/webapps/yourapp/WEB-INF/jsp/template/Body-Footer.jsp