一、JSP指令元素-include:
在JSP页面开发中,有时候为了减少代码的冗余,可以把在JSP开发中经常需要调用的功能代码封装成一个独立的JSP文件。其他JSP页面如果需要该部分代码,直接将其包含到当前页面即可。完成这样的操作,可以使用页面包含指令include。通常当应用程序中所有页面的某些部分(如top、down)都相同的时候,可以考虑使用该指令。
Include指令表示在当前页面中包含一个静态文件,静态包含的具体含义是指这个被包含的文件将会被完整地插入到原来的主JSP文件中去,这个由主JSP文件包含的文件可以是JSP文件、HTML文件、文本文件或者只是一段Java代码等。(当在一个JSP文件中引入另一个JSP文件时,可能会出现错误,原因是两个JSP页面中都进行了页面编码格式的设置,将被包含文件中的page指令去掉即可)其语法格式为:
<%@include file=”URL”%>
其中file表示要包含的文件,URL表示引入文件的相对路径或绝对路径。
include指令在翻译阶段(将JSP转换成Servlet的阶段)会读入指定的页面中的内容,并将这些内容和原来的页面融合起来。在融合过程中,引入的页面只是将普通文本进行融合,并不对动态内容求值,融合以后的完整页面再被整体的转换为一个Servlet。这意味着主页和被引入的页面共享所有的页面作用于数据。因此,如果在主页面声明了一个变量,而在某个被引入的页面中也声明了一个同名的变量,那么在翻译阶段将会出现错误,因为组合后的页面无法进行编译。
二、JSP动作指令<jsp:include>:
<jsp:include>动作指令表示在当前的JSP页面中,包含静态或动态资源。前面提及的include是在JSP页面被转换成Servlet的时候引入文件,这个是在页面被请求的时候引入文件,而且被引用文件不能包含某些JSP代码(例如不能设置HTTP头)。<jsp:include>动作指令可以在当前的JSP文件包含txt文件、JSP文件、HTML文件、Servlet文件。其语法格式为:
<jsp:include page=”URL” flush=”true” />
其中URL表示引入文件的相对路径或绝对路径,flush=”true”表示是否在包含目标之前先刷新输出缓冲区,其默认值为true。
或:
<jsp:include page=”URL” flush=”true” >
<jsp:param name=”paramName” value=”paramValue” />
</jsp:include>
其中<jsp:param>子句表示用来传递一个或多个参数给动态文件。当然,也可以在一个页面中使用多个<jsp:param>来传递多个参数给动态文件。
三、两者之间的区别:
最主要的区别:
include指令元素是在JSP页面被转换成Servlet的时候引入文件,包含的是源代码。
<jsp:include>动作指令是在页面被请求的时候引入文件且只include运行结果。include行为使用request.getRequestDispatcher(“URI”).forward(request, response)来执行被包含文件。
四、实例测试:
date.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head>
<title>获取当前时间</title>
</head>
<body>
当前的时间是:<%= new Date()%>
</body>
</html>
date.html:
<html>
<head>
<title>静态页面</title>
</head>
<body>
这是date.html中的信息<br /><br >
</body>
</html>
incluede.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head>
<title>测试include和jsp:include</title>
</head>
<body>
使用include指令<br /><br />
<%@include file="date.html" %>
<%@include file="date.jsp" %>
<br /><br />
<hr />
使用jsp:include动作指令<br /><br />
<jsp:include page="date.html" flush="true"></jsp:include>
<jsp:include page="date.jsp" flush="true"></jsp:include>
</body>
</html>