已经很久没有认真的去写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页面:静态和动态包含其他页面。
主要代码:
- 静态包含页面:
- <%@include file="static.jsp" %><br>
- 动态包含页面
- <jsp:include page="dynamic.jsp" flush="true"/>
static.jsp被静态包含的页面。
dynamic被动态包含的页面。
经过编译以后生成的效果:
打开index_jsp.java
可以看到被静态包含的页面中的内容全部包含在了里面。而被动态包含的页面使用了:
- org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "dynamic.jsp", out, true);
而被动态包含的页面,生成了一个新的java文件。
再看代码:为什么说动态包含和静态包含的request是相同的,静态被包含页面和包含它的页面共享request是毋庸置疑的,而动态包含通过上面一行代码也就一目了然了。
以上都是个人总结,如有错误,希望能指正。