jsp学习之包含——include
http://blog.e23.cn/?uid-1255655-action-viewspace-itemid-134232
1.include:
Include?指令:?<%@?include?file="filename"?%>
Include?動作:?<jsp:include?page="page.jsp"?flush="true"?/>?
<%@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() %>
Displays in the page:
The current date and time are
Aug 30, 1999 2:38:40
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應用程序;??
- 執行時機:在請求處理階段。?
轉載于:https://www.cnblogs.com/qiufeihai/p/3625048.html
總結
以上是生活随笔為你收集整理的jsp学习之包含——include的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个Eclipse代码显示主题
- 下一篇: 征信黑户去哪里借钱