jsp中include的兩種用法


JSP中的include的兩種用法

 

1.兩種用法

<%@ include file=” ”%>

<jsp:include page=” ” flush=”true”/>

 

2.用法區別

(1)執行時間上區別

<%@ include file=”relativeURI”%>                   是在翻譯階段執行

<jsp:include page=”relativeURI” flush=”true” />  在請求處理階段執行.

 

(2)引入內容的不同

 

<%@ include file=” ”%>

jsp的include指令元素讀入指定頁面的內容。並把這些內容和本來的頁面融合到一起。(這個過程是在翻譯階段:也就是jsp被轉化成servlet的階段進行的。

<jsp:include page=”relativeURI” flush=”true” />引入執行頁面或servlet所天生的應答文本.

 

3.如何使include頁面攜帶入參

<jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” >

<jsp:param name=”fitstParamer” value=”firstValue”>

<jsp:param name=”lastParamer” value=”lastValue”>

</jsp:include>

 

4. 說明:翻譯階段

翻譯階段:

jsp頁面不能原封不動地被傳送給瀏覽器,全部的jsp元素都必須首先由服務器進行處理。這是通過將jsp頁面轉達化成servlet,然后執行這個servlet來結束的。服務器需要一個jsp容器來處理jsp頁面。jsp容器平常以servlet的情勢來實現,這個servlet經過配置,可以處理對jsp頁面的全部請求。

Jsp容器重視將jsp頁面轉化成servlet(稱為jsp頁面實現類—JSP Page implementation class),並編譯這個servlet。這兩步就組成了翻譯階段.

 

請求處理階段:

Jsp容器除了上面提到的重視將jsp頁面轉化成servlet,還重視調用jsp頁面實現類以處理每個請求並產生應答.這個階段我們就稱為請求處理階段.請求處理階段僅執行類文檔.

 

5.示例

服務器用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” %-->

<head>

<body>

<table><tr><td></td></tr></table>

</body>

</html>

 

先用<%@ 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頁面,正常。

 

查看tomcat下的臨時文檔,..\tomcat\work\Standalone\localhost\test目錄下會看到test_jsp.javatest_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”/>,然后請求test.jsp.此時會在頁面上看見.我們所引入date.jsp輸出的日期中中文出現了亂碼. 

所以在我們作include行動元素引入頁面時,實際只是引用了date.jsp這個文檔被轉化並被編譯后產生的servlet類文檔.既如此,date.jsp就是作為一個單獨的文檔在執行后才被test.jsp文檔運行時調用.由於date.jsp文檔中無指定字符編碼.所以出現了亂碼.解決辦法是在date.jsp文檔中重新把剛才去掉的

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

再查看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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM