亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP中include指令和include行為區別

2024-09-05 00:19:20
字體:
來源:轉載
供稿:網友

 我們都知道在jsp中include有兩種形式,分別是
<%@ include file=” ”%>
<jsp:include page=” ” flush=”true”/>

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

    通常當應用程序中所有的頁面的某些部分(例如標題、頁腳和導航欄)都相同的時候,我們就可以考慮用include。具體在哪些時候用<%@ include file=” ”%>,哪些時候用<jsp:include page=” ” flush=”true”/>.這種形式。首先要明白的是它們之間的區別。只有了解了它們用法的不同才理解該在何時去用以及如何選擇。
<%@ include file=” ”%>,jsp的include指令元素讀入指定頁面的內容。并把這些內容和原來的頁面融合到一起。(這個過程是在翻譯階段:也就是jsp被轉化成servlet的階段進行的。

    這里對翻譯階段進行一下說明:我們知道,jsp頁面不能原封不動地被傳送給瀏覽器,所有的jsp元素都必須首先由服務器進行處理。這是通過將jsp頁面轉達化成servlet,然后執行這個servlet來完成的。服務器需要一個jsp容器來處理jsp頁面。jsp容器通常以servlet的形式來實現,這個servlet經過配置,可以處理對jsp頁面的所有請求。

    jsp容器負責將jsp頁面轉化成servlet(稱為jsp頁面實現類?jsp page implementation class),并編譯這個servlet。這兩步就構成了翻譯階段.

    由此我們就會知道:jsp頁面是把include指令元素所指定的頁面的實際內容(也就是代碼段)加入到引入它的jsp頁面中,合成一個文件后被jsp容器將它轉化成servlet??梢钥吹竭@時會產生一個臨時class文件和一個java文件。下面舉個例子。

    服務器用tomcat,引入頁面的jsp文件叫test.jsp。被引入的頁面叫date.jsp.這個jsp文件里存放的是一個有關時間的jsp代碼,當前的上下文根設為test
//======date.jsp的源文件=====//
<%@ page language=”java” contenttype="text/html;charset=gb2312"%>
<%
java.util.date date=new java.util.date();
string date_cn ="";
string datestr = "";
switch(date.getday())
{
case 0:date_cn ="日"; break;
case 1:date_cn ="一"; break;
case 2:date_cn ="二"; break;
case 3:date_cn ="三"; break;
case 4:date_cn ="四"; break;
case 5:date_cn ="五"; break;
case 6:date_cn ="六"; break;
}
datestr = (1900+date.getyear()) + "年" + (date.getmonth()+1) + "月" + date.getdate() + "日(星期" + date_cn + ")";
%>
document.write("<%=datestr%>");
//======以下是test.jsp的源文件=============//
<%@ page language=”java” contenttype=”text/html;charset=gb2312”%>
<html>
<head>
<title>include的兩種用法</title>
<jsp:include page=”date.jsp” flush=”true”/>
<%[email protected] include file=”date.jsp” %-->
//我們在這里用include的兩種不同形式來引入date.jsp這個文件.
<head>
<body>
<table><tr><td>
有關jsp中include的兩種用法.敬請關注。
</td></tr></table>
</body>
</html>

      在test.jsp 文件中,我們只輸出了一行文本“ 有關jsp中include的兩種用法.敬請關注?!?現在讓我們先用<%@ include file=”date.jsp” %>這種形式引入date.jsp這個文件。你想會出現什么問題了嗎?此時出現了錯誤提示:
http status 500 ?
org.apache.jasper.jasperexception: /date.jsp(0,0) page directive: can't have multiple occurrences of contenttype
以下還有一堆錯誤,但我們只要看這里就知道問題的所在了。狀態碼為http 500服務器內部錯誤。再看下面的提示。在date.jsp頁面中不能指定多個contenttype.

    原因就在這里了。是因為在翻譯階段,date.jsp文件的代碼被原封不動地加入到了test.jsp頁面從而合成一個文件。合成后的文件中就會相同的:
<%@ page language=”java” contenttype=”text/html;charset=gb2312”%>
這句代碼。解決的辦法是把date.jsp文件中的這句刪掉。刷新后再請求test.jsp頁面
請求test.jsp在頁面顯示如下
2003年12月10日 13:12:40
有關jsp中include的兩種用法.敬請關注。

這時我們還不能發現什么。還是去查看tomcat下的臨時文件吧。到那里去看看date.jsp文件的內容是否已被加入到了test.jsp文件中。
<注.此處的tomcat裝在e盤根目錄下>
目錄
e:/tomcat/work/standalone/localhost/test.
在這個目錄下會看到
test_jsp.java和test_jsp.class兩個文件。

   這里的java文件就是jsp容器將jsp轉化成了servlet而得到的test_jsp.java這個文件。

     相對應的test_jsp.class這個文件就是編譯test_jsp.java這個servlet文件產生的類文件了。打開所產生的servlet文件(test_jsp.java)。此時我們會發現,在test.jsp 文件被轉化成servlet文件時,在輸出的<haed>之間加入了一些不是test.jsp頁面里面的代碼,新加入的內容就是 date.jsp里面的代碼: 新加入了哪些內容或是否真的加入了新的內容請自己測試去看一下就會一目了然了.在這里不再詳述.

以上就是我們用<%@ include file=”date.jsp”%>這種形式得到的結果.
下面我們換用<jsp:include page=”dae.jsp” flush=”true”/>也就是將
<%@ include file=”date.jsp”%>換成<jsp:include page=”dae.jsp” flush=”true”/>,然后請求test.jsp.
2003? ê 12??10?? 13:30:13
有關jsp中include的兩種用法.敬請關注。

    此時會在頁面上看見.我們所引入date.jsp輸出的日期中中文出現了亂碼.什么原因?是因為include行為元素是在請求處理階段執行的(此處要對請求處理階段進行說明一下.jsp容器除了上面提到的負責將jsp頁面轉化成servlet外,還負責調用jsp頁面實現類以處理每個請求并產生應答.這個階段我們就稱為請求處理階段.請求處理階段僅執行類文件)。

   所以在我們作include行為元素引入頁面時,實際只是引用了date.jsp這個文件被轉化并被編譯后產生的servlet類文件.既如此, date.jsp就是作為一個單獨的文件在執行后才被test.jsp文件運行時調用.由于date.jsp文件中沒有指定字符編碼.所以出現了亂碼.解決辦法是在date.jsp文件中重新把剛才去掉的
<%@ page language=”java” contenttype=”text/html;charset=gb2312”%>
這行語句加入后刷新重新運行.此時頁面顯示正確,并跟用include指令正常運行時一樣.再查看tomcat下的臨時文件會發現.此時多出了一個 date_jsp.java文件和一個date_jsp.class文件.這兩個文件得來的方式跟test_jsp.java和 test_jsp.class文件得來的方式一樣.再查看一下此時test_jsp.java文件的代碼會發現.此時只新增加了一句代碼:
jspruntimelibrary.include(request, response, "date.jsp", out, true);

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

   只是在運行時引入了date.jsp頁面執行后所產生的應答.這意味著我們可以指定任何能夠產生應答的web資源,(例如一個servlet或一個jsp頁面),只要這些資源所產生的類型和jsp頁面產生的內容類型相同.jsp容器將通過一個內部的函數調用來執行指定的資源.因此,這些被引入的資源可以幫助處理原來的請求,所以這些資源可以訪問請求作用域內的所有對象.以及所有原來的請求參數.

    由于在主頁面被請求時,這些頁面還沒有被引入到主頁面中,所以你可以對page屬性使用一個請求時屬性值,以便根據運行時的情況來決定要引入哪一個頁面.還可以添加一些將被引入的頁面讀取的請求參數.
<jsp:include page=”<%=pageselectedatruntime%>” flush=”true” >
<jsp:param name=”fitstparamer” value=”firstvalue”>
<jsp:param name=”lastparamer” value=”lastvalue”>
</jsp:include>

    如果修改了被引入的jsp頁面,那么可以立刻使用該頁面的最新版本,這是因為對待被引入的頁面的方式與對待由瀏覽器直接調用的jsp頁面的方式完全相同.即容器檢測頁面的變化,并自動進入翻譯階段,以得到頁面的最新版本.

(注意,include行為元素同jsp其它元素一樣,沒有行為體時要以”/”結束.就像下面這樣.
<jsp:include page=”<%=pageselectedatruntime%>” flush=”true” />)

以下是對include 兩種用法的區別
主要有兩個方面的不同;
一:執行時間上:
<%@ include file=”relativeuri”%> 是在翻譯階段執行
<jsp:include page=”relativeuri” flush=”true” /> 在請求處理階段執行.
二:引入內容的不同:
<%@ include file=”relativeuri”%>
引入靜態文本(html,jsp),在jsp頁面被轉化成servlet之前和它融和到一起.
<jsp:include page=”relativeuri” flush=”true” />引入執行頁面或servlet所生成的應答文本.
另外在兩種用法中file和page屬性都被解釋為一個相對的uri.如果它以斜杠開頭,那么它就是一個環境相關的路徑.將根據賦給應用程序的uri的前綴進行解釋,如果它不是以斜杠開頭,那么就是頁面相關的路徑,就根據引入這個文件的頁面所在的路徑進行解釋.更多有關url是如何解釋的請參考相關資料或書籍

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久av红桃一区二区小说| 欧美成人精品在线视频| 亚洲欧美在线一区二区| 国产欧美日韩中文字幕在线| 在线观看国产精品淫| 久久99青青精品免费观看| 在线看日韩欧美| 欧美视频在线视频| 久久这里只有精品视频首页| 亚洲一区二区久久久| 亚洲女同精品视频| 成人午夜一级二级三级| 欧美成人精品三级在线观看| 这里只有精品丝袜| 清纯唯美亚洲综合| 91九色国产社区在线观看| 亚洲深夜福利视频| 国产精品入口日韩视频大尺度| 中文字幕国产精品久久| 精品福利在线视频| 欧美性视频网站| 色婷婷综合久久久久| 日韩av在线网| 亚洲乱码av中文一区二区| 日韩电影在线观看免费| 精品视频在线导航| 精品视频在线播放免| 欧美区二区三区| 国产精品日韩一区| 国产精品久久在线观看| 欧美性感美女h网站在线观看免费| 国产性猛交xxxx免费看久久| 最近中文字幕mv在线一区二区三区四区| 国产日产久久高清欧美一区| 色妞一区二区三区| 精品久久久久久久久久久久久久| 91中文在线视频| 日韩精品中文字幕久久臀| 亚洲综合社区网| 神马国产精品影院av| 国产91在线播放九色快色| 福利一区视频在线观看| 亚洲精品视频在线观看视频| 亚洲成年网站在线观看| 精品夜色国产国偷在线| 热久久这里只有| 亚洲网站视频福利| 日韩欧美成人区| 亚洲人免费视频| 久久精品国产亚洲精品| 日韩国产高清污视频在线观看| 91欧美激情另类亚洲| 日韩免费观看高清| 亚洲第一页在线| 日韩动漫免费观看电视剧高清| 精品美女永久免费视频| 久久91亚洲精品中文字幕奶水| 91精品久久久久久久| 亚洲国产精品福利| 91伊人影院在线播放| 国产日韩精品入口| 岛国视频午夜一区免费在线观看| 精品亚洲va在线va天堂资源站| 97人洗澡人人免费公开视频碰碰碰| 亚洲第一精品夜夜躁人人躁| 久久久久久久久久久久久久久久久久av| 亚洲成人免费在线视频| 亚洲三级 欧美三级| 成人激情电影一区二区| 日韩经典一区二区三区| 日韩中文理论片| 尤物精品国产第一福利三区| 成人a级免费视频| 国产精品久久久久久久久免费看| 亚洲国产一区二区三区在线观看| 国产成人aa精品一区在线播放| 中文欧美在线视频| 国产一级揄自揄精品视频| 国产成人久久精品| 亚洲国产精品电影| 亚洲精品97久久| 亚洲激情小视频| 欧美老少配视频| 欧美日韩在线观看视频| 亚洲欧洲免费视频| 久久久爽爽爽美女图片| 在线视频日本亚洲性| 亚洲大胆人体视频| 国产成人精品免费久久久久| 亚洲欧美国产精品专区久久| 日韩高清电影好看的电视剧电影| 国产精品自拍小视频| 成人a免费视频| 成人黄色片在线| 亚洲精品动漫100p| 成人黄在线观看| 亚洲天堂av在线免费| 亚洲性xxxx| 狠狠躁夜夜躁人人爽天天天天97| 国产成人精品av在线| 久久天天躁狠狠躁夜夜av| 97热精品视频官网| 久久国产精品亚洲| 黄色91在线观看| 伊人青青综合网站| 8x海外华人永久免费日韩内陆视频| 欧美极品少妇xxxxⅹ喷水| 亚洲第一免费播放区| 亚洲国产精彩中文乱码av在线播放| 一本色道久久88综合亚洲精品ⅰ| 亚洲精品色婷婷福利天堂| 国产成人精品999| 久久中文字幕在线视频| 成人情趣片在线观看免费| 欧美一区视频在线| 国产成一区二区| 色综合久久88色综合天天看泰| 国语对白做受69| 国产精品久久久久久久午夜| 国产精品一区二区久久国产| 欧美成人午夜激情视频| 欧美性猛xxx| 中文字幕av一区二区三区谷原希美| 神马久久桃色视频| 亚洲高清不卡av| 91精品综合久久久久久五月天| 91色琪琪电影亚洲精品久久| 欧美激情国内偷拍| 日韩经典一区二区三区| 欧美一级电影免费在线观看| 深夜福利日韩在线看| 日韩成人久久久| 日韩国产高清污视频在线观看| 日韩免费av片在线观看| 欧美性猛交xxxx富婆| 久久久久久有精品国产| 国产精自产拍久久久久久| 亚洲国产精品成人va在线观看| 国产91色在线|免| 中文日韩电影网站| 国产欧美一区二区三区久久人妖| 亚洲天堂男人天堂女人天堂| 久久精品99无色码中文字幕| 欧美激情在线播放| 欧美大胆在线视频| 久久免费视频在线| 久久国产精品亚洲| 色婷婷亚洲mv天堂mv在影片| 狠狠操狠狠色综合网| 国产精品第三页| 庆余年2免费日韩剧观看大牛| 久久国产精品久久久| 久久人人爽人人爽爽久久| 91极品视频在线| 国产成人精品视频在线| 日韩激情av在线播放| 色偷偷88888欧美精品久久久| 欧美精品中文字幕一区| 久久久精品视频在线观看| 久久久久久久久久国产精品| 国产精品久久久久久久久久久新郎| 日韩视频一区在线| 日韩美女在线播放| 欧美—级高清免费播放|