成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JSP include指令和include行為的區(qū)別

開發(fā) 后端
本文介紹JSP include指令和include行為的區(qū)別,包括介紹JSP include的兩種用法。

我們都知道在JSP中include有兩種形式,分別是

  1. < %@ include file=” ”%> 
  2. < jsp:include page=” ” flush=”true”/>  

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

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

< %@ include file=” ”%>,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)類?JSP Page implementation class),并編譯這個(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

  1. <%@ page language=”java” contentType="text/html;charset=gb2312"%> 
  2. <%  
  3. java.util.Date date=new java.util.Date();  
  4. String date_cn ="";  
  5. String dateStr = "";  
  6. switch(date.getDay())  
  7. {  
  8. case 0:date_cn ="日"; break;  
  9. case 1:date_cn ="一"; break;  
  10. case 2:date_cn ="二"; break;  
  11. case 3:date_cn ="三"; break;  
  12. case 4:date_cn ="四"; break;  
  13. case 5:date_cn ="五"; break;  
  14. case 6:date_cn ="六"; break;  
  15. }  
  16. dateStr = (1900+date.getYear())+"年"+(date.getMonth()+1)+"月"+date.getDate()+  
  17. "日(星期" + date_cn + ")";  
  18. %> 
  19. document.write("<%=dateStr%>");  
  20. //======以下是test.jsp的源文件=============//  
  21. <%@ page language=”java” contentType=”text/html;charset=gb2312”%> 
  22. <html> 
  23. <head> 
  24. <title>include的兩種用法title> 
  25. <jsp:include page=”date.jsp” flush=”true”/> 
  26. <%--@ include file=”date.jsp” %--> 
  27. //我們?cè)谶@里用include的兩種不同形式來引入date.jsp這個(gè)文件.  
  28. <head> 
  29. <body> 
  30. <table><tr><td> 
  31. 有關(guān)jsp中include的兩種用法.敬請(qǐng)關(guān)注。  
  32. td>tr>table> 
  33. body> 
  34. html> 

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

  1. HTTP Status 500 ?  
  2. org.apache.jasper.JasperException: /date.jsp(0,0) Page directive:   
  3. can't have multiple occurrences of contentType 

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

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

  1. < %@ page language=”java” contentType=”text/html;charset=gb2312”%>  

這句代碼。解決的辦法是把date.JSP文件中的這句刪掉。刷新后再請(qǐng)求test.JSP頁面請(qǐng)求test.JSP在頁面顯示如下2003年12月10日 13:12:40有關(guān)JSP include的兩種用法.敬請(qǐng)關(guān)注。

這時(shí)我們還不能發(fā)現(xiàn)什么。還是去查看tomcat下的臨時(shí)文件吧。到那里去看看date.JSP文件的內(nèi)容是否已被加入到了test.JSP文件中。< 注.此處的tomcat裝在E盤根目錄下>

目錄E:tomcatworkStandalonelocalhosttest.在這個(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í),在輸出的< haed >之間加入了一些不是test.JSP頁面里面的代碼,新加入的內(nèi)容就是 date.JSP里面的代碼: 新加入了哪些內(nèi)容或是否真的加入了新的內(nèi)容請(qǐng)自己測(cè)試去看一下就會(huì)一目了然了.在這里不再詳述.

以上就是我們用< %@ include file=”date.JSP”%>這種形式得到的結(jié)果.

下面我們換用< JSP:include page=”dae.JSP” flush=”true”/>也就是將< %@ include file=”date.JSP”%>換成< JSP:include page=”dae.JSP” flush=”true”/>,然后請(qǐng)求test.JSP.2003? ê 12??10?? 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文件中重新把剛才去掉的

  1. <%@ page language=”java” contentType=”text/html;charset=gb2312”%> 

這行語句加入后刷新重新運(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ù).

  1. <jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” > 
  2. <jsp:param name=”fitstParamer” value=”firstValue”> 
  3. <jsp:param name=”lastParamer” value=”lastValue”> 
  4. jsp:include> 

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

【編輯推薦】

  1. JSP自定義標(biāo)簽由淺到深詳細(xì)講解
  2. 在JSP環(huán)境中配置使用fckeditor詳細(xì)講解
  3. 基于JSP實(shí)現(xiàn)數(shù)據(jù)庫(kù)中圖片的存儲(chǔ)與顯示
  4. 構(gòu)造JSP和Javabean開發(fā)和發(fā)布環(huán)境的方法
  5. JSP+JavaBean+Servlet工作原理實(shí)例講解
責(zé)任編輯:佚名 來源: builder
相關(guān)推薦

2009-02-23 14:17:00

include指令動(dòng)作

2009-09-24 10:06:55

PHP include

2009-06-29 16:36:00

JSP include

2009-07-01 10:30:00

Ruby on Rai

2010-07-09 17:13:56

UML用例圖

2021-03-03 08:05:53

C++項(xiàng)目函數(shù)

2012-06-26 10:40:43

Titanium

2011-08-30 16:43:32

SQL Server

2009-07-06 15:34:56

JSP和Servlet

2009-11-25 17:36:38

PHP函數(shù)includ

2009-07-02 11:25:33

JSP課程

2010-02-02 15:30:05

C++ include

2009-12-09 14:04:45

PHP include

2009-07-01 15:08:50

JSP指令和腳本元素

2013-01-30 16:07:46

2009-06-30 13:38:37

SERVLET和JSP

2009-07-06 09:34:19

JSP頁面

2011-03-14 09:36:36

LAMP調(diào)優(yōu)方法

2009-07-02 11:34:42

JSP指令JSP開發(fā)

2009-11-25 15:39:24

VS2003 Incl
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品国产一区二区三区免费 | 日本成人在线观看网站 | 亚洲精品一二区 | 777777777亚洲妇女 | 综合久久99| 国产精品99久久久久久动医院 | 久久一二| 日本一区二区不卡 | 国产精品国产成人国产三级 | 亚州午夜精品 | 日韩免费视频一区二区 | 久草视频在线播放 | 99视频久| 成人在线激情 | 亚洲成人在线视频播放 | av天天看 | 日韩视频在线播放 | www国产成人免费观看视频,深夜成人网 | 欧产日产国产精品国产 | 亚洲一区二区三区四区视频 | 夜夜艹 | 性视频一区 | 91久久久久久久久久久 | 国产成人免费视频网站视频社区 | av在线一区二区三区 | 国产成人精品久久二区二区 | 91免费看片| 国产成人99久久亚洲综合精品 | 九九在线精品视频 | 亚洲 一区| 亚洲精品一级 | 欧美极品在线播放 | 国产伦一区二区三区视频 | 99爱国产 | 视频三区 | 国产乱一区二区三区视频 | 色综合激情 | 国产精品免费播放 | 国产精品久久久久久影院8一贰佰 | 国产精品99999 | 手机在线观看av |