<jsp:include page = ... > 和 <%@ include file = ... > 有什么区别?

  • 本文关键字:include 区别 page jsp file java jsp
  • 更新时间 :
  • 英文 :


这两个标签都包含了从一个页面到另一个页面的内容

那么这两个标签之间的确切区别是什么呢?

在一段可重用的代码中,我使用指令 <%@include file="reuse.html"%>,在第二段代码中,我使用标准操作 <jsp:include page="reuse.html" />

让可重用文件中的代码如下:

<html>
<head>
    <title>reusable</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <img src="candle.gif" height="100" width="50"/> <br />
    <p><b>As the candle burns,so do I</b></p>
</body>
在运行这两个JSP文件之后,您将看到相同的输出,并考虑指令操作标记之间是否有任何区别。但是,如果您查看这两个JSP文件生成的servlet,您将看到差异。 下面是当你使用指令: 时你会看到的结果
out.write("<html>rn");
out.write("    <head>rn");
out.write("        <title>reusable</title>rn");
out.write("        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">rn");
out.write("    </head>rn");
out.write("    <body>rn");
out.write("        <img src="candle.gif" height="100" width="50"/> <br />rn");
out.write("        <p><b>As the candle burns,so do I</b></p>rn");
out.write("    </body>rn");
out.write("</html>rn");
 
这是您将在第二个JSP文件中看到的用于标准操作的内容:
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "reusable.html", out, false);

那么现在你知道include指令在翻译时插入reuse.html 的源代码,但是动作标签在运行时插入reuse.html 的响应

仔细想想,每个动作标记 (<jsp:include>)都会对性能造成额外的影响。这意味着您可以保证始终拥有最新的内容,但这会增加性能成本。

差别很大。如前所述,<%@ include是一个静态包含,<jsp:include是一个动态包含。可以把它看作宏和函数调用之间的区别(如果您熟悉这些术语)。另一种说法是,静态包含与将包含的文件("代码")的确切内容复制粘贴到<%@ include语句的位置(这正是JSP编译器将要做的事情)完全相同。

动态包含将发出请求(使用请求调度程序),该请求将执行指定的页面,然后将该页的输出包含在调用页面的输出中,以代替<jsp:include语句。

这里最大的区别是,对于动态包含,被包含的页面将在它自己的pageContext中执行。由于这是一个请求,所以您可以将参数发送到页面,就像您可以将参数与任何其他请求一起发送一样。另一方面,静态包含只是在调用页的上下文中执行的一段代码。如果静态地包含同一个文件多次,那么该文件中的代码将存在于调用页面的多个位置,例如

<%
int i = 0;
%>

会产生编译错误(因为同一个变量不能声明多次)。

jGuru:

<%@include file="abc.jsp"%>指令的作用类似于c "#include",拉入包含的文件的文本并编译它,就好像它是包含文件的一部分。包含的文件可以是任何类型(包括HTML或文本)。

jsp:include page="abc.jsp">标记将文件编译为单独的JSP文件,并在编译后的JSP中嵌入对它的调用。

一些JSP引擎支持非标准标记<!--#include file="data.inc"--> (NCSA-,或. shhtml风格)和<%@ vinclude="data.inc" %> (jrun风格),但是它们没有在JSP规范,因此不能依赖。

请参阅JSP FAQ中的这个问题。

1)何时使用包括指令 ?

为了防止在web应用的多个jsp中重复相同的输出逻辑,使用了include机制。,为了提高表示逻辑的可重用性,使用了include指令

  <%@ include file="abc.jsp" %>

当JSP引擎接收到上述指令时,它将检索abc.jsp的源代码,并将其复制到当前JSP中。复制完成后,为当前页执行翻译

简单地说它是静态指令的jsp引擎ie。,"abc.jsp"的整个源代码被复制到当前页面

2)何时使用包含动作 ?

include标记不将被包含页的源代码包含到当前页中,而是将被包含页在运行时生成的输出包含到当前页响应

include标签功能类似于servlet编程中请求调度程序的include机制

include标签是对JSP引擎的运行时指令。,不是将整个代码复制到当前页面,而是从当前页面

对"abc.jsp"进行方法调用。

Java Revisited

  1. include指令包含的资源在jsp转换时加载,而include动作包含的资源在请求时加载。
  2. 在包含指令的情况下,包含资源的任何更改在jsp文件再次编译之前都是不可见的。而在include操作的情况下,所包含的资源的任何更改将在下一个请求中可见。
  3. Include指令是静态导入,而Include动作是动态导入
  4. Include指令使用file属性来指定要包含的资源,而Include动作使用page属性来达到相同的目的。

一个是静态导入(<%=@ include…>"),另一个是动态导入(jsp:include)。比如,它会影响到你要为包含文件指定的路径。在Google上搜索一下就会知道更多。

最新更新