⼀个jsp页⾯引⼊另⼀个jsp页⾯的三种⽅式及静态引⼊和动态引
⼊的区别
转载下,
1.第⼀种:jstl  import
<c:import url="inlayingJsp.jsp"></c:import>
2. 第⼆种:jsp include指令
include指令告诉容器:复制被包含⽂件汇总的所有内容,再把它粘贴到这个⽂件中。
<%@ include file="inlayingJsp.jsp" %>
3. 第三种:jsp include动作
<jsp:include  page="inlayingJsp.jsp" flush="true"/>
注意:(1)include指令在转换时插⼊“Header.jsp”的源代码,⽽<jsp:include>动作在运⾏时插⼊“Header.jsp"的响应。
<%@include为静态包含,<%@include不论包含的是txt⽂本还是jsp⽂件,被包含的页⾯都不会从新编译。
<%@include为静态包含,包含了⼏个JSP转译成servlet时就会有⼏个 class⽂件,如果在jsp1定义了变量i同时在jsp2也定义了变量i那么你编译都会通不过的,
jsp容器会告诉你i重复定义了.
<jsp:include 为动态包含,<jsp:include 如包含jsp⽂件,这每次加载主页⾯的时候,被包含的页⾯都要重新编译。
就是说不管你包含了⼏个jsp页⾯转译成servlet时中有⼀个class⽂件
所以说对于<%@include要慎⽤!
1、什么是静态导⼊?
静态导⼊指的是,将⼀个外部⽂件嵌⼊到当前JSP⽂件中,同时解析这个页⾯的JSP语句,它会把⽬标页⾯的其他编译指令也包含进来。
include的静态导⼊指令使⽤语法:
静态导⼊使⽤范例include1.jsp:
其中error.jsp是⼀个简单的错误处理页⾯,代码如下:
复制代码代码如下:
<%@ page contentType="text/html; charset=utf-8" language="java" isErrorPage="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/D
TD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml">
<head>
<title>错误提⽰页</title>
</head>
<body>
这是⼀个错误处理页⾯</br>
</body>
</html>
在tomcat下运⾏该静态include范例后,查看⽣成的servlet类可看到如下代码段
(查看⽅式:windows下,到tomcat安装⽬录下的work⽂件夹,进⼊Catalina⽂件夹下的localhost⽂
件夹,到当前项⽬所在的⽂件夹,到org⽬录,进⼊其下的apache⽬录下的jsp⽂件夹,即可看到⼀个include1_jsp.java⽂件,这就是该 include1.jsp对应⽣成的servlet类。ps:我是把这个测试页⾯放在webDemo 下的,所以我的⽬录是\apache-tomcat- 7.0.47\work\Catalina\localhost\webDemo\org\apache\jsp)
从⽅框中即可看出静态导⼊是:包含页⾯在编译时将完全包含被包含页⾯的代码。需要指出的是,静态导⼊还会将被包含页⾯的编译指令也包含进来,如果两个页⾯的编译指令有冲突,那么页⾯就会出错。
2、什么是动态导⼊
动态导⼊是不会导⼊include页⾯的编译指令的,⽽是仅仅将被导⼊页⾯的body内容插⼊本页⾯。
动态导⼊的语法格式:
或者
flush属性⽤语指定输出缓存是否转移到被导⼊⽂件中。如果指定为true,则包含在被导⼊⽂件中,如果指定为false,则包含在原⽂件中,对于JSP1.1旧版本,只能设置为false。
对于第⼆种语法格式,则可在被导⼊页⾯中加⼊额外的请求参数。
动态导⼊范例:
我们将上⾯的include1.jsp代码静态导⼊改为动态导⼊
复制代码代码如下:
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml">
<head>
<title>静态include范例</title>
</head>
<body>
<!--使⽤include编译指定导⼊页⾯-->
jsp定义<jsp:include page="error.jsp" />
</body>
</html>
编译后查看⽣成的servlet代码,可以看到如下段:
红⾊⽅框中代码显⽰出,动态导⼊只是使⽤了⼀个include⽅法来插⼊⽬标页⾯的内容,⽽不是将⽬标页⾯完全融⼊到本页⾯中。
归纳起来,静态导⼊和动态导⼊有如下三点区别:
1、静态导⼊是将被导⼊页⾯的代码完全融⼊,两个页⾯融合成⼀个整体Servlet;⽽动态导⼊则在Servlet中使⽤include⽅法来引⼊被导⼊页⾯的内容。
2、静态导⼊时被导⼊页⾯的编译指令会起作⽤;⽽动态导⼊时被导⼊页⾯的编译指令则失去作⽤,只是插⼊被导⼊页⾯的body内容。
3、动态导⼊还可以增加额外的参数。即如下代码⽅式:
代码如下:
<jsp:include page="{relativeURL|<%=expression%>}" flush="true">
<jsp:param name="parameterName" value="parameterValue"/>
</jsp:include>