Suh*_*pta 104
在一个可重复使用的代码中,我使用了该指令<%@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>
Run Code Online (Sandbox Code Playgroud)
运行两个JSP文件后,您会看到相同的输出,并认为指令和标记之间是否存在任何差异.但是如果你看一下servlet
两个JSP文件的生成,你会发现它们之间存在差异.这是你在使用时会看到的内容directive
:
out.write("<html>\r\n");
out.write(" <head>\r\n");
out.write(" <title>reusable</title>\r\n");
out.write(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
out.write(" </head>\r\n");
out.write(" <body>\r\n");
out.write(" <img src=\"candle.gif\" height=\"100\" width=\"50\"/> <br />\r\n");
out.write(" <p><b>As the candle burns,so do I</b></p>\r\n");
out.write(" </body>\r\n");
out.write("</html>\r\n");
Run Code Online (Sandbox Code Playgroud)
这就是你将在第二个JSP文件中看到的used标签:
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "reusable.html", out, false);
Run Code Online (Sandbox Code Playgroud)
所以现在您知道include指令reuse.html
在转换时插入源,但action标记在运行时插入reuse.html的响应.
如果你考虑一下,每个动作标签(jsp:include file
)都会有额外的性能损失.这意味着您可以保证始终拥有最新内容,但这会增加性能成本.
pap*_*pap 54
这是一个巨大的差异.如前所述,<%@ include
是静态包含,<jsp:include
是动态包含.可以将其视为宏和函数调用之间的区别(如果您熟悉这些术语).放置它的另一种方法是,静态包含与在<%@ include
语句位置复制粘贴所包含文件("代码")的确切内容完全相同(这正是JSP编译器将要执行的操作.
动态包含将发出一个请求(使用请求调度程序),该请求将执行指示的页面,然后在调用页面的输出中包含页面的输出,代替<jsp:include
语句.
这里的最大区别是,使用动态包含,包含的页面将在它自己的pageContext中执行.由于这是一个请求,您可以将参数发送到页面,就像发送参数和任何其他请求一样.另一方面,静态包含只是一段代码,它将在调用页面的上下文中执行.如果您多次静态包含同一个文件,则该文件中的代码将存在于调用页面上的多个位置,如下所示
<%
int i = 0;
%>
Run Code Online (Sandbox Code Playgroud)
会产生编译错误(因为同一个变量不能多次声明).
Woj*_*zyk 37
该
<%@include file="abc.jsp"%>
指令的作用类似于C"#include"
,拉入包含文件的文本并将其编译为好像它是包含文件的一部分.包含的文件可以是任何类型(包括HTML或文本).<jsp:include page ="abc.jsp">标记将文件编译为单独的JSP文件,并在编译的JSP中嵌入对它的调用.
某些JSP引擎支持非标准标记
<!--#include file="data.inc"-->
(NCSA-或.shtml-style)和<%@ vinclude="data.inc" %>
(JRun-style),但这些标记未在JSP规范中定义,因此无法依赖.另请参阅JSP FAQ中的这个问题.
Aja*_*kur 28
1)何时使用include指令?
为了防止在Web应用程序的多个jsp上重复相同的输出逻辑,使用包含机制,即,促进表示逻辑的重用性包括使用指令
<%@ include file="abc.jsp" %>
Run Code Online (Sandbox Code Playgroud)
当jsp引擎收到上述指令时,它会检索abc.jsp的源代码,并在当前的jsp中复制相同的内联.在复制后,对当前页面执行翻译
简单地说它是对jsp引擎的静态指令即,"abc.jsp"的整个源代码被复制到当前页面
2)何时使用包含动作?
include标签不包括当前页面中包含的页面的源代码,而是包含页面在运行时生成的输出包含在当前页面响应中
include标记功能类似于servlet编程请求调度程序的包含机制
include标签是对jsp引擎的运行时指令,即,将整个代码复制到当前页面,从当前页面调用"abc.jsp"方法
归档时间: |
|
查看次数: |
218178 次 |
最近记录: |