1. 程式人生 > >JSP中的include的兩種用法

JSP中的include的兩種用法

我們都知道在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是怎麼說明的請參考相干材料或書籍.

這只是個人的一些懂得.程度有限,請多多指導.並希看能與大家交換,共同進步,希看多提建議.

相關推薦

jspinclude使用方法

有兩種include其他頁面的方法,一種是說明標籤<%@ include  file="xxx.jsp"%>,一種是動作標籤<jsp:include  page="xxx.jsp"/> 。標籤是靜態引入,動作標籤是動態。靜態引入是把b.jsp的原始碼拼

jspinclude的不同用法

動態include用jsp:include動作實現 <jsp:include page="included.jsp" flush="true" />它總是會檢查所含檔案中的變化,適合用於包含動態頁面,並且可以帶引數.     靜態INCLUDE用inclu

JSP註釋方式

JSP頁面中的註釋 語法 例子 <%--使用out.print("Hello JSP");方式輸出 --%> <% for(int i=0;i&

JSP包含頁面的方法

第一種:include指令:當JSP轉換成Servlet時引入指定檔案 <%@ page contentType="text/html; charset=GB2312" language="java" errorPage=""%> <%@ include

jspinclude用法

1.兩種用法 靜態include:  <%@ inlcude file =”header.jsp” %> 此時引入的是靜態的jsp檔案,它將引入的jsp中的原始碼原封不動地附加到當前檔案中,所以在jsp程式中使用這個指令的時候file裡面的值(即要匯入的檔案)不能帶多餘

jspinclude用法

<%@ include file=” ”%> include指令 <jsp:include page=” ” flush=”true”/> include動作 主要有兩方面的不同: 1.執行時間上 <%@ include file=” ”

JSPinclude用法

我們都知道在jsp中include有兩種情勢,分別是     <%@ include file=” ”%>                                       ——指令元素     <jsp:include page=” ” flu

js——jspinclude用法

1.兩種用法 <%@ include file=” ”%> <jsp:include page=” ” flush=”true”/> 2.用法區別 (1)執行時間上區別 <%@ include file=”relativ

jspinclude方式

JSP中include的兩種方法     1.include指令: 1 <%@include file="檔案的絕對路徑或者相對路徑"%>     file屬性是必填的(絕對或相對路徑),但它不支援任何的表示式,也不允許通過?掛參方式來

jsp include用法區別

轉載出:http://blog.csdn.net/xueyepiaoling/article/details/6258369 一:執行時間上: <%@ include file=”relativeURI”%>                   是在翻譯階段執

Study Jspinclude用法

一、我們都知道在jsp中include有兩種形式,分別是: <%@ include file=""%>  <jsp:include page=""  flush="true"/>  前者是指令元素、後者是行為元素。具體它們將在何處用?如何用及它們有

奪命雷公狗C/C++-----5---include用法

編寫 logs ima log -1 們的 頭文件 技術 我們 我們的include是有兩種用法的,如: 上面這種就是在頭文件方式進行引入的, include <> 括號的是包含系統文件的。。。。 還有一種,比如我首先寫個頭文件先,如下所示:

#include指令載入外部庫的用法

C中可以通過#include <header.h>和#include "header.h"來載入檔案,兩者的區別主要是在include載入的搜尋路徑上存在不同。 區別是: 採用#incl

JAVAsuper的用法

http://www.cnblogs.com/rollenholt/articles/2033989.html 通過用static來定義方法或成員,為我們程式設計提供了某種便利,從某種程度上可以說它類似於C語言中的全域性函式和全域性變數。但是,並不是說有了這種便利,你便可以隨處使用,如果那樣的話,你

c++ operator的用法

c++中的operator 有兩種用法,一種是(operator overloading)運算子過載,一種是(operator casting)操作隱式轉換 例項程式碼如下: #include <iostream> using namespace std;

學習筆記-ListView控制元件的重新整理-setTag的用法

在ListView中,有時候需要動態更新其中某些控制元件的內容。更新的方法有以下幾個: 方法一:更新所有item的資訊 在更新後,直接呼叫adapter.notifyDataSetChanged();  但是這是最耗資源的做法。通常我們只想更新一個item中的其中某個vie

C++操作符operator的用法

1.operator overloadingC++可能通過operator 過載操作符,格式如下:型別T operator 操作符 (),如比過載+,如下所示template<typename T> class A{public:     const T oper

C++模板的typename的用法

在模板引數中,typename與class的使用是一樣,如: template<typename T> class A{}; template<class T>

java for迴圈的用法

java 中的for迴圈巢狀的兩種用法,下面展示了示例程式碼:第一種:內外獨立迴圈,意思就是外層迴圈和內層迴圈互相干擾,內層迴圈不依賴於外層迴圈。例子:用"*"輸出一個正方形,程式碼如下:結果如下圖:第二種:內層迴圈依賴外層迴圈,程式碼及結果如下所示結果如下:總結:  第一種

【JAVA學習】Java迭代器Iterator遍歷的用法

迭代器的三個方法 2. 使用hasNext()檢查序列中是否還有元素,有則返回true。 3.使用remove()將迭代器新返回的元素刪除。 兩種迴圈方法: //使用for迴圈迭代 for (Iterator iter = l.iterator(); iter.h