当前位置: 首页 > 知识库问答 >
问题:

JSP include指令,JSP:include动作,相对与绝对路径

漆雕欣德
2023-03-14

我正在基于JSP的webapp中进行一些基本的模板制作。例如,我希望有一个标准的页眉和页脚(基本HTML),我把它拉到我的每个JSP中。

我的内容JSP位于www.com.cn/WEB-INF/JSP/home。jsp,我在WEB-INF/jsp/template/上有模板jsp,例如WEB-INF/jsp/template/Body Footer。jsp。

现在,在家里。jsp,我想拉入我的模板文件。首先,我尝试jsp:include操作:

<jsp:include page="template/Body-Footer.jsp"></jsp:include>

它生成错误javax.servlet.ServletException: File

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

好的,然后我切换到包含指令:

<%@ include file="template/Body-Footer.jsp" %>

这工作得很好,拉入我的页脚超文本标记语言。

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

<jsp:include page="/WEB-INF/jsp/template/Body-Footer.jsp"></jsp:include>

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

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


共有3个答案

白昊乾
2023-03-14

我阅读了JSP 2.0规范,在这里:

 Relative URL Specifications

 * A context-relative path is a path that starts with a slash (/).
 It is to be interpreted as relative to the application to which
 the JSP page or tag file belongs. That is, its ServletContext
 object provides the base context URL.

 * A page relative path is a path that does not start with a
 slash (/). It is to be in- terpreted as relative to the current
 JSP page, or the current JSP file or tag file, depending on where
 the path is being used.

目前javax.servlet.ServletContext.getRealPath("/WEB-INF/test/test.jsp")出于安全原因为空。

假设上下文相对路径是来自战争根的路径。

鲜于岳
2023-03-14

为什么?jsp:include是一个运行时指令,不同于

请参阅有关使用JSP:include的:JSP性能的更多信息

底线-指令以不同的文件夹为基础运行。

顺便说一句,如果您想遵循官方建议,JSP页面应该位于WEB-INF文件夹之外:

JavaEE 6教程-Web模块结构

岳浩
2023-03-14

/WEB-INF/jsp/template/Body-Footer。jsp不是绝对路径。这也是一条相对路径。问题是模板/正文页脚。jsp是一个不完整的相对路径,而另一个是完整的。也就是说,路径是相对于应用程序路径的。由于应用程序路径下有WEB-INF,因此必须将其包括在内。绝对路径的意思类似于程序文件/tomcat/webapps/yourapp/WEB-INF/jsp/template/Body-Footer。jsp

 类似资料:
  • 问题内容: 如果使用绝对路径,则无法将整个目录移动到新位置。如果使用相对路径,则无法将单个文件移动到新位置。 这里有什么解决方案?您是否设置了一个包含根路径并从那里开始的配置文件?还是您有类似的规则:永不移动文件? 我在某些项目中看到人们使用dirname( FILE )。我的意思是,为什么不简单地将其删除,因为目录名还是相对的(取决于文件所在的位置)? 问题答案: 您应该使用一个配置文件,该配置

  • 我有以下问题。当我想在我的Gradle依赖项中使用一个本地jar时。 如果我只是补充一句: 不管用. C:\users\kai\androidStudioProjects\projecta\app\src\main\Java\de\xyz\xxx\projecta\baseActivity.Java:21:错误:包com.pushlink.android不存在导入com.pushlink.andr

  • 主要内容:什么是当前工作目录,什么是绝对路径与相对路径,Python处理绝对路径和相对路径在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。 什么是当前工作目录 每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。 注意,虽然文件夹是目录的更新的名称,但当前工作目录(或当前目录)是标准术语,没有当前工作文件夹这种说法。 在 Python 中,利用 os.getcwd() 函数可以取得当前工作路径的字

  • 在 Linux 中,简单的理解一个文件的路径,指的就是该文件存放的位置,例如,在《 Linux文件系统的层次结构》中提到的 /home/cat 就表示的是 cat 文件所存放的位置。只要我们告诉 Linux 系统某个文件存放的准确位置,那么它就可以找到这个文件。 指明一个文件存放的位置,有 2 种方法,分别是使用 绝对路径和 相对路径。 我们知道,Linux 系统中所有的文件(目录)都被组织成以根

  • 我想引用一个固定位置的jar文件供多个可执行jar使用,而不是在每个可执行文件中包含该jar。我有以下设置工作良好 但是我想用绝对路径来处理commons-math3-3.6.1.jar,以便testgradle.jar这样的可执行JAR可以从它们所在的任何目录中使用它。但是,如果我更改testgradle.jar manifest以包括完整路径: 则命令: 从testgradle/build/l

  • 问题内容: 我有文件A的绝对路径。 我有一个从文件A的目录到文件B的相对路径。此路径可以并且将使用“ ..”以任意复杂的方式向上移动目录结构。 范例A: 示例B: 我如何结合这两者以获得 最简单的 绝对路径到文件B? 问题答案: 如果我的问题正确,那么您可以执行以下操作: