JSP中动态INCLUDE与静态INCLUDE的区别_第1页
JSP中动态INCLUDE与静态INCLUDE的区别_第2页
JSP中动态INCLUDE与静态INCLUDE的区别_第3页
JSP中动态INCLUDE与静态INCLUDE的区别_第4页
JSP中动态INCLUDE与静态INCLUDE的区别_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、java面试笔试题:JSP中动态INCLUDE与静态INCLUDE的区别?日期:2008-09-15来源:作者:志伟I 动态 I NC LU DE 用 js p :i nc lu de 动 作实 现 <js p :i nc lu de pag e ="i nc lud ed.js p" fl us h =" tr ue" /> 它 总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数.静态I N C LU DE用inc lu de伪码实现,定不会检查所含文件的变化,适用于包含静态页面<% i nc lu de fil e =

2、 "i nc lu ded.ht m" % >下面非常详 细地解 析了有 关JSP动态I NC LU DE和静态IN CLU DE的使 用方法 及其区 别:我们都知道 在js p中inc l ude有两种形式,分别是<% i nc lu de file =""% ><js p:i nc lu de p age ="" flus h ="t rue" />前者是指令元素、后者是行为元素.具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都 会想到的问题.下面一起来看看吧.通

3、常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用inc l ude.具体在 哪些时 候用 <% inc lud e file =""% >,哪 些 时候 用 <js p :i nc lu de p age ="" flus h ="t rue" />.这 种形式.首先要明白的是它们之间的区别.只有了解了它们用法的不同才理解该在何时去用以及如何选择.<% i nc lu de file =""% >,js p的inc l ude指令元素读入

4、指定页面的内容.并把这些内容和原来的页面融合到一起.(这个过程是在翻译阶段:也就是js p被转化成s e rvlet的阶段进行的.这里对翻译阶段进行一下说明:我们知道,js p页面不能原封不动地被传送给浏览器,所有的js p元素都必须首 先由服务器进行处理.这是通过将js p页面转达化成se rvle t,然后 执行这 个servl et来完成的.服务器 需要一个js p容器 来处理js p页面.js p容器通 常以se rvlet的形式 来实现,这个se rvl et经过配置,可以处 理对js p页面 的所有 请求.Js p容器负责将js p页面转化成serv let (称为js p页面实现

5、类?JSP P age im ple me nta tio n c las s),并编译这个ser vlet.这两步就构成了翻译阶段.由此我们就会知道:js p页面是把i nc lu de指令元素所指定的页面的实际内容(也就是代码段)加入到引入它的js p 页 面中 , 合成一 个 文件 后被 js p 容器 将它 转 化 成 servl et. 可以 看 到这 时会产 生 一个 临 时 clas s 文 件 和一 个 jav a 文 件. 下面举个例 子.服务器用to me at ,引入页面的js p文件叫t es t.js p.被引入的页面叫d ate.js p.这个js p文件里存放的是

6、一个有关时间的js p代码,当前的上下 文根设 为tes t/=da te.js p 的 源 文件/<% p agelan g uage =" java" co nte ntT yp e ="te xt /h tml ;c ha rs et =gb2 3 12"% ><%java.util.Date da te =ne wjava.uti l.Date ();St ri ngdatc n =""St ri ngdateSt rs witch(date.getDay ()as0 :date=" 日"

7、 ;reak;as1 :datereak;as2 :datereak;as3 :date=" 三 " ;reak;as4 :date=" 四 " ;reak;as5 :date=" 五 " ;reak;as6 :date=" 六" ;reak;d ateS tr(1 9 00 +dat e.ge tY ear () + " 年 " + (date.ge tM ont h ()+1 ) + " 月" + da te.getDa te ()日 ( 星期 " + da t

8、e_c n + " )" ;%> d oc u men t.writ e(" <% =da teSt r% >" );/= = 以 下 是 tes t.js p 的 源文 件 = = =/<% p age lan g uage =" java" co nte ntT yp e ="te xt /h tml ;c ha rs et =gb2 3 1 2"% ><h tml ><h ea d><t itl e >i nc lude 的 两种 用 法 &l

9、t;/t itle ><js p:i nc lu de p age ="da te.js p" fl us h="t r ue" /><% - inc lud e file =" da te.js p" % - >/ 我们在这 里用 inc lude 的两 种不同形式来引入 dat e.js p 这个文件.<h ea d><b od y ><t abl e><tr ><t d >有 关 js p 中 i nc lude 的 两种 用 法 . 敬

10、请 关注</t d ></tr ></t abl e ></b od y ></h t ml >在 tes t.js p 文 件 中 , 我 们 只输 出 了一 行 文本 " 有关 js p 中 inc lu de 的 两 种用 法 . 敬 请关 注 ." , 现在 让 我们 先 用<% i nclu de fil e ="d ate.js p" % > 这种 形 式引 入 d ate.js p 这 个 文件 . 你 想 会出 现 什么 问 题了 吗 ?此 时 出现 了 错误 提 示

11、:H TT P Sta tus 5 0 0 ?o rg.apac he.jas pe r.Jas pe rE xc ept io n: /dat e.js p(0 ,0 ) Page dir ec tive : c an 't have m ulti ple oc cu r r enc es o f cont en tT ype以下还有一 堆错误,但我们只要看这里就知道问题的所在了.状态码为 htt p 500 服务器内部错 误.再看下面的 提 示 . 在 d ate.js p 页 面 中不 能 指定 多个 c onte ntT yp e.原因就在这里了 是因为在翻译阶段,date.j

12、s p文件的代码被原封不动 地加入到了 t es t.js p页面从而合成一个 文件.合成后 的文件 中就会 相同的 :<% p age lan g uage =" java"co nte ntT yp e ="te xt /h tml ;c ha rs et =gb2 3 1 2"% >这句代码.解决的办法是把 date.jsp 文件中的这句删掉.刷新后再请求 test.js p 页面请 求 tes t.js p 在页 面 显示 如 下2 0 03 年 12 月 10 日 1 3:1 2 :4 0有关 js p 中 inc lude 的 两

13、种 用 法 .敬 请 关注 .这时我们还 不能发现什么 .还是去查看 tomcat 下的临时 文件吧.到那里去看看 date.js p 文件的内容是否已被 加 入 到了 tes t.js p 文件中 .< 注 . 此 处 的 to mc at 装在 E 盘根 目 录下 >目录E :to mc at wo rk S tan dal on eloc al hos t tes t.在这个目录 下会看到tes t _js p.java 和 tes t_js p.c l ass 两 个文 件 .这里的java 文件就是js p容器将js p转化成了 se rvlet而得到的tes t_ js

14、 p.java 这个文件.相对 应的tes t_ js p.c las s这个文 件就是 编译tes t_ js p.java 这个s ervl et文件 产生的 类文件了 .打开 所 产生 的 ser vlet 文件(tes t_ js p.java)此时 我们会 发现,在t es t.js p文 件被 转 化成se rvlet 文件时,在 输出 的vhae d >之 间加 入了一些不是tes t.js p页面里面的代码,新加入的内容就是 dat e.js p里面的代码:新加入了哪些内容或是否真的加入了 新的内容请自己测试去看一下就会一目了然了 .在这里不 再详述.以上就是我 们用&l

15、t;% include file =" dat e.js p"% >这种形式 得到的 结果.下面我们换 用 <js p :i nc lu de p age 二"da e.js p" flus h ="t rue" /> 也就是将<% i nc lu de file ="da te.js p"% > 换成 <js p :inc l udepag e ="d ae.js p" fl us h ="t r ue" />, 然后 请求 tes

16、t.js p.2 0 03 ? e 1 2 ?10 ? 13:30:1 3有关 js p 中 i nc lude 的 两种 用 法 .敬 请 关注 .此时会在页 面上看见.我们所引入 date.js p 输出 的日期中中文出现了 乱码.什么原因?是因为 include 行为元 素是在请求 处理阶段执行的(此处 要对请 求处理阶段进 行说明一下.Js p容器 除了上 面提到 的负责将js p页面转化成serv let外,还负责调用jsp页面实现类以处理 每个请 求并产生应答.这个阶 段我们 就称为请求处理阶段.请求处理阶段 仅执行 类文件).所以在我们 作inc lu de行为元素引入页面时,实

17、际只是引用了 d ate.js p这个文件 被转化 并被编 译后产生的se rvlet类文件.既如此,da te.js p就是作为一个 单独的 文件在执 行后才 被tes t.js p文件运行 时调用.由于da te.js p文件 中没有指定字符编码.所以出现了 乱码.解决办法是在 date.js p 文件中重新把刚才去掉的<% page lan guage =" java" conte ntT ype="te xt/h tml ;cha rset=gb2 312"% >这行语句加 入后刷新重新 运行.此时页面显示正确,并跟用 include

18、 指令正常运行时一样.再查看 tomcat 下的 临时文件会 发现.此时多出了 一个 da te_ js p.java 文件和一个da te _ js p.c lass文件.这两个文 件得来 的方式 跟tes t_ js p.java 和 tes t_js p.c lass 文件得 来的方 式一样 .再查看 一下此时 tes t_jsp.java 文件 的代码会发现.此时只新增加了 一 句代码:Js pR unt im eLib ra ry.i nc lu de (r eq ues t , res po ns e, "da te.js p" , out , tr ue );

19、 它并 没有把 d ate.js p 文件 的代码 加入到 tes t.js p.只是在运行 时引入了 da te.js p页面 执行后 所产生 的应答.这意味着我们可以指定任何能够产生应答的Web资 源,(例如一个servlet或一个js p页面),只要这些 资源所 产生的类型和js p页面产生 的内容 类型相 同.JSP容器将通过一 个内部的函数调用来执行指定的 资源.因此,这些被引入的 资源可 以帮助处理原 来的请 求,所以 这些资 源可以 访问请求作 用域内的所有对象.以及所有原来 的请求参数.由于在主页 面被请求时,这些页面还没有被引入到主页面中,所以你可以对 pa ge 属性使用一

20、个请 求时属性值, 以便根据运行时的情况来决定要引 入哪一个页面.还可以 添加一 些将被 引入的 页面读取的请求参数.<jsp:i nc lu depage="<% =p ageSelec te dA tRun ti me% >"flus h ="t r ue" ><jsp:p ar amname="fits tP ara mer" va lue =" fi rs tV alue" ><jsp:p ar amname="las tP ara mer" va lue ="las tV alue" ></js p :i nclu de >如果修改了 被引入的 jsp 页面 ,那么可以 立刻使用该页面的最新版本 ,这是因为对待被引入的页面 的方式 与对 待由浏览器直接调用的 jsp 页面 的方式完全相 同.即容 器检测页面的 变化,并自动进入翻译阶段,以得 到页面 的最新版本.(注意,i nc lu de行为元素同js p其它元素一样,没有行为体时要以"/"结束.就像下面这样.<js p:i nc lu de p age =" <% =p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论