JSP中的include的兩種用法__JSP

來源:互聯網
上載者:User

我們都知道在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”/>

<%--@ 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裡面的代碼: 新參加了哪些內容或是否真的參加了新的內容請自己測試去看一下就會

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.