jsp學習之包含——include

http://blog.e23.cn/?uid-1255655-action-viewspace-itemid-134232html

1.include:java

Include 指令: <%@ include file="filename" %>web

Include 動做: <jsp:include page="page.jsp" flush="true" /> express

<%@include %>指令將會在JSP編譯時插入一個包含文本或代碼的文件,當你使用<%@ include %>指命時,這個包含的過程就當是靜態的。靜態的包含就是指這個被包含的文件將會被插入到JSP文件中去,這個包含的文件能夠是JSP文件,HTML文件,文本文件。若是包含的是JSP文件,這個包含的JSP的文件中代碼將會被執行。  
若是你僅僅只是用include 來包含一個靜態文件。那麼這個包含的文件所執行的結果將會插入到JSP文件中放<% @ include %>的地方。一旦包含文件被執行,那麼主JSP文件的過程將會被恢復,繼續執行下一行這個被包含文件能夠是html文件,jsp文件,文本文件,或者只是一段Java代碼,可是你得注意在這個包含文件中不能使用<html>,</html>,<body>,</body>標記,由於這將會影響在原JSP文件中一樣的標記 ,這樣作有時會致使錯誤.編程

例子 (include.jsp:)

<html> <head><title>An Include Test</title></head> <body bgcolor="white"> <font color="blue"> The current date and time are <%@ include file="date.jsp" %> </font> </body> </html>   
瀏覽器

date.jsp:   
<%@ page import="java.util.*" %> <%= (new java.util.Date() ).toLocaleString() %>
session

Displays in the page:多線程

The current date and time are jsp

Aug 30, 1999 2:38:40 ui

2.<jsp:include>
包含一個靜態或動態文件:

<jsp:include page="{relativeURL | <%= expression%>}" flush="true" />

<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="username" value="jsmith" />

</jsp:include>

<jsp:include>元素容許你包含動態文件和靜態,這兩種包含文件的結果是不一樣的。若是文件僅是靜態文件,那麼這種包含僅僅是把包含文件的內容加到jsp文件中去,而若是這個文件動態的,那麼這個被包含文件也會被Jsp編譯器執行

若是這個包含文件是動態的,那麼你還能夠用<jsp:param>傳遞參數名和參數值

屬性:
page="{relativeURL | <%= expression %>}"參數爲一相對路徑,或者是表明相對路徑的表達式.

總結:

<%@include   file=...%>屬於Directive,翻譯時處理,對象:靜態   
 <jsp:include   page=...%>屬於Action,請求時處理,對象:靜態/動態
  
   
  include編譯指令是在JSP程序的轉換時期(即JSP程序被翻譯爲JAVA程序的時期)就先將file屬性所指定的程序內容嵌入,讓它和主JSP程序結合爲一個總體而後才使用JAVA編譯器編譯轉換所得的JAVA程序文件,並將其載入JSP引擎中,file屬性所指定的文件不會被單獨翻譯和編譯。   
 而<jsp:include>操做指令page屬性所指定的文件在主JSP程序的轉換時期是不會被編譯的,它只在客戶端請求時期若是被執行到纔會被動態地編譯載入,而page屬性所指定的JSP程序會被單獨轉換編譯爲Servlet   Class二進制代碼。
下面舉個例子:
//======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>
 上面例子用紅色寫法運行的時候會出錯。是由於在翻譯階段,date.jsp文件的代碼被原封不動地加入到了test.jsp頁面從而合成一個文件。合成後的文件中就會相同的:
<%@ page language=」java」 contentType=」text/html;charset=gb2312」%>
這句代碼。解決的辦法是把date.jsp文件中的這句刪掉。刷新後再請求test.jsp頁面。
 
那麼去掉後咱們用藍色的寫法來運行,獲得結果會是亂碼。由於在咱們做include行爲元素引入頁面時,實際只是引用了date.jsp這個文件被轉化並被編譯後產生的servlet類文件.既如此, date.jsp就是做爲一個單獨的文件在執行後才被test.jsp文件運行時調用.因爲date.jsp文件中沒有指定字符編碼.因此出現了亂碼.解決辦法是在date.jsp文件中從新把剛纔去掉的
<%@ page language=」java」 contentType=」text/html;charset=gb2312」%>這行語句加入後刷新從新運行.

3.Page 指令:
例子:

<%@ page import="java.util.*, java.lang.*" %>  
<%@ page buffer="5kb" autoFlush="false" %>
<%@ page errorPage="error.jsp" %>

<%@ page %>指令做用於整個JSP頁面,一樣包括靜態的包含文件。可是<% @ page %>指令不能做用於動態的包含文件,好比 <jsp:include>

不管你把<% @ page %>指令放在JSP的文件的哪一個地方,它的做用範圍都是整個JSP頁面。不過,爲了JSP程序的可讀性,以及好的編程習慣,最好仍是把它放在JSP文件的頂部. 

屬性:  
language="java"
聲明腳本語言的種類,暫時只能用"java"
extends="package.class"
標明JSP編譯時須要加入的Java Class的全名,可是得慎重的使用它,它會限制JSP的編譯能力.
import="{package.class | package.* }, ..."
須要導入的Java包的列表,這些包就做用於程序段,表達式,以及聲明

session="true | false"
設定客戶是否須要HTTP Session.(學過ASP的人,應該對它不陌生)若是它爲true,那麼Session是有用的。
若是它有false,那麼你就不能使用session對象,以及定義了scope=session的<jsp:useBean>元素。這樣的使用會致使錯誤.

缺省值是true.
buffer="none | 8kb | sizekb"

buffer的大小被out對象用於處理執行後的JSP對客戶瀏覽器的輸出。缺省值是8kb
autoFlush="true | false" 
設置若是buffer溢出,是否須要強制輸出,若是其值被定義爲true(缺省值),輸出正常,若是它被設置爲false,若是這個buffer溢出,就會致使一個意外錯誤的發生.若是你把buffer設置爲none,那麼你就不能把autoFlush設置爲false. isThreadSafe="true | false" 
設置Jsp文件是否能多線程使用。缺省值是true,也就是說,JSP可以同時處理多個用戶的請求,若是設置爲false,一個jsp只能一次處理一個請求

info="text"

一個文本在執行JSP將會被逐字加入JSP中,你可以使用Servlet.getServletInfo方法取回。errorPage="relativeURL"   
設置處理異常事件的JSP文件。

isErrorPage="true | false"  
設置此頁是否爲出錯頁,若是被設置爲true,你就能使用exception對象.

contentType="mimeType [ ;charset=characterSet ]" | "text/html;charset=ISO-8859-1"
設置MIME類型 。缺省MIME 類型是: text/html, 缺省字符集爲 ISO-8859-1.

<c:import url="header.jsp"/>

    • <c:import>行爲和<jsp:include>相同;
    • 另外它還能夠從外部資源引入數據,好比不一樣的web應用程序;  
    • 執行時機:在請求處理階段。 
相關文章
相關標籤/搜索