@include指令和jsp:include动作的区别 以及 Web容器处理JSP文件请求的执行过程

ThinkoftheincludedirectiveasaheaderfileoflanguageslikeC/C++.Whenusingtheincludedirective,thecombinedcontentsoftheoriginalJSPpageandallitsincludedresourcesaretranslatedintothesameimplementationservleti.e.thecontentsoftheincludedresourceiscopypastedbeforetranslationtoaservlet.Theimportantthinghereisthatallthishappensduringtranslationtimeandonlystaticcontentissupported.

Theincludeaction<jsp:include>isalmostsimilartotheincludedirectiveexceptforafewsubtledifferences.Theincludeactionisexecutedatrequesttimeasopposedtotranslationtime.ThusinsteadofthecontentoftheincludefilebeingincludedinthecallingJSP,theoutputoftheJSPisincludedorpassedtotheJSPWriterofthecallingpage.ThisallowsustoincludebothstaticanddynamiccontentintotheJSPpage.Usingthejspactionalsoallowsyoutoexplicitlypassparameterstotheincludedpage.

<jsp:include page="/index.jsp">
    <jsp:param name="name" value="sos" />
    </jsp:include>

区别:

一:执行时间上:

<%@includefile=”relativeURI”%>是在翻译阶段执行

<jsp:includepage=”relativeURI”flush=”true”/>在请求处理阶段执行.

二:引入内容的不同:

<%@includefile=”relativeURI”%>

只能引入静态内容(html,jsp)

在翻译阶段,所有通过include指令导入的内容会百合成,并翻译成一个统一的Servlet

<jsp:includepage=”relativeURI”flush=”true”/>

能同时引入静态内容和动态内容

在请求处理,引入执行页面或servlet所生成的应答文本到目标页面的JSPWriter中

Web容器处理JSP文件请求的执行过程主要包括以下4个部分:

1.客户端发出Request请求

2.JSPContainer将JSP转译成Servlet的源代码

3.将产生的Servlet源代码经过编译后,并加载到内存执行

4.把结果Response(响应)至客户端

在执行JSP网页时,通常可以分为两个时期:翻译时期(TranslationTime)和请求时期(RequestTime)。

◆翻译时期:JSP网页转移成Servlet类。

◆请求时期:Servlet类执行后,响应结果至客户端。

翻译期间做了两件事情:

◆翻译时期:将JSP网页转移为Servlet源代码.java.

◆编译时期:将Servlet源代码.java编译成Servlet类.class.

当JSP网页在执行时,JSPContainer会做检查工作,如果发现JSP网页有更新修改时,JSPContainer才会再次编译JSP成Servlet;如果JSP没有更新时,就直接执行前面所产生的Servlet。

相关推荐