动态INCLUDE
用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态INCLUDE
用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>
========================分割线===========================================
1. 静态include的结果是把其他jsp引入当前jsp,两者合为一体
动态include的结构是两者独立,直到输出时才合并( 看看jsp生成的java文件就可以知道了)
2.正是因为这样,动态include的jsp文件独立性很强,是一个单独的jsp文件,需要使用的对象,页面设置,都必须有自己创建,当然,还好它和include它的页面的request范围是一致的.
而静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能有变量同名的冲突.而页面设置也可以借用主文件的.
=============================分割线=================================================
补充:
JSP中有两种包含语句:
1. <%@include file="head.jsp" %>
2. <jsp:include page="head.jsp" />
或者:
<jsp:include page="jieshou.jsp">
<jsp:param name="canshu" value="magci" />
</jsp:include>
两种包含的区别:
1.<%@include file="uri" %>:先包含后处理
a.不管被包含文件是静态还是动态,直接将页面中的全部内容包含进来;
b.执行时先将包含进来的内容一起处理完之后再将所有的内容发给客户端。
2.<jsp:include page="uri" />:先处理后包含
a.能自动区分被包含文件是静态还是动态;
b.如果被包含文件是静态文件,处理方式跟第1种方式一样,
如果是动态文件,则各自处理完之后把结果包含进来发给客户端。
实例:
被包含页面(inc.jsp):
<%
int i=2;
%>
<h1>inc.jsp:<%=i%></h1>
使用<%@include file="uri" %>包含:
<html>
<head>
<title>include1</title>
</head>
<body>
<%
int i=1;
%>
<%@include file="inc.jsp" %>
<h1>JSP:<%=i %></h1>
</body>
</html>
使用<jsp:include page="uri" />包含:
<html>
<head>
<title>include2</title>
</head>
<body>
<%
int i=1;
%>
<jsp:include page="inc.jsp" />
<h1>JSP:<%=i %></h1>
</body>
</html>
通过以上实例可以看出:
第一种方法出现错误:变量重复定义;
第二种方法可以得到结果。
----------------------------------------分割线-------------------------------------------------
动态include: 编译出来是两个文件, 显示的时候是 调用的关系,可以使用参数.
静态include: 编译出来是一个文件, 被include的文件内容被编译到了父文件里.不可以使用参数.
===========================分割线==================================
1语法的基本形式不同:
动态包含为<jsp:include page="included.jsp"flush="true" />
静态包含为<%@include file="included.htm" %>
2包含动作的发生时间不同:
动态包含发生请求期间
静态包含发生在页面转换期间;
3包含的内容不同:
动态包含的是页面的输出,生成的servlet代码是…include(“…jsp”,…),
静态包含的是被包含文件实际内容,生成的servlet代码是一连串的out.print加被包含文件的页面内容;
4动态包含的主页面跟被包含页面都会生成独立的servlet,
而静态包含将被包含文件插入到主页面后,只将主页面生成servlet;
5动态包含中,被包含页面不能设置试图影响主页面的响应报头或定义主页面所使用的字段和方法,而静态包含都可以;
6当被包含页面发生改变时,动态包含的主页面不需要发生改变,但静态包含的主页面会发生改变。