JSP中的include的两种用法
1.两种用法
说明标签:<%@ include file=”relativeURI”%>
动作标签:<jsp:include page=”relativeURI” flush=”true” />
2.用法区别
include指令通过file属性来指定被包含的页面。<jsp:include>动作通过page属性来指定被包含的页面。
(1)静态包含: 使用include指令,被包含的文件被原封不动的插入到包含页面中使用该指令的位置,然后JSP编译器再对这个合成的文件进行编译,所以在一个JSP页面中使用include指令来包含另一个JSP页面,最终编译后的文件只有一个。
(2)动态包含: 使用<jsp:include>动作包含文件时,当该动作标识执行后,JSP程序会将请求转发到(注意不是重定向)被包含页面,并将执行结果输出到浏览器中,然后返回页面继续执行后面的代码,以为web容器执行的两个文件,所以JSP编译器会分别对这两个文件进行编译。
(3)静态包含时被包含的jsp页面要去掉
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>"> <%--base标记是一个基链接标记,是一个单标记。用以改变文件中所有连结标记的参数内定值。它只能应用于标记<head>与</head>之间。你网页上的所有相对路径在链接时都将在前面加上基链接指向的地址。 --%>
如(1)中所说最终编译后的文件只有一个,所以不能重复定义path、basePath。
而动态包含则是分开编译两个jsp,所有不会出现重复定义的情况,即不需要去掉上述代码,显然去掉了则会报错。
注意:(使用<jsp:include>动作通常是包含那些经常改动的文件,因为被包含的文件改动不会影响到包含文件,因此不需要对包含文件进行重新编译)
3.如何使include页面携带入参数
<jsp:include page="{relativeURL | <%= expression%>}" flush="true" />
or
<jsp:include page="{relativeURL | <%= expression %>}" flush="true" >
<jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />+
</jsp:include>
属性 page="{relativeURL | <%= expression %>}" 参数为一相对路径,或者是代表相对路径的表达式。
<jsp:param>子句能让你传递一个或多个参数给动态文件,你能在一个页面中使用多个<jsp:param>来传递多个参数。
属性flush 设置为true会清理缓存数据 缺省值为 false,( 在同一个JSP中,如果不断地 include 自己的(源文件),在逻辑上会形成死循环。若默认情况下,服务器会等待该文件被读到地段,然后才输出到客户端,并且销毁该次访问的 request 和 response。而当 flush 属性赋值为 true 时,在缓存积累了一定的数据时,服务器会先提供一部分数据给浏览器,并等待后序内容。由此,再简单页面中,该属性不纳入考虑,而在页面包含大量数据时,为缩短客户端延迟,可将一部分内容先行输出,该属性在 servlet 中也有对应的应用。)