JSP动态包含与静态包含

已经很久没有认真的去写Java代码了,因为项目的需求,我被迫被分配到后台用Shell和Procedure实现需求,但是个人觉得不能忘本,之前一段时间同事遇到一个JSP前台加载不上去的问题,后来突然想到了JSP的动态包含和静态包含的问题,他们是有很大的区别的,当时只记得动态包含是编译之后才嵌入进来的,静态包含就相当于是把代码写在一个外部的文件中,但是其他的都忘记了,做人不能忘本啊,所以在网上搜索了下其他大神写的文章,做为备忘吧,后续如果忘记了,可以再回头看看。由于本人的时间有限,因此就不去自己写了。

 

本文引用自:http://blog.sina.com.cn/s/blog_5bba80460100cidt.html

 

动态INCLUDE
用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。

(这里你必须使用flush="true",你不能使用false值.缺省值为false )
静态INCLUDE
用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>
===================================================================
1. 静态include的结果是把其他jsp引入当前jsp,两者合为一体
动态include的结构是两者独立,直到输出时才合并( 看看jsp生成的java文件就可以知道了)
2.正是因为这样,动态include的jsp文件独立性很强,是一个单独的jsp文件,需要使用的对象,页面设置,都必须有自己创建,当然,还好它和include它的页面的request范围是一致的.
而静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能有变量同名的冲突.而页面设置也可以借用主文件的.

本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/13159.htm

 

 

include指令是静态引入的;而include动作是动态引入的。
静态与动态的include与页面内容无关。
与<%@include...%>不同的是,jsp:include 可以向被包含的页传递参数,但,如果传递参数的话,被包含的页必须是JSP页面。
例如:向被包含的页included2.jsp传递参数:
<jsp:include page="included2.jsp" flush="true">    
     <jsp:param name="ref1" value="AAA"/>
     <jsp:param name="ref2" value="BBB"/>
</jsp:include>
page属性: 相对路径指明被包含的文件
flush属性: 必须用true ,表示页面可刷新。
可以用jsp:param向被包含的动态页即JSP页传递参数(而include指令则不可以),参数以”参数名-值”对的形式传递,被包含的页使用request.getParameter(“参数名称”)可以获取相应参数的值

 

JSP中动态INCLUDE与静态INCLUDE的区别?动态INCLUDE用jsp:include动作实现它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面

 

以下自另外一个仁兄的总结,直接"拿"过来了,http://blog.csdn.net/duliming1987/article/details/7389123

 

都知道,JSP在WEB服务器中都要转换成一个java文件,java文件再编译成一个class文件。当请求JSP页面的时候,实际上运行的是这个class文件。

从这个方面来说:

静态包含发生在:JSP---->java文件阶段。动态包含发生在:执行class文件阶段。动态加入。

静态包含:只生成一个java文件,动态包含:生成多个class文件。

值得庆幸的是无论是动态包含还是静态包含,其request对象都是相同的。也就是同一个request对象。

 

什么都没例子来的实在:

index.jsp页面:静态和动态包含其他页面。

主要代码:

 

[java]  view plain copy
 
  1. 静态包含页面:  
  2.  <%@include file="static.jsp" %><br>  
  3. 动态包含页面   
  4. <jsp:include page="dynamic.jsp" flush="true"/>  



 

static.jsp被静态包含的页面。

dynamic被动态包含的页面。

经过编译以后生成的效果:

打开index_jsp.java

可以看到被静态包含的页面中的内容全部包含在了里面。而被动态包含的页面使用了:

 

[java]  view plain copy
 
  1. org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "dynamic.jsp", out, true);  


而被动态包含的页面,生成了一个新的java文件。

 

 

再看代码:为什么说动态包含和静态包含的request是相同的,静态被包含页面和包含它的页面共享request是毋庸置疑的,而动态包含通过上面一行代码也就一目了然了。

 

 

以上都是个人总结,如有错误,希望能指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值