jsp:include
<jsp:include>
包含一個靜態或動態文件.
JSP
語法
<jsp:include
page="{relativeURL
|
<%=
expression%>}"flush="true"
/>
or
<jsp:include
page="{relativeURL
|
<%=
expression
%>}"
flush="true"
>
<jsp:param
name="parameterName"
value="{parameterValue
|
<%=
expression
%>}"
/>
</jsp:include>
Examples
<jsp:include
page="scripts/login.jsp"
/>
<jsp:include
page="copyright.html"
/>
<jsp:include
page="/index.html"
/>
<jsp:include
page="scripts/login.jsp">
<jsp:param
name="urname"
value="jsmith"
/>
</jsp:include>
描述
<jsp:include>元素允許你包含動態文件和靜態文件,這兩種包含文件的結果是不同的。
如果文件僅是靜態文件,那么這種包含僅僅是把包含文件的內容加到jsp文件中去,
而如果這個文件是動態的,那么這個被包含文件也會被Jsp編譯器執行(這一切與asp相似)
你不能從文件名上判斷一個文件是動態的還是靜態的,比如aspcn.asp
就有可能只是
包含一些信息而已,而不需要執行。<jsp:include>能夠同時處理這兩種文件,因此你就
不需要包含時還要判斷此文件是動態的還是靜態的.
如果這個包含文件是動態的,那么你還可以用<jsp:param>還傳遞參數名和參數值。
屬性
page="{relativeURL
|
<%=
expression
%>}"
參數為一相對路徑,或者是代表相對路徑的表達式.
flush="true"
這里你必須使用flush="true",你不能使用fal值.缺省值為fal
<jsp:param
name="parameterName"
value="{parameterValue
|
<%=
expression
%>
}"
/>+<jsp:param>
子句能讓你傳遞一個或多個參數給動態文件。
你能在一個頁面中使用多個<jsp:param>來傳遞多個參數。
jsp頁面中include是什么意思
jsp的include是一種動作,有兩種,它們主要是為一個頁面導入一個固定的模塊頁面;
第一種:<jsp:include page=" "/>,其中page屬性中加要導入模板頁的名稱,加后綴
第二種:<@ include file=" "/>,file與page一樣;
jsp中include指令的作用是什么?
jsp中include指令的作用: 1,jsp向當前頁面加入另一文件的方法:<jsp:include page=”relativefileURL” flush=”true”/> 2,是用來向當前頁中插入一個靜態文件的內容,這個文件可能是html文件、jsp文件或其它文本文件,格式如下:<%@ include file=”include.inc”%>如:native.jsp:<body>native file start here.<br><%@ include file=”include.inc”%>native file end here.<br></body>include.inc:include file start here.<br><%! String str=”Here is include’s context!”;%><% out.pringln(str+”<br>”);%>include file end here.<br>運行native.jsp,結果如下:native file start here.include file start here.Here is include’s context!include file end here.native file end here.注意:因為include.inc文件是在編譯時才插入的,所以只改 include.inc文件內容,而不對原JSP頁面做修改,得到的結果仍將是以前的結果。(因為一開始JSP引擎就判斷了JSP頁面沒被改動過,就直接執行已存在的字節碼,而不對源代碼重新編譯,這樣對include做的修改也就在這沒有反映。)
jspinclude 和 include的區別
在jsp中include有兩種形式,分別是
<%@ include file=” ”%>
<jsp:include page=” ” flush=”true”/>
前者是指令元素、后者是行為元素。具體它們將在何處用?如何用及它們有什么區別?這應該是很多人看到它都會想到的問題。下面一起來看看吧。
通常當應用程序中所有的頁面的某些部分(例如標題、頁腳和導航欄)都相同的時候,我們就可以考慮用include。具體在哪些時候用<%@ include file=” ”%>,哪些時候用<jsp:include page=” ” flush=”true”/>.這種形式。首先要明白的是它們之間的區別。只有了解了它們用法的不同才理解該在何時去用以及如何選擇。
<%@ include file=” ”%>,jsp的include指令元素讀入指定頁面的內容。并把這些內容和原來的頁面融合到一起。(這個過程是在翻譯階段:也就是jsp被轉化成rvlet的階段進行的。)
這里對翻譯階段進行一下說明:我們知道,jsp頁面不能原封不動地被傳送給瀏覽器,所有的jsp元素都必須首先由服務器進行處理。這是通過將jsp頁面轉達化成rvlet,然后執行這個rvlet來完成的。服務器需要一個jsp容器來處理jsp頁面。jsp容器通常以rvlet的形式來實現,這個rvlet經過配置,可以處理對jsp頁面的所有請求。
Jsp容器負責將jsp頁面轉化成rvlet(稱為jsp頁面實現類?JSP Page implementation class),并編譯這個rvlet。這兩步就構成了翻譯階段.
由此我們就會知道:jsp頁面是把include指令元素所指定的頁面的實際內容(也就是代碼段)加入到引入它的jsp頁面中,合成一個文件后被jsp容器將它轉化成rvlet。可以看到這時會產生一個臨時class文件和一個java文件。
jsp中兩種include有何區別
通常都知道在jsp中include有兩種形式,分別是
< %@ include file=” ”%>
< jsp:include page=” ” flush=”true”/>
前者是指令元素、后者是行為元素。具體它們將在何處用?如何用及它們有什么區別?這應該是很多人看到它都會想到的問題。下面一起來看看吧。
通常當應用程序中所有的頁面的某些部分(例如標題、頁腳和導航欄)都相同的時候,我們就可以考慮用include。具體在哪些時候用< %@ include file=” ”%>,哪些時候用< jsp:include page=” ” flush=”true”/>.這種形式。首先要明白的是它們之間的區別。只有了解了它們用法的不同才理解該在何時去用以及如何選擇。
< %@ include file=” ”%>,jsp的include指令元素讀入指定頁面的內容。并把這些內容和原來的頁面融合到一起。(這個過程是在翻譯階段:也就是jsp被轉化成rvlet的階段進行的。
這里對翻譯階段進行一下說明:我們知道,jsp頁面不能原封不動地被傳送給瀏覽器,所有的jsp元素都必須首先由服務器進行處理。這是通過將jsp頁面轉達化成rvlet,然后執行這個rvlet來完成的。服務器需要一個jsp容器來處理jsp頁面。jsp容器通常以rvlet的形式來實現,這個rvlet經過配置,可以處理對jsp頁面的所有請求。
Jsp容器負責將jsp頁面轉化成rvlet(稱為jsp頁面實現類?JSP Page implementation class),并編譯這個rvlet。這兩步就構成了翻譯階段.
由此我們就會知道:jsp頁面是把include指令元素所指定的頁面的實際內容(也就是代碼段)加入到引入它的jsp頁面中,合成一個文件后被jsp容器將它轉化成rvlet。可以看到這時會產生一個臨時class文件和一個java文件。下面舉個例子。
服務器用tomcat,引入頁面的jsp文件叫test.jsp。被引入的頁面叫date.jsp.這個jsp文件里存放的是一個有關時間的jsp代碼,當前的上下文根設為test
//======date.jsp的源文件=====//
<%@ page language=”java” contentType="text/html;chart=gb2312"%>
<%
java.util.Date date=new java.util.Date();
String date_cn ="";
String dateStr = "";
switch(date.getDay())
{
ca 0:date_cn ="日"; break;
ca 1:date_cn ="一"; break;
ca 2:date_cn ="二"; break;
ca 3:date_cn ="三"; break;
ca 4:date_cn ="四"; break;
ca 5:date_cn ="五"; break;
ca 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;chart=gb2312”%>
<html>
<head>
<title>include的兩種用法</title>
<jsp:include page=”date.jsp” flush=”true”/>
<%--@ include file=”date.jsp” %-->
//我們在這里用include的兩種不同形式來引入date.jsp這個文件.
<head>
<body>
<table><tr><td>
有關jsp中include的兩種用法.敬請關注。
</td></tr></table>
</body>
</html>
在test.jsp 文件中,我們只輸出了一行文本“ 有關jsp中include的兩種用法.敬請關注。”,現在讓我們先用這種形式引入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;chart=gb2312”%>
這句代碼。解決的辦法是把date.jsp文件中的這句刪掉。刷新后再請求test.jsp頁面
請求test.jsp在頁面顯示如下
2007年8月12日 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轉化成了rvlet而得到的test_jsp.java這個文件。
相對應的test_jsp.class這個文件就是編譯test_jsp.java這個rvlet文件產生的類文件了。打開所產生的rvlet文件(test_jsp.java)。此時我們會發現,在test.jsp 文件被轉化成rvlet文件時,在輸出的< 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.
2007? ê 8??12?? 13:30:13
有關jsp中include的兩種用法.敬請關注。
此時會在頁面上看見.我們所引入date.jsp輸出的日期中中文出現了亂碼.什么原因?是因為include行為元素是在請求處理階段執行的(此處要對請求處理階段進行說明一下.Jsp容器除了上面提到的負責將jsp頁面轉化成rvlet外,還負責調用jsp頁面實現類以處理每個請求并產生應答.這個階段我們就稱為請求處理階段.請求處理階段僅執行類文件)。
所以在我們作include行為元素引入頁面時,實際只是引用了date.jsp這個文件被轉化并被編譯后產生的rvlet類文件.既如此, date.jsp就是作為一個單獨的文件在執行后才被test.jsp文件運行時調用.由于date.jsp文件中沒有指定字符編碼.所以出現了亂碼.解決辦法是在date.jsp文件中重新把剛才去掉的
這行語句加入后刷新重新運行.此時頁面顯示正確,并跟用include指令正常運行時一樣.再查看tomcat下的臨時文件會發現.此時多出了一個 date_jsp.java文件和一個date_jsp.class文件.這兩個文件得來的方式跟test_jsp.java和 test_jsp.class文件得來的方式一樣.再查看一下此時test_jsp.java文件的代碼會發現.此時只新增加了一句代碼:
JspRuntimeLibrary.include(request, respon, "date.jsp", out, true);
它并沒有把date.jsp文件的代碼加入到test.jsp.
只是在運行時引入了date.jsp頁面執行后所產生的應答.這意味著我們可以指定任何能夠產生應答的Web資源,(例如一個rvlet或一個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=”” flush=”true” />
以下是對include 兩種用法的區別
主要有兩個方面的不同;
1.執行時間上:
< %@ include file=”relativeURI”%> 是在翻譯階段執行
< jsp:include page=”relativeURI” flush=”true” /> 在請求處理階段執行.
2.引入內容的不同:
< %@ include file=”relativeURI”%>
引入靜態文本(html,jsp),在JSP頁面被轉化成rvlet之前和它融和到一起.
< jsp:include page=”relativeURI” flush=”true” />引入執行頁面或rvlet所生成的應答文本.
另外在兩種用法中file和page屬性都被解釋為一個相對的URI.如果它以斜杠開頭,那么它就是一個環境相關的路徑.將根據賦給應用程序的URI的前綴進行解釋,如果它不是以斜杠開頭,那么就是頁面相關的路徑,就根據引入這個文件的頁面所在的路徑進行解釋.
JSP中include指令和動作標識include的區別
1.include指令
includeJSP頁面轉換Servlet前JSP代碼插入其主要優點功能強所包含代碼含總體影響主頁面JSP構造比屬性、定義文檔類型設定缺點難于維護要包含頁面發更改更改主頁面主頁面自查看包含頁面否發更改
include指令語格式
2.include作
jsp:include作主頁面請求級頁面輸包含進盡管包含頁面輸能含JSP些頁面其資源所產結服務器按照式指向包含資源URL進行解釋URLServlet或JSP頁面服務器通式運行包含頁面產輸放主頁面種式與RequestDispatcher類include致優點包含頁面發更改須主頁面做修改缺點所包含級頁面輸非級頁面實際代碼所包含頁面能使用任何能整體影響主頁面JSP構造
jsp:include作完整語
其jsp:include間能空格page屬性指定包含頁面屬性必需指向某種資源相URL相URL/則其解釋相于主頁面路徑;/URL解釋相于前WEB應用根目錄服務器根目錄該URL由服務器解釋由用戶瀏覽器解釋像面行代碼由用戶瀏覽器進行解釋按照相于服務器根目錄進行解釋