两种JSP页面include用法的区别

来源:互联网 发布:windows组件中没有ie 编辑:程序博客网 时间:2024/05/01 08:17

【问题】
大部分人都知道,JSP页面可以进行嵌套,嵌套有两种方法;标题可以换成另一个说话:<%@include%>与<jsp:include>的区别。

【准备知识】
JSP在首次执行时主要有以下几个步骤:
1、JSP代码翻译为Java代码;
2、Java代码便宜为class;
3、class部署为Servlet;
4、调用该Servlet。

需要稍微说明下的是,1、2步骤可以在打包WAR的时候提前完成。

【分析】
关键区别在于<%@include%>是编译指令,是JSP执行器在将JSP翻译为Java代码的时候进行处理的指令,因此会自动找到目标文件并将它插入到当前jsp文件中,就好像你通过文本编辑器的copy/paste操作一样;相反,<jsp:include>则是运行时代码(本质是个Tag标签),要在主jsp页面被请求的时候才会去定位被包含文件。

这种区别产生了不同的行为,我们来看些实例就能了解了,假设有a.jsp,在a中include文件b,那么:

1) 发生修改时
 @include:如果b被修改了,a不会发现b的改变,除非a也被修改了。
 jsp:include:执行时马上察觉到变化。

2) 允许包含的内容
 @include:b必须是基本的文本或jsp片断等,不能是一个java servlet。
 jsp:include:允许包括servlet(实际上,JSP最终将编译为servlet)。

3) 时间与空间
 @include在某些情况下要比<jsp:include>更有效率,但是它占用更多的硬盘空间(指生成Servlet后)。当然,在此,两者的执行效率不太重要。

4) 变量作用域
 @include:a、b是整合在一起的文件,所以变量是共享的(换句话说变量名会产生冲突问题),它们必须保持一致!
 jsp:include:可以对不同的变量使用相同名字,对同一个标签库使用不同前缀,a、b是相互独立的文件。

5) 上下文
  两种情况下,request和response均是持续的,所以request里面的attribute和parameter均是相同的,a和b可以利用request来传递数据。

看起来,用@include开发似乎更为高效,非常简单的实现了合并。但是这使得程序的逻辑变得复杂混乱,因此,正规开发中,个人强烈反对使用@include指令,而建议使用&lt;jsp:include&gt;指令。

原文:http://7thgen.info/forum/viewthread.php?tid=58

原创粉丝点击