`

静态导入,动态导入区别

 
阅读更多

1.静态导入时将被导入页面的代码完全融入,两个页面融合成一个整体的servlet,而动态导入是则是在servlet中使用include的方法来引入被导入页面的内容给!
2.静态导入时被导入页面的指令会起作用,而动态导入时被导入页面的编译指令则失去作用,只是导入body内容!
静态导入  include编译指令语法:<%@include file="relativeURLSpec"%>
动态导入  jsp:include动作指令语法:<jsp:include page="{relativeURL|<%=expression%>}" flush="true"/>
<!---------------------------------------------------------------------->
include指令<%@include file=""%>,这种方式的引入属于静态导入,include行为<jsp:include>,这种方式的导入属于动态的导入,这里涉及到一个jsp的原理上的问题。现在就先回顾一下:

        当我在地址栏中输入一个jsp的地址的时候,点击回车,会提交一个请求给我的web容器(如:tomcat,resin)等,这个容器会把这个以jsp结尾的请求对应到一个jsp引擎(其实也是一个servlet)来处理,这个servlet一定会去先把要回应请求的jsp转义成为servlet(此时 include指令被解释执行),然后,把这个servlet编译为class文件,由虚拟机解释执行,处理用户的请求(此时include行为执行),然后再生成响应。

        所以说,静态导入是在转译时发生的,是代码级的导入,这个指令的作用就是让jsp引擎去按照这个指令去做一些事情。而include动作是在请求处理阶段发生的,也就是说,include动作会产生两个servlet,两者之间可以传参数,引入的是处理后的结果。

        现在知道了原理,那么在编程的时候到底会产生什么样的效果呢?

        举个例子就知道了:

        比如说我有一个根据股票的行情随时改变的一个servlet(这个servlet会去从某个数据源取得变化的数据),这个servlet需要显示到我的主页的一个角上,每10秒钟更新一次信息,这是很正常的需求。大家都知道静态导入的优点是速度相对于动态导入的速度快。如果我用静态导入的方法,导入这个 servlet的话,会生成一个class文件,这个class文件,当我第二次请求的时候,由于是静态导入,jsp引擎不会去检查我的导入文件的最新时间,而是直接用已经生成的class响应请求。而动态导入的时候,每次去请求的时候,都会去比较导入文件的最新更新的时间,如果这个文件修改过,则会重新生成新的class文件,再去响应请求。也就是说,动态导入之所以速度上要慢,是由于要多做一个判断,对比导入文件的最新时间。我一直只这么认为的,结果今天做了个试验,推盘了我的结论,其实无论动态导入还是静态导入都会去检查生的jsp的更新时间与生成的servlet更新时间的早晚,根据比较结果来决定是否重新生成。而动态导入和静态导入的本质区别就在于,动态导入之所以叫做动态是由于它的参数是动态传递的,这样就可以使程序更加的灵活,而且它的参数本身还可以是动态的也就是说参数可以是脚本。而静态的则没有这项特权。而且,动态导入可以是一个.do的请求,而静态导入不能够。

        因此,得出结论,静态导入适合导入不会变化的资源,例如一个html文件,而动态导入适合导入一个时常变化的资源,如servelt和jsp。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics