JSP主要有三个编译指令:page 、include、taglib
其中使用include指令可以将一个外部文件嵌入到当前JSP文件中,如下:
<%@include file="relativepath/test.jsp">
这种引用是静态的include语句,
使用静态的include语句,就可以将被包含页面(子页面,如test.jsp)文件嵌入到包含页面(父页面)中,同时解析子页面中的jsp语句;即会把子页面中的其他编译指令也包含进来,因此子页面甚至不需要是一个完整的页面。
注:父页面在编译时将完全包含了子页面的代码,又因为还会将子页面的编译指令也包含进来,所以,如果两个页面的编译指令冲突,那么页面就会出错。
相对于静态include指令,动态include指令则是:
1. <jsp:include page="relativepath/test.jsp" flush="true"/>
2.<jsp:include page="relativeUrl|<%=expression%>" flush="true">
<jsp:param name="paramname" value="paramvalue"/>
</jsp:include>
同样,这种用法也表示包含某个页面,它不会导入子页面的编译指令,仅仅是将子页面中的body内容插入页面;
通过第二种用法,可以看出动态的include方法可以额外的传入参数;
flush属性用于指定输出缓存是否转移到被导入文件中(对于jsp1.1以前版本,只能设置为false)
如果用动态的include方法:通过jsp生成的源代码中可以看到这样一句话:
org.apache.jasper.runtime.jspRuntimeLibrary.include(request,response,"test.jsp",out,false);
表明动态导入只是使用一个include方法来插入子页面的内容,而不是将子页面完全融入父页面中。
- 静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容;
- 静态导入时被 导入页面的编译指令会起作用;而动态导入时被导入编译指令则失去作用,只是插入被导入页面的body内容
- 动态包含还可以参数
jsp的动作指令
- jsp:forward 执行页面转向,将请求的处理转发到下一个页面
- jsp:include 用于动态引入一个页面
- jsp:param 用于传递参数,必须与其他支持参数的标签一起使用
- jsp:plugin 用于下载JavaBean或Applet到客户端执行
- jsp:useBean 创建一个JavaBean的实例
- jsp:setProperty 设置JavaBean实例的属性值
- jsp:getProperty 输出JavaBean实例的属性值