09 二月 2008

动作元素include和include指令的区别

初学JSP,我们可能对<jsp:include>元素和include指令有所混淆,认为两者是一样的。虽然从表象上来看,两者的效果差不多,但是实质上是有区别的。





  1. include指令所包含的对象是静态对象,<jsp:include>动作包含的对象是动态对象。所谓的静态对象和动态对象并不是指静态html页面和动态页面。所谓的静态和动态指的是:include指令将JSP页面作为静态对象,将页面的内容(可以是文本或者代码)在include指令的位置处包含进来,这个过程发生在JSP容器管理JSP页面生命周期的转换阶段。而<jsp:include>动作包含的JSP页面作为动态对象,在请求处理期间,将请求发送给改对象,然后将最后处理的结果重新包含在当前页面的请求响应中,这个过程发生在JSP页面生命周期的执行阶段。




  2. include指令的file属性所给出的路径是相对于当前文件的,而<jsp:include>动作的page属性所指的路径是相对于当前页面的。




当使用include指令包含某个资源时,资源路径的查找是在JSP页面的转换期间发生的,一旦找到该资源(文本、代码或者JSP页面),它的内容就会在include指令的位置处被包含进来,成为一个整体,然后转换为Servlet源文件。而采用<jsp:include>动作包含资源时,相对路径的查找是在处理阶段完成的,当前页面和被包含的资源是相互独立的个体,当前页面将请求发送给被包含的资源,被包含的资源对请求处理的结果作为当前页面对请求响应的一部分发送给客户端。





  1. 两者发生的时间不同。include指令发生在转换阶段,后者发生在处理阶段。



没有评论: