JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別_第1頁
JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別_第2頁
JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別_第3頁
JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別_第4頁
JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、java面試筆試題:JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?日期:2008-09-15來源:作者:志偉I 動態(tài) I NC LU DE 用 js p :i nc lu de 動 作實 現(xiàn) <js p :i nc lu de pag e ="i nc lud ed.js p" fl us h =" tr ue" /> 它 總是會檢查所含文件中的變化,適合用于包含動態(tài)頁面,并且可以帶參數(shù).靜態(tài)I N C LU DE用inc lu de偽碼實現(xiàn),定不會檢查所含文件的變化,適用于包含靜態(tài)頁面<% i nc lu de fil e =

2、 "i nc lu ded.ht m" % >下面非常詳 細(xì)地解 析了有 關(guān)JSP動態(tài)I NC LU DE和靜態(tài)IN CLU DE的使 用方法 及其區(qū) 別:我們都知道 在js p中inc l ude有兩種形式,分別是<% i nc lu de file =""% ><js p:i nc lu de p age ="" flus h ="t rue" />前者是指令元素、后者是行為元素.具體它們將在何處用?如何用及它們有什么區(qū)別?這應(yīng)該是很多人看到它都 會想到的問題.下面一起來看看吧.通

3、常當(dāng)應(yīng)用程序中所有的頁面的某些部分(例如標(biāo)題、頁腳和導(dǎo)航欄)都相同的時候,我們就可以考慮用inc l ude.具體在 哪些時 候用 <% inc lud e file =""% >,哪 些 時候 用 <js p :i nc lu de p age ="" flus h ="t rue" />.這 種形式.首先要明白的是它們之間的區(qū)別.只有了解了它們用法的不同才理解該在何時去用以及如何選擇.<% i nc lu de file =""% >,js p的inc l ude指令元素讀入

4、指定頁面的內(nèi)容.并把這些內(nèi)容和原來的頁面融合到一起.(這個過程是在翻譯階段:也就是js p被轉(zhuǎn)化成s e rvlet的階段進(jìn)行的.這里對翻譯階段進(jìn)行一下說明:我們知道,js p頁面不能原封不動地被傳送給瀏覽器,所有的js p元素都必須首 先由服務(wù)器進(jìn)行處理.這是通過將js p頁面轉(zhuǎn)達(dá)化成se rvle t,然后 執(zhí)行這 個servl et來完成的.服務(wù)器 需要一個js p容器 來處理js p頁面.js p容器通 常以se rvlet的形式 來實現(xiàn),這個se rvl et經(jīng)過配置,可以處 理對js p頁面 的所有 請求.Js p容器負(fù)責(zé)將js p頁面轉(zhuǎn)化成serv let (稱為js p頁面實現(xiàn)

5、類?JSP P age im ple me nta tio n c las s),并編譯這個ser vlet.這兩步就構(gòu)成了翻譯階段.由此我們就會知道:js p頁面是把i nc lu de指令元素所指定的頁面的實際內(nèi)容(也就是代碼段)加入到引入它的js p 頁 面中 , 合成一 個 文件 后被 js p 容器 將它 轉(zhuǎn) 化 成 servl et. 可以 看 到這 時會產(chǎn) 生 一個 臨 時 clas s 文 件 和一 個 jav a 文 件. 下面舉個例 子.服務(wù)器用to me at ,引入頁面的js p文件叫t es t.js p.被引入的頁面叫d ate.js p.這個js p文件里存放的是

6、一個有關(guān)時間的js p代碼,當(dāng)前的上下 文根設(shè) 為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 >有 關(guān) js p 中 i nc lude 的 兩種 用 法 . 敬

10、請 關(guān)注</t d ></tr ></t abl e ></b od y ></h t ml >在 tes t.js p 文 件 中 , 我 們 只輸 出 了一 行 文本 " 有關(guān) js p 中 inc lu de 的 兩 種用 法 . 敬 請關(guān) 注 ." , 現(xiàn)在 讓 我們 先 用<% i nclu de fil e ="d ate.js p" % > 這種 形 式引 入 d ate.js p 這 個 文件 . 你 想 會出 現(xiàn) 什么 問 題了 嗎 ?此 時 出現(xiàn) 了 錯誤 提 示

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以下還有一 堆錯誤,但我們只要看這里就知道問題的所在了.狀態(tài)碼為 htt p 500 服務(wù)器內(nèi)部錯 誤.再看下面的 提 示 . 在 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有關(guān) js p 中 inc lude 的 兩

13、種 用 法 .敬 請 關(guān)注 .這時我們還 不能發(fā)現(xiàn)什么 .還是去查看 tomcat 下的臨時 文件吧.到那里去看看 date.js p 文件的內(nèi)容是否已被 加 入 到了 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轉(zhuǎn)化成了 se rvlet而得到的tes t_ js

14、 p.java 這個文件.相對 應(yīng)的tes t_ js p.c las s這個文 件就是 編譯tes t_ js p.java 這個s ervl et文件 產(chǎn)生的 類文件了 .打開 所 產(chǎn)生 的 ser vlet 文件(tes t_ js p.java)此時 我們會 發(fā)現(xiàn),在t es t.js p文 件被 轉(zhuǎn) 化成se rvlet 文件時,在 輸出 的vhae d >之 間加 入了一些不是tes t.js p頁面里面的代碼,新加入的內(nèi)容就是 dat e.js p里面的代碼:新加入了哪些內(nèi)容或是否真的加入了 新的內(nèi)容請自己測試去看一下就會一目了然了 .在這里不 再詳述.以上就是我 們用&l

15、t;% include file =" dat e.js p"% >這種形式 得到的 結(jié)果.下面我們換 用 <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有關(guān) js p 中 i nc lude 的 兩種 用 法 .敬 請 關(guān)注 .此時會在頁 面上看見.我們所引入 date.js p 輸出 的日期中中文出現(xiàn)了 亂碼.什么原因?是因為 include 行為元 素是在請求 處理階段執(zhí)行的(此處 要對請 求處理階段進(jìn) 行說明一下.Js p容器 除了上 面提到 的負(fù)責(zé)將js p頁面轉(zhuǎn)化成serv let外,還負(fù)責(zé)調(diào)用jsp頁面實現(xiàn)類以處理 每個請 求并產(chǎn)生應(yīng)答.這個階 段我們 就稱為請求處理階段.請求處理階段 僅執(zhí)行 類文件).所以在我們 作inc lu de行為元素引入頁面時,實

17、際只是引用了 d ate.js p這個文件 被轉(zhuǎn)化 并被編 譯后產(chǎn)生的se rvlet類文件.既如此,da te.js p就是作為一個 單獨的 文件在執(zhí) 行后才 被tes t.js p文件運行 時調(diào)用.由于da te.js p文件 中沒有指定字符編碼.所以出現(xiàn)了 亂碼.解決辦法是在 date.js p 文件中重新把剛才去掉的<% page lan guage =" java" conte ntT ype="te xt/h tml ;cha rset=gb2 312"% >這行語句加 入后刷新重新 運行.此時頁面顯示正確,并跟用 include

18、 指令正常運行時一樣.再查看 tomcat 下的 臨時文件會 發(fā)現(xiàn).此時多出了 一個 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 文件 的代碼會發(fā)現(xiàn).此時只新增加了 一 句代碼: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頁面 執(zhí)行后 所產(chǎn)生 的應(yīng)答.這意味著我們可以指定任何能夠產(chǎn)生應(yīng)答的Web資 源,(例如一個servlet或一個js p頁面),只要這些 資源所 產(chǎn)生的類型和js p頁面產(chǎn)生 的內(nèi)容 類型相 同.JSP容器將通過一 個內(nèi)部的函數(shù)調(diào)用來執(zhí)行指定的 資源.因此,這些被引入的 資源可 以幫助處理原 來的請 求,所以 這些資 源可以 訪問請求作 用域內(nèi)的所有對象.以及所有原來 的請求參數(shù).由于在主頁 面被請求時,這些頁面還沒有被引入到主頁面中,所以你可以對 pa ge 屬性使用一

20、個請 求時屬性值, 以便根據(jù)運行時的情況來決定要引 入哪一個頁面.還可以 添加一 些將被 引入的 頁面讀取的請求參數(shù).<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 頁面 ,那么可以 立刻使用該頁面的最新版本 ,這是因為對待被引入的頁面 的方式 與對 待由瀏覽器直接調(diào)用的 jsp 頁面 的方式完全相 同.即容 器檢測頁面的 變化,并自動進(jìn)入翻譯階段,以得 到頁面 的最新版本.(注意,i nc lu de行為元素同js p其它元素一樣,沒有行為體時要以"/"結(jié)束.就像下面這樣.<js p:i nc lu de p age =" <% =p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論