问题:

我在一个parent.jsp中include了一个sub.jsp,我是用initialize.do来转向parent.jsp的,我在刷新parent.jsp(就是重新运行initialize.do)的时候sub.jsp不能被刷新。但如果parent.jsp上有改动,再刷新的时候,sub.jsp就会被刷新。请问这种问题怎样解决?



动态INCLUDE

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

静态INCLUDE

    用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>


///


1. 静态include的结果是把其他jsp引入当前jsp,两者合为一体

     动态include的结构是两者独立,直到输出时才合并( 看看jsp生成的java文件就可以知道了)


2.正是因为这样,动态include的jsp文件独立性很强,是一个单独的jsp文件,需要使用的对象,页面设置,都必须有自己创建,当然,还好它和include它的页面的request范围是一致的.


而静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能有变量同名的冲突.而页面设置也可以借用主文件的.




14. JSP中动态Include与静态Include分别是什么,两种方式有什么区别?

参考答案:

动态Include使用jsp:include动作实现,如:<jsp:include page=”url” flush=”true”/>

动态Include允许你包含动态文件和静态,这两种包含文件的结果是不同的。如果文件仅是静态文件,那么这种包含仅仅是把包含文件的内容加到jsp文件中去,而如果这个文件动态的,那么这个被包含文件也会被Jsp编译器执行。

静态Include使用伪指令实现,如:<%@ include file=”url” %>,其中url必须是本地的相对URL。

当实施静态Include的JSP(下称parent)被编译转换成Servlet时,静态地将url所指定的文件(下称child)包含到该Servlet中。此后,无论child发生任何变化,只要不重新编译parent,其变化都不会体现在parent中。