jsp静态包含和动态包含的区别:
- 动态INCLUDE 用jsp:include 动作实现。
- <jsp:include page="included.jsp"
- flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并
- 且可以带参数
- 静态INCLUDE 用include 伪码实现,定不会检查所含文件的变化,适用于包
- 含静态页面:<%@ include file="included.htm" %>
可是经本人验证这种说话是不完全正确的,至少动态<jsp:inlude>指令是可以包含动态页面的。
个人认为区别是:
1<jsp:inlude>在同一个页面中可以包含尽可能多的条数,不管这个页面中有什么内容,只要页面本身合法就行,而<%@ include>伪指令如果被包含页面有定义变量和方法的话只能包含一条。
(这个是和第二条的编译方式相一致的)
2动态包含在请求到来时编译包含页面和被包含页面,如果都是jsp页面,那么将生成俩个页面对应的class文件和java文件。而静态包含只会生成包含页面的java文件和类文件。
3所谓动态包含是指在请求包含页面的时候遇到动态包含指令将请求转到被包含页面,这时去编译被包含页面。静态包含是在请求包含页面时去编译包含页面,编译时遇到静态页面包含伪码将被包含页面的内容复制到被包含页面中进行编译。
4<jsp:inlude >指令时相对包含页面的被包含文件路径,但静态包含是相对被包含文件路径的。(这一点孙鑫老师在《java web 深入详解》中讲的很清楚)
5引用被包含页面的范围属性时动态包含的指令是与位置相关的,即在<jsp:include>指令之前引用被包含页面中设置的属性值是无效的。但是静态包含是不区分包含指令的位置的,可以在包含指令之前引用被包含页面设置的属性,是有效的。
俩者是有相同点的:
1 都可以进行交互,request范围对象中的属性包含页和被包含页之间可以交互使用。
2被包含页面中引用包含页面设置的属性时俩者都和设置包含页面中范围属性的值有关,即在包含被包含页面之前设置的范围属性才有效。
代码如下: 包含页面: index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" buffer="23kb"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>this is 'index.jsp' </title>
</head>
<body>
这是包含页面<br/>
<%--静态包含前引用被包含页面设置的属性 --%>
${name }静态包含前引用被包含页面设置的属性<br/>
<%--包含页面设置属性 --%>
<%request.setAttribute("pws","456") ;%>
<%--<%@include file="MyJsp.jsp"%>此处因为MyJsp.jsp中定义了变量,固不可以重复包含 --%>
<%-- --%><%@include file="MyJsp.jsp" %>
${name }包含静态页面之后引用属性<br/>
<%--此处没有you.jsp中没有定义变量,所以可以重复包含 --%>
${wangzhanming }<br/>
<%@include file="you.jsp" %>
<%@include file="you.jsp" %>
${wangzhanming }<br/>
<jsp:include page="MyJsp.jsp" ></jsp:include>
<jsp:include page="MyJsp.jsp" ></jsp:include>
<%request.setAttribute("pws","lyx") ;%>
<%--此处可以重复包含--%>
<jsp:include page="MyJsp.jsp" ></jsp:include>
<%@include file="you.jsp" %>
${name }<br/>
</body>
</html>
设置变量的包含页面: MyJsp.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%--定义变量 --%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>this is 'MyJsp.jsp' </title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
这是定义变量的包含页面<br/>
<%--被包含页面中设置范围属性 --%>
<%request.setAttribute("name","wzm"); %>
${name } <br>
<%--被包含页面中引用包含页面的属性 --%>
${pws }<br/>
</body>
</html>
不包含变量设置的被包含页面: you.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>this is 'you.jsp' </title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
这是不定义变量的被包含页面 <br>
<%request.setAttribute("wangzhanming","haoren"); %>
${wangzhanming }<br/>
${pws }<br/>
</body>
</html>