include指令元素与行为元素的区别

jsp中的<%@ include file=" "%>指令元素和<jsp:include page=" " flush="true"/>行为元素。
指令是从jsp页面发送到容器的一种信息,它用来指导容器的处理过程(属于全局的),所有指令都在整个jsp页面内有效。
jsp页面不能原封不动地被传送给浏览器,所有的jsp元素都必须首先由服务器进行处理。这是通过将jsp页面转化成servlet,然后执行这个servlet来完成的。服务器需要一个jsp容器来处理jsp页面,jsp容器通常以servlet的形式来实现,这个servlet经过配置,可以处理对jsp页面的所有请求。

    一般情况下,include指令元素适用于包含被页面公用的静态部分(如标题,页脚,导航栏),它是当包含页面被请求jsp容器将它翻译成servlet时,将被包含页面的所有内容嵌入到该指令所在的位置形成一个融合的servlet(称为jsp页面实现类?JSP Page implementation class)。我们可以看到tomcat的临时目录下(E:/soft/Tomcat 6.0/work/Catalina/localhost/HRMIS/org/apache/jsp),只生成一个jsp页面(包含页面)的实现类(如:test_jsp.java和test_jsp.class类文件),打开.java文件会发现在对应的输出位置添加了被包含页面的原内容。(因为是在翻译阶段执行,所以file属性不能是变量)

     include指令元素适用于包含被页面公用的动态部分,他是在运行时被动态调用的。当包含页面被请求时jsp容器将它翻译成一个单独的servlet,并且将include行为元素解析为一个调用语句。然后当运行jsp页面的实现类(包含页面)时,执行到这个调用处又将指定的被包含页面去翻译成一个独立的servlet,然后将这个jsp页面的实现类(被包含页面)的调用结果引入到主页面(包含页面)中。这时我们可以看到tomcat的临时目录下生成了两个独立的jsp页面(包含页面和被包含页面)实现类(如:test_jsp.java和info_jsp.java还有他们的类文件),打开.java文件会看到在对应的输出位置增加了一条调用语句(JspRuntimeLibrary.include(request, response, "info.jsp", out, true);)。(因为行为元素是在运行阶段执行,所以page属性可以是变量)

 

     只是在运行时引入了info.jsp页面执行后所产生的应答,这意味着我们可以指定任何能够产生应答的Web资源(例如一个servlet或一个jsp页面),只要这些资源所产生的类型和jsp页面产生的内容类型相同,JSP容器将通过一个内部的函数调用来执行指定的资源,因此这些被引入的资源可以帮助处理原来的请求,所以这些资源可以访问请求作用域内的所有对象,以及所有原来的请求参数。

    由于在主页面被请求时,这些页面还没有被引入到主页面中,所以你可以对page属性使用一个请求时属性值,以便根据运行时的情况来决定要引入哪一个页面,还可以添加一些将被引入的页面读取的请求参数。
<jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” >
<jsp:param name=”fitstParamer” value=”firstValue”>
<jsp:param name=”lastParamer” value=”lastValue”>
</jsp:include>

另外在两种用法中file和page属性都被解释为一个相对的URI,如果它以斜杠开头,那么它就是一个环境相关的路径,将根据赋给应用程序的URI的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值