http://rainmanjin.javaeye.com/blog/476838
http://www.orionserver.com/docs/specifications/jsp-1_2-fcs-spec.pdf
1 语法不同
<%@ include file = "/login.jsp" %> --- include directive
<jsp:include flush="true" page="/login.jsp"></jsp:include> -------- include action
静态include是在main jsp translation 期间执行的,它会将login.jsp的内容引入到main的servlet,两者合而为一。
动态include是在request时候执行的,它独立生成一个相应的servlet。实际只是引用了login.jsp这个文件被转化并被编译后产生的servlet类文件.login.jsp就是作为一个单独的文件在执行后才被index.jsp文件运行时调用.
include directive is interpreted relative to current jsp file.An include directive regards an resource as static object like jsp file.(直接将编译后的login.jsp内容写在main servlet----编译期间完成的)。
include action is interpreted relative to current jsp page.An include action regards an resource as dynamic object as a jsp page.(独立编译一个login对应的servlet,处理请求的时候,执行这个页面) 。
编译阶段:Jsp容器负责将jsp页面转化成servlet(称为jsp页面实现类?JSP Page implementation class),并编译这个servlet。这两步就构成了翻译阶段.
请求处理阶段:Jsp容器除了上面提到的负责将jsp页面转化成servlet外,还负责调用jsp页面实现类以处理每个请求并产生应答.这个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文件。
2 对象共享
静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能有变量同名的冲突.而页面设置也可以借用主文件的.不可以重复设置它tag lib.比如:
而动态include的页面要共享主页面的对象,可以通过<jsp:param> 传递。页面的设置必须单独设置。比如:
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
<jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” >
<jsp:param name=”fitstParamer” value=”firstValue”>
<jsp:param name=”lastParamer” value=”lastValue”>
</jsp:include>
3 Request 和 Response
静态include纯粹是把代码写在主页面的servlet,所以request 和 response 和主页面是同一个对象,可以获得主页面的request 和 reponse 的内容。
动态include的request 和主页的request是同一个scope,即主页面设置request的attribute/parameter,include页面可以获得.
main jsp 调用动态include页面实现类,便out.write实现类执行的结果。在动态include页面调用reponse.setHeader,reponse.sendRedirect,setCookies页面没有作用。
An included page only has access to the JspWriter and it can't set header and reponse.setHeader,reponse.sendRedirect,setCookies.This constraint also apply to include method of RequestDispatcher class.
参考联接:
http://java.chinaitlab.com/ServletJsp/529740_2.html
4 实例解析: 定时刷新子页面:动态include和静态include都能做。但静态include会整个页面刷新。