浅谈JSP中include指令与include动作标识的区别
JSP中主要包含三大指令,分别是page,include,taglib。本篇主要提及include指令。
include指令使用格式:<%@ include file="文件的绝对路径或相对路径"%>
file属性:指定被包含的文件,该属性不支持任何表达式,也不允许通过如下的方式来传递参数。
<%@ include file="welcome.jsp?name=Tom"%>下面用法将会抛出异常,也是不允许的:
<% String path="login.jsp";%>
<%@ include file="<%=path%>"%>
如果该属性值以”/“开头,那么指定的是一个绝对路径,将在当前应用的根目录下查找文件;如果是以文件名称或文件夹名开头,那么指定的是一个相对路径,将在当前页面的目录下查找文件。
JSP中常用的动作标识有<jsp:include>、<jsp:forward>、<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>、<jsp:fallback>、<jsp:pugin>。本篇主要提及<jsp:include>动作标识。
<jsp:include>动作标识使用格式:<jsp:include page="被包含文件的路径" flush="true|false"/>
或者向被包含的动态页面中传递参数:
<jsp:include page="被包含文件的路径" flush="true|false"><jsp:param name="参数名称" value="参数值"/></jsp:include>
page属性:和include指令的file属性一样。
flush属性:表示当输出缓冲区满时,是否清空缓冲区。该属性值为boolean类型,默认值为false,通常情况下设为true。
处理方式不同:使用include指令,被包含的文件的内容会原封不动地插入到包含页中使用该指令地位置,然后JSP编译器再对这个合成地文件进行编译最终编译成的文件只有一个。使用include动作标识,该标识被执行时,程序会将请求转发到(注意是转发而不是请求重定向)被包含的页面,并将执行结果输出到浏览器中,然后返回包含页继续执行后面的代码。服务器执行的是两个文件,JSP编译器会分别对这两个文件进行编译。注:]请求转发,存储在request对象中的信息会被保留并被带到目标页面中;请求重定向,重新生成一个request请求,将该请求重定向到指定的URL,所以事先存储在request对象中的信息都不存在了。
包含方式不同:include指令,静态包含,最终服务器执行的是将两个文件合成后由JSP编译器编译成的一个class文件,若改变被包含的文件,则主文件的代码就发生了改变,服务器会重新编译主文件。include动作标识,动态包含,通常用来包含那些经常需要改动的文件。服务器执行的是两个文件,被包含文件的改动不会影响到主文件,服务器不需要对主文件进行重新编译,只需要重新编译被包含的文件即可,而只有当<jsp:include>动作标识被执行时,使用该标识时,目标文件才会被编译。
约定不同:include指令的约定index.jsp文件的部分代码
1 <%@ page language="java" contentType="text/html; charset=UTF-8"%> 2 <%@ include file="top.jsp" %>
top.jsp文件的部分代码
1 <%@ page language="java" contentType="text/html; charset=GB2312"%>
访问index.jsp将会出现异常
<jsp:include>动作标识,无需遵循这样的约定,不会出现异常
1 <%@ page language="java" contentType="text/html; charset=GB2312"%> 2 <jsp:include page="top.jsp"/>