国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

JSP中include指令和include動(dòng)作有何不同?

2024-09-05 00:18:03
字體:
供稿:網(wǎng)友

  很多朋友不曉得JSP中include和include有何區(qū)別,那么今天小編給大家講講JSP中include和include的區(qū)別之處,感興趣的朋友跟小編一起來了解一下吧!

  

  =””flush=”true”>

  前者是指令元素、后者是行為元素。具體它們將在何處用?如何用及它們有什么區(qū)別?這應(yīng)該是很多人看到它都會(huì)想到的問題。下面一起來看看吧。

  通常當(dāng)應(yīng)用程序中所有的頁面的某些部分(例如標(biāo)題、頁腳和導(dǎo)航欄)都相同的時(shí)候,我們就可以考慮用include。具體在哪些時(shí)候用,哪些時(shí)候用.這種形式。首先要明白的是它們之間的區(qū)別。只有了解了它們用法的不同才理解該在何時(shí)去用以及如何選擇。=””flush=”true”>

  ,jsp的include指令元素讀入指定頁面的內(nèi)容。并把這些內(nèi)容和原來的頁面融合到一起。(這個(gè)過程是在翻譯階段:也就是jsp被轉(zhuǎn)化成servlet的階段進(jìn)行的。

  這里對(duì)翻譯階段進(jìn)行一下說明:我們知道,jsp頁面不能原封不動(dòng)地被傳送給瀏覽器,所有的jsp元素都必須首先由服務(wù)器進(jìn)行處理。這是通過將jsp頁面轉(zhuǎn)達(dá)化成servlet,然后執(zhí)行這個(gè)servlet來完成的。服務(wù)器需要一個(gè)jsp容器來處理jsp頁面。jsp容器通常以servlet的形式來實(shí)現(xiàn),這個(gè)servlet經(jīng)過配置,可以處理對(duì)jsp頁面的所有請(qǐng)求。

  Jsp容器負(fù)責(zé)將jsp頁面轉(zhuǎn)化成servlet(稱為jsp頁面實(shí)現(xiàn)類?JSPPageimplementationclass),并編譯這個(gè)servlet。這兩步就構(gòu)成了翻譯階段.

  由此我們就會(huì)知道:jsp頁面是把include指令元素所指定的頁面的實(shí)際內(nèi)容(也就是代碼段)加入到引入它的jsp頁面中,合成一個(gè)文件后被jsp容器將它轉(zhuǎn)化成servlet。可以看到這時(shí)會(huì)產(chǎn)生一個(gè)臨時(shí)class文件和一個(gè)java文件。下面舉個(gè)例子。

  服務(wù)器用tomcat,引入頁面的jsp文件叫test.jsp。被引入的頁面叫date.jsp.這個(gè)jsp文件里存放的是一個(gè)有關(guān)時(shí)間的jsp代碼,當(dāng)前的上下文根設(shè)為test

  //======date.jsp的源文件=====//

  

  

  java.util.Datedate=newjava.util.Date();

  Stringdate_cn="";

  StringdateStr="";

  switch(date.getDay())

  {

  case0:date_cn="日";break;

  case1:date_cn="一";break;

  case2:date_cn="二";break;

  case3:date_cn="三";break;

  case4:date_cn="四";break;

  case5:date_cn="五";break;

  case6:date_cn="六";break;

  }

  dateStr=(1900+date.getYear())+"年"+(date.getMonth()+1)+"月"+date.getDate()+

  "日(星期"+date_cn+")";

  %>

  document.write("");

  //======以下是test.jsp的源文件=============//

  

  

  

  

  =”date.jsp”flush=”true”>

  

  //我們?cè)谶@里用include的兩種不同形式來引入date.jsp這個(gè)文件.

  

  

?

  

?

  有關(guān)jsp中include的兩種用法.敬請(qǐng)關(guān)注。

  

?

  

  

  在test.jsp文件中,我們只輸出了一行文本“有關(guān)jsp中include的兩種用法.敬請(qǐng)關(guān)注。”,現(xiàn)在讓我們先用這種形式引入date.jsp這個(gè)文件。你想會(huì)出現(xiàn)什么問題了嗎?此時(shí)出現(xiàn)了錯(cuò)誤提示:

  HTTPStatus500?

  org.apache.jasper.JasperException:/date.jsp(0,0)Pagedirective:

  can'thavemultipleoccurrencesofcontentType

  以下還有一堆錯(cuò)誤,但我們只要看這里就知道問題的所在了。狀態(tài)碼為http500服務(wù)器內(nèi)部錯(cuò)誤。再看下面的提示。在date.jsp頁面中不能指定多個(gè)contentType.

  原因就在這里了。是因?yàn)樵诜g階段,date.jsp文件的代碼被原封不動(dòng)地加入到了test.jsp頁面從而合成一個(gè)文件。合成后的文件中就會(huì)相同的:

  

  這句代碼。解決的辦法是把date.jsp文件中的這句刪掉。刷新后再請(qǐng)求test.jsp頁面

  請(qǐng)求test.jsp在頁面顯示如下

  2007年8月12日13:12:40

  有關(guān)jsp中include的兩種用法.敬請(qǐng)關(guān)注。

  這時(shí)我們還不能發(fā)現(xiàn)什么。還是去查看tomcat下的臨時(shí)文件吧。到那里去看看date.jsp文件的內(nèi)容是否已被加入到了test.jsp文件中。

  

  目錄

  E:/tomcat/work/Standalone/localhost/test.

  在這個(gè)目錄下會(huì)看到

  test_jsp.java和test_jsp.class兩個(gè)文件。

  這里的java文件就是jsp容器將jsp轉(zhuǎn)化成了servlet而得到的test_jsp.java這個(gè)文件。

  相對(duì)應(yīng)的test_jsp.class這個(gè)文件就是編譯test_jsp.java這個(gè)servlet文件產(chǎn)生的類文件了。打開所產(chǎn)生的servlet文件(test_jsp.java)。此時(shí)我們會(huì)發(fā)現(xiàn),在test.jsp文件被轉(zhuǎn)化成servlet文件時(shí),在輸出的之間加入了一些不是test.jsp頁面里面的代碼,新加入的內(nèi)容就是date.jsp里面的代碼:新加入了哪些內(nèi)容或是否真的加入了新的內(nèi)容請(qǐng)自己測(cè)試去看一下就會(huì)一目了然了.在這里不再詳述.

  以上就是我們用這種形式得到的結(jié)果.

  下面我們換用也就是將=”dae.jsp”flush=”true”>

  換成,然后請(qǐng)求test.jsp.=”dae.jsp”flush=”true”>

  2007?ê8??12??13:30:13

  有關(guān)jsp中include的兩種用法.敬請(qǐng)關(guān)注。

  此時(shí)會(huì)在頁面上看見.我們所引入date.jsp輸出的日期中中文出現(xiàn)了亂碼.什么原因?是因?yàn)閕nclude行為元素是在請(qǐng)求處理階段執(zhí)行的(此處要對(duì)請(qǐng)求處理階段進(jìn)行說明一下.Jsp容器除了上面提到的負(fù)責(zé)將jsp頁面轉(zhuǎn)化成servlet外,還負(fù)責(zé)調(diào)用jsp頁面實(shí)現(xiàn)類以處理每個(gè)請(qǐng)求并產(chǎn)生應(yīng)答.這個(gè)階段我們就稱為請(qǐng)求處理階段.請(qǐng)求處理階段僅執(zhí)行類文件)。

  所以在我們作include行為元素引入頁面時(shí),實(shí)際只是引用了date.jsp這個(gè)文件被轉(zhuǎn)化并被編譯后產(chǎn)生的servlet類文件.既如此,date.jsp就是作為一個(gè)單獨(dú)的文件在執(zhí)行后才被test.jsp文件運(yùn)行時(shí)調(diào)用.由于date.jsp文件中沒有指定字符編碼.所以出現(xiàn)了亂碼.解決辦法是在date.jsp文件中重新把剛才去掉的

  這行語句加入后刷新重新運(yùn)行.此時(shí)頁面顯示正確,并跟用include指令正常運(yùn)行時(shí)一樣.再查看tomcat下的臨時(shí)文件會(huì)發(fā)現(xiàn).此時(shí)多出了一個(gè)date_jsp.java文件和一個(gè)date_jsp.class文件.這兩個(gè)文件得來的方式跟test_jsp.java和test_jsp.class文件得來的方式一樣.再查看一下此時(shí)test_jsp.java文件的代碼會(huì)發(fā)現(xiàn).此時(shí)只新增加了一句代碼:

  JspRuntimeLibrary.include(request,response,"date.jsp",out,true);

  它并沒有把date.jsp文件的代碼加入到test.jsp.

  只是在運(yùn)行時(shí)引入了date.jsp頁面執(zhí)行后所產(chǎn)生的應(yīng)答.這意味著我們可以指定任何能夠產(chǎn)生應(yīng)答的Web資源,(例如一個(gè)servlet或一個(gè)jsp頁面),只要這些資源所產(chǎn)生的類型和jsp頁面產(chǎn)生的內(nèi)容類型相同.JSP容器將通過一個(gè)內(nèi)部的函數(shù)調(diào)用來執(zhí)行指定的資源.因此,這些被引入的資源可以幫助處理原來的請(qǐng)求,所以這些資源可以訪問請(qǐng)求作用域內(nèi)的所有對(duì)象.以及所有原來的請(qǐng)求參數(shù).

  由于在主頁面被請(qǐng)求時(shí),這些頁面還沒有被引入到主頁面中,所以你可以對(duì)page屬性使用一個(gè)請(qǐng)求時(shí)屬性值,以便根據(jù)運(yùn)行時(shí)的情況來決定要引入哪一個(gè)頁面.還可以添加一些將被引入的頁面讀取的請(qǐng)求參數(shù).

  ”flush=”true”>=”

  =”fitstparamer”value=”firstvalue”>

  =”lastparamer”value=”lastvalue”>

  

  如果修改了被引入的jsp頁面,那么可以立刻使用該頁面的最新版本,這是因?yàn)閷?duì)待被引入的頁面的方式與對(duì)待由瀏覽器直接調(diào)用的jsp頁面的方式完全相同.即容器檢測(cè)頁面的變化,并自動(dòng)進(jìn)入翻譯階段,以得到頁面的最新版本.

  (注意,include行為元素同jsp其它元素一樣,沒有行為體時(shí)要以”/”結(jié)束.就像下面這樣.

  =””flush=”true”>

  以下是對(duì)include兩種用法的區(qū)別

  主要有兩個(gè)方面的不同;

  1.執(zhí)行時(shí)間上:

  是在翻譯階段執(zhí)行

  在請(qǐng)求處理階段執(zhí)行.=”relativeuri”flush=”true”>

  2.引入內(nèi)容的不同:

  

  引入靜態(tài)文本(html,jsp),在JSP頁面被轉(zhuǎn)化成servlet之前和它融和到一起.

  引入執(zhí)行頁面或servlet所生成的應(yīng)答文本.=”relativeuri”flush=”true”>

  另外在兩種用法中file和page屬性都被解釋為一個(gè)相對(duì)的URI.如果它以斜杠開頭,那么它就是一個(gè)環(huán)境相關(guān)的路徑.將根據(jù)賦給應(yīng)用程序的URI的前綴進(jìn)行解釋,如果它不是以斜杠開頭,那么就是頁面相關(guān)的路徑,就根據(jù)引入這個(gè)文件的頁面所在的路徑進(jìn)行解釋.更多有關(guān)URL是如何解釋的請(qǐng)參考相關(guān)資料或書籍。

  以上就是JSP中include和include的區(qū)別之處,想必都了解了吧,更多相關(guān)內(nèi)容請(qǐng)繼續(xù)關(guān)注錯(cuò)新技術(shù)頻道。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安远县| 钟祥市| 承德市| 玛曲县| 彩票| 长海县| 镶黄旗| 五华县| 循化| 腾冲县| 盐源县| 龙海市| 浦东新区| 成武县| 梅州市| 九寨沟县| 呼玛县| 英吉沙县| 昆明市| 修武县| 晋江市| 隆化县| 南部县| 玉田县| 慈利县| 富蕴县| 永兴县| 会理县| 汉川市| 临清市| 雷波县| 泾阳县| 永清县| 卓资县| 太白县| 扬中市| 绥棱县| 思茅市| 泰兴市| 大庆市| 讷河市|