静态包含是在请求包含页面时去编译包含页面,编译时遇到静态页面包含伪码将被包含页面的内容复制到被包含页面中进行编译。
动态包含是指在请求包含页面的时候遇到动态包含指令将请求转到被包含页面,这时去编译被包含页面。
测试项目
静态包含
Header.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<h1>I'm Header</</h1>
Content.jsp
<hr/>
<h1>HelloWord,I'M Content</h1>
Footer.jsp
<hr>
<h1>I'M Footer</h1>
</body>
</html>
Index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ include file="/Header.jsp" %>
<%@ include file="/Content.jsp" %>
<%@ include file="/Footer.jsp" %>
运行结果:
动态包含
Index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<jsp:include page="/Header.jsp"></jsp:include>
<jsp:include page="/Content.jsp"></jsp:include>
<jsp:include page="/Footer.jsp"></jsp:include>
运行结果同静态包含
但两者生成的class文件缺不同:
静态包含:
动态包含:
通过以上说明可知,动态包含在请求到来时编译包含页面和被包含页面,如果都是jsp页面,那么将生成两个个页面对应的class文件和java文件。而静态包含只会生成包含页面的java文件和类文件。
所以,如果在动态包含的被包含页中定义相同名称的变量是不会冲突的,在静态包含中任何页面定义相同名称的变量都会冲突。