有关JSP包含指令和JSP包含标记的内容

时间:2014-06-25 09:23:01

标签: java jsp servlets

在JSP Spec 2.1中,我找到了一个关于JSP include指令和JSP include标记的示例:

有关更复杂的夹杂物的示例,请考虑以下内容 使用四个JSP文件构建的四种情况:A.jsp,C.jsp,dir / B.jsp和dir / C.jsp:

enter image description here

我不太明白这一点,特别是第一个也是最后一个情况,为什么C.jsp在第一种情况下没有被解析为C.jsp?为什么在最后一种情况下c.jsp没有解析为dir / c.jsp?

3 个答案:

答案 0 :(得分:3)

包含指令

使用此伪指令指定包含要在转换时插入JSP页面的文本或代码的资源。

例如:

<%@ include file="/jsp/userinfopage.jsp" %>

指定资源的页面相对上下文相对路径。

有关页面相对路径和上下文相关路径的讨论,请参阅Requesting a JSP Page

注意:

  • include指令(称为静态包含)在本质上与本章后面讨论的jsp:include操作具有可比性,但jsp:include在请求时生效而不是翻译-时间。请参阅Static Includes Versus Dynamic Includes

  • include指令只能在同一个servlet上下文(应用程序)中的文件之间使用。


在JSP include指令中,路径可以相对于包含页面或绝对路径(然后它必须以/开头并且属于Web应用程序根目录。)

有关详细信息,请查看另一篇帖子here

请查看Including Content in a JSP Page

答案 1 :(得分:1)

  • 指令<%@ include> 使用已评估的<%@>指令填充>所包含JSP的评估的文本。因此,嵌套的include将根据所包含的JSP的目录进行评估。
  • 标记<jsp:include>调用所包含的jsp的已编译版本

因此,单个JSP会自行评估文本,首先触发包含评估。现在应该很清楚。

第一种情况:

  1. 评估指令 - A.jsp,包括dir / B.jsp
  2. 评估指令 - dir / B.jsp,...包括C.jsp = dir / C.jsp
  3. 为A.jsp生成java,文本为dir / B.jsp,文本来自dir / C.jsp。

答案 2 :(得分:1)

在页面转换为servlet类时执行

<%@ include file= ... >。因此,它知道文件系统的上下文。这也称为静态包含,标签是方向。

在为请求执行页面时执行

<jsp:include page= ...>。这也称为动态包含,标记是动作。这里,文件系统的上下文未知。

静态包含意味着将一大堆代码行复制到生成的最终文件中。动态包含意味着执行包含的页面,并将结果复制到生成的最终文件中。

以下是很好的消息来源: