




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章JSP語法
■3.1了解JSP的基本構(gòu)成N
-3.2JSP的指令標(biāo)識弋
■3.3JSP的腳本標(biāo)識q
■3.4JSP的注釋q
■3.5動作標(biāo)識<
3.1了解JSP的基本構(gòu)成
在學(xué)習(xí)JSP語法之前,首先來初步了解一下
JSP頁面的基本結(jié)構(gòu)。請看下面的代碼:
V--JSP中的指令標(biāo)識—>
<%@pagelanguage="java"contentType="text/html;charset=gb2312"%>
<%@pageimport-'java.util.Date"%>
<!-HTML標(biāo)記語言一〉
<html>
<head><title>JSP頁面的基本構(gòu)成</title></head>「在上面的代碼中,并沒有包括JSP
<body>
<center>中的所有元素,但它仍然構(gòu)成了一
<!-嵌入的Java代碼->個動態(tài)的JSP程序。訪問包含了該
<%Stringtoday=newDate().toLocaleString();%>代碼的JSP頁面后,將顯示用戶訪
<!--JSP表達(dá)式一〉問該頁面的當(dāng)前時間。暫且不對其
今天是:<%=today%>功能實(shí)現(xiàn)進(jìn)行講解,先來介紹該頁
<!-HTML標(biāo)記語言-->\面的組成元素。
</center>
</body>
</html>
3.1Java語言基礎(chǔ)
3.1.1JSP中的指令標(biāo)識'
3.1.2HTML標(biāo)記語言N
3.1.3嵌入的Java代碼片段q
3.1.4JSP表達(dá)式N
3.1.1JSP中的指令標(biāo)識
利用JSP指令可以使服務(wù)器按照指令的設(shè)置
來執(zhí)行動作和設(shè)置在整個JSP頁面范圍內(nèi)有效
的屬性。例如,上述代碼中的第一個page指令
指定了在該頁面中編寫JSF叩一t_n_t上>匚、:x?
Java,并且還指定了頁面在把輸出結(jié)果傳送到瀏覽器上的時候,瀏覽
器必須啟動相應(yīng)的應(yīng)用程序來處理這個輸出
JSP字符的編碼;第二個|文檔。這可以通過多種類型MIME(多功能
網(wǎng)際郵件擴(kuò)充協(xié)議)來完成。在HTTP中,
能類似于Java中的importMIME類型被定義在Content-Typeheader中。
JSP文件中導(dǎo)入需要用到I超文本標(biāo)記語言文本:text/html
普通文本:text/plain
au聲音文件:audio/basic
GIF圖形:image/gif
JPEG圖形:image/jpeg
3.1.2HTML標(biāo)i己語言
HTML標(biāo)記在JSP頁面中作為靜態(tài)的內(nèi)容,
瀏覽器將會識別這些HTML標(biāo)記并執(zhí)行。在
JSP程序開發(fā)中,這些HTML標(biāo)記語言主要負(fù)
責(zé)頁面的布局、設(shè)計(jì)和美觀,可以說是網(wǎng)頁的
框架。
3.1.3嵌入的Java代碼片段
嵌入到JSP頁面中的Java代碼,在客戶端瀏
覽器中是不可見的。它們需要被服務(wù)器執(zhí)行,
然后由服務(wù)器將執(zhí)行結(jié)果與HTML標(biāo)記語言一
同發(fā)送給客戶端進(jìn)行顯示。通過向JSP頁面中
嵌入Java代碼,可以使該頁面生成動態(tài)的內(nèi)容。
3.1.4JSP表達(dá)式
JSP表達(dá)式主要用于數(shù)據(jù)的輸出。它可以向
頁面輸出內(nèi)容以顯示給用戶,還可以用來動態(tài)
地指定HTML標(biāo)記中屬性的值。
3.2JSP的指令標(biāo)識
指令標(biāo)識在客戶端是不可見的,它是被服務(wù)器
解釋并被執(zhí)行的。通過指令標(biāo)識可以使服務(wù)器按
照指令的設(shè)置來執(zhí)行動作和設(shè)置在整個JSP頁面范
圍內(nèi)有效的屬性。在一個指令中可以設(shè)置多個屬
性,這些屬性的設(shè)置可以影響到整個頁面。
在JSP中主要包含3種指令,分別是page指令
(頁面指令)、include指令和taglib指令。
指令通常以“v%@”標(biāo)記開始,以“%>”標(biāo)記結(jié)
束,以上3種指令的通用格式如下:
3.2JSP的指令標(biāo)識
<%?指令名稱屬性1二"屬性值”屬性2=”屬性值”...%>
下面將分別介紹JSP的3種指令格式。
■3.2.1使用page指令7
■3.2.2使用include指令7
■3.2.3使用taglib指令<
3.2.1使用page指令
page指令即頁面指令,可以定義在整個JSP頁
面范圍內(nèi)有效的屬性,其使用格式如下:________
<%@pageattributel-'valuel"attribute2="value2"...%>
page指令可以放在JSP頁面中的任意行,但為了利于程序
代碼的閱讀,習(xí)慣上放在文件的開始部分。Page指令具有多
種屬性,通過這些屬性的設(shè)置可以影響到當(dāng)前的JSP頁面。
例如,在頁面中正確設(shè)置當(dāng)前頁面響應(yīng)的MIME類型為
text/html,如果MIME類型設(shè)置不正確,則當(dāng)服務(wù)器將數(shù)據(jù)傳
輸給客戶端進(jìn)行顯示時,客戶端將無法識別傳送來的數(shù)據(jù),從
而不能正確地顯示內(nèi)容。
3.2.1使用page指令
Page指令中除import屬性外,其他屬性只能在
指令中出現(xiàn)一次。Page指令具有的屬性如下:
<%@page
[language-'java"]
[contentType="mimeType;charset=CHARSET"]
[import="{package.class|pageage.*},..]
[extends="package.class"]「雖然Page指令具有如此多的屬性,:
[session="true|false"]
[buffer="nonelAkblsizekb]但在實(shí)際編程過程中,并不是每個
[autoFlush="true|false"]屬性都必須一一列出,其中很多屬
[isThreadSafe="true|false"]性可以忽略,此時Page指令將使
[info="text"]用這些屬性的默認(rèn)值來設(shè)置JSP頁
[errorPage="relativellRL"]'_1丁面J
[isErrorPage="true|false"]
[isELIgnored="true|false"]
[pageEncoding="CHARSET"]
%>
3.2.1使用page指令
language屬性:設(shè)置當(dāng)前頁面中編寫JSP腳
本使用的語言,默認(rèn)值為java,例如:
<%@pagelanguage-'java"%>
上述代碼設(shè)置了當(dāng)前頁面中使用Java語言來編寫JSP腳本,
目前只能設(shè)置為Java。
contentType屬性:設(shè)置頁面響應(yīng)的MlME類型,通常被設(shè)置
為text/html,例如:
<%@pagecontentType=Mtext/htmr,%>
如果該屬性設(shè)置不正確,如設(shè)置為text/css,那么客戶端瀏
覽器在顯示HTML樣式時,不能對HTML標(biāo)識進(jìn)行解釋,而直接
顯示HTML代碼。
3.2.1使用page指令
在該屬性中還可以設(shè)置JSP字符的編碼,例如:
<%@pagecontentType="text/html;charset=gb2312"%>
默認(rèn)的編碼為Iso-88597o
import屬性:import屬性藥沙手典va中的import語句,用
來向JSP文件中導(dǎo)入需要用到的黃丁營指令中可多次使
用該屬性來導(dǎo)入多個包。例如:A一,
<%@pageimport="java.util.*"%>端的中文顯示需要使用字符
集gb2312,而HTTP傳輸編
nn
<%@pageimport=java.text.*%>碼用ISO88591字符集
______________J
或者通過逗號間隔,來導(dǎo)入多個包。
<%@pageimport=njava.util.*,java.text.*n%>
.(附?)JSP文件的漢字問題
JSP中的漢字字符串在服務(wù)器端用gb2312,在編譯為
ServIet時自動轉(zhuǎn)換為iso8859_1。漢字在傳輸中是正確的,
但在沒有特別指示下,瀏覽器,無法正確顯示。在HTML中指
示瀏覽器文檔的編碼為:<metahttp-equiv="Content-
Type"content="text/html;charset=gb2312”>;在JSP
中指示JSP引擎文檔的編碼為:<%@page
contentType="text/html;charset=gb2312,z%>,每個要顯
示漢字的JSP文檔都應(yīng)該包含該語句。
(附⑥)表單處理中的漢字問題
表單處理涉及到客戶端和服務(wù)器的完整交互過程,在客
戶端和服務(wù)器是gb2312,傳輸用IS088591,在服務(wù)器端接
收到客戶端數(shù)據(jù)時需要轉(zhuǎn)換為gb23],2后迸行處理,方法如:
name=newString(name.getBytesCIS08859」〃),
〃gb2312〃);而服務(wù)器端洞示客戶端漢字的顯示編碼為:,
<%@pagecontentType=,,text/html;charset=gb2312,z%>
(附②UTF-8、GBK和GB2312之區(qū)另U
UTF-8:UnicodeTransformationFormat-8bit,允許含BOM,但
通常不含BOM。是用以解決國際上字符的一種多字節(jié)編碼,它對英文
使用8位(即一個字節(jié)),中文使用24為(三個字節(jié))來編碼。UTF-8
包含全世界所有國家需要用到的字符,是國際編碼,通用性強(qiáng)。UTF-8
編碼的文字可以在各國支持UTF8字符集的瀏覽器上顯示。如,如果是
UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的
中文語言支持包。
GBK是國家標(biāo)準(zhǔn)GB2312基礎(chǔ)上擴(kuò)容后兼容GB2312的標(biāo)準(zhǔn)。GBK
的文字編碼是用雙字節(jié)來表示的,即不論中、英文字符均使用雙字節(jié)來
表示,為了區(qū)分中文,將其最高位都設(shè)定成1。GBK包含全部中文字符,
是國家編碼,通用性比UTF8差,不過UTF8占用的數(shù)據(jù)庫比GBD大。
GBK、GB2312等與UTF8之間者B必須通過Unicode編碼才能相互轉(zhuǎn)
換.
GBK>GB2312--Unicode--UTF8
UTF8--Unicode--GBK>GB2312
對于一個網(wǎng)站、論壇來說,如果英文字符較多,則建議使用UTF—
8節(jié)省空間。不過現(xiàn)在很多論壇的插件一般只支持GBK。
3.2.1使用page指令
在JSP中已經(jīng)默認(rèn)導(dǎo)入了以下包:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.
所以,即使沒有通過import屬性進(jìn)行導(dǎo)入,在JSP頁面中也
可以調(diào)用上述包中的類。
若要在頁面中使用編寫的JavaBean,也可通過import屬
性來導(dǎo)入。還可以通過<jsp:useBean>動作標(biāo)識來創(chuàng)建一個
JavaBean實(shí)例進(jìn)行調(diào)用。
3.2.1使用page指令
extends屬性:extends屬性用于指定將一個JSP頁面轉(zhuǎn)
換為Servlet后繼承的類。在JSP中通常不會設(shè)置該屬性,
JSP容器會提供繼承的父類。并且如果設(shè)置了該屬性,一些
改動會影響JSP的編譯能力。
session屬性:該屬性默認(rèn)值為true,表示當(dāng)前頁面支持
session,設(shè)為faIse表示不支持sessionQ
buffer屬性:該屬性用來設(shè)置out對象(JspWriter類對象)
使用的緩沖區(qū)的大小。若設(shè)置為none,表示不使用緩存,而
直接通過PrintWriter對象進(jìn)行輸出;如果將該屬性指定為
數(shù)值,則輸出緩沖區(qū)的大小不應(yīng)小于該值,默認(rèn)值為8KB
(因不同的服務(wù)器而不同,但大多數(shù)情況下都為8KB)。
3.2.1使用page指令
autoFlush屬性:該屬性默認(rèn)值為true,表示當(dāng)緩沖區(qū)
已滿時,自動將其中的內(nèi)容輸出到客戶端。如果設(shè)為false,
則當(dāng)緩沖區(qū)中的內(nèi)容超出其設(shè)置的大小時,會產(chǎn)生“JSP
Bufferoverflow”溢出異常。
注意:若buffer屬性設(shè)為none,則autoFIush不能設(shè)為faIseo
isThreadSafe屬性:該屬性默認(rèn)值為true,表示當(dāng)前
JSP頁面被轉(zhuǎn)換為ServIet后,會以多線程的方式來處理來自
多個用戶的請求;如果設(shè)為false,則轉(zhuǎn)換后的Servlet會實(shí)
現(xiàn)SigIeThreadModeI接口,該ServIet將以單線程的方式來
處理用戶請求,即其他請求必須等待直到前一個請求處理結(jié)
束。
3.2.1使用page指令
inf。屬性:該屬性可設(shè)置為任意字符串,如當(dāng)前頁面的
作者或其他有關(guān)的頁面信息??赏ㄟ^
ServIet.getServIetInfo()方法來獲取設(shè)置的字符串。例如:
<%@pageinfo="Thisisindex.jsp!"%>
<%=this.getServletlnfo()%>
訪問頁面后,將顯示:Thisisindex.jsp!
errorPage屬性:該屬性用來指定一個當(dāng)前頁面出現(xiàn)異常時
所要調(diào)用的頁面。如果屬性值是以開頭的路徑,則將
在當(dāng)前應(yīng)用程序的根目錄下查找文件;否則,將在當(dāng)前頁面
的目錄下查找文件。
3.2.1使用page指令
isErrorPage屬性:將該屬性值設(shè)為true,此時在當(dāng)前
頁面中可以使用exception異常對象。若在其他頁面中通過
errorPage屬性指定了該頁面,則當(dāng)前者出現(xiàn)異常時,會跳
轉(zhuǎn)到該頁面,并可在該頁面中通過exception對象輸出錯誤
信息。相反,如果將該屬性設(shè)置為faIse,則在當(dāng)前頁面中
不能使用exception對象。該屬性默認(rèn)值為faIseo
【例3T】errorPage屬性及isErrorPage屬性的應(yīng)用
isELIgnored屬性:通過該屬性的設(shè)置,可以使JSP容器忽略
表達(dá)式語言“${}”。其值只能為true或faIse。設(shè)為true,
則忽略表達(dá)式語言。
3.2.1使用page指令
pageEncoding屬性:該屬性用來設(shè)置JSP頁面字符的編
碼。默認(rèn)值為ISO-88597。
3.2.2使用include指令
該指令用于在當(dāng)前的JSP頁面中,在當(dāng)前使用該指令的
位置嵌入其他的文件,如果被包含的文件中有可執(zhí)行的代碼,
則顯示代碼執(zhí)行后的結(jié)果。該指令的使用格式如下:
<%@includefile二”文件的絕對路徑或相對路徑”%>
file屬性:該屬性指定被包含的文件,該屬性不支持任何表
達(dá)式,也不允許通過如下的方式來傳遞參數(shù)。
<%@includefile="welcome.jsp?name=yxq"%>
如果該屬性值以開頭,那么指定的是一個絕對路徑,
將在當(dāng)前應(yīng)用的根目錄下查找文件;如果是以文件名稱或文
件夾名開頭,那么指定的是一個相對路徑,將在當(dāng)前頁面的
目錄下查找文件。
3.2.2使用include指令
使用include指令引用外部文件,可以減少代碼的冗余。
例如,有兩個JSP頁面都需要應(yīng)用下圖所示的網(wǎng)頁模板進(jìn)行
布局。
LOGO圖片區(qū):top.jsp
側(cè)欄內(nèi)容顯示區(qū):main.jsp
left.jsp
頁尾:end.jsp
其中,這兩個頁面中的LOGO圖片區(qū)、側(cè)欄和頁尾的內(nèi)容都不
會發(fā)生變化。如果通過基本JSP語句來編寫這兩個頁面,會
導(dǎo)致編寫的JSP文件出現(xiàn)大量的冗余代碼,不僅降低了開發(fā)
進(jìn)程而且會給程序的維護(hù)帶來很大的困難。為了解決該問題,
可以將這個復(fù)雜的頁面分成若干個獨(dú)立的部分,將相同的部
分在單獨(dú)的JSP文件中進(jìn)行編寫。
13.2.2使用include指令
這樣在多個頁面中應(yīng)用上述的頁面模板時,就可通過
incIude指令在相應(yīng)的位置上引入這些文件,從而只需對內(nèi)
容顯示區(qū)進(jìn)行編碼即可。類似的頁面代碼如下:
<%@pagecontentType="text/html;charset=gb2312"%>
<table>
<tr><tdcolspan="2"><%@includefile="top.jsp"%></td></tr>
<tr>
<td><%@includefile="side.jsp"%></td>
vtd>在這里對內(nèi)容顯示區(qū)進(jìn)行編碼v/td>
</tr>
<tr><tdcolspan="2"><%@includefile="end.jsp"%></td></tr>
</table>
3.2.3使用taglib指令
在JSP頁面中,可以直接使用JSP提供的一些動作元素標(biāo)
識來完成特定功能,如使用<jsp:include)包含一個文件。
通過使用taglib指令,開發(fā)者就可以在頁面中使用這些基本
標(biāo)識或自定義的標(biāo)識來完成特殊的功能。
taglib指令的使用格式如下:
<%@tagliburi="tagURI”prefix="tagPrefix"%>
uri屬性:該屬性指定了標(biāo)簽描述符,該描述符是一個對標(biāo)
簽描述文件(*.tld)的映射。在tld標(biāo)簽描述文件中定義了
該標(biāo)簽庫中的各個標(biāo)簽名稱,并為每個標(biāo)簽指定一個標(biāo)簽處
理類。
4323使用taglib指令
prefix屬性:該屬性指定一個在頁面中使用由uri屬性
指定的標(biāo)簽庫的前綴。前綴不能命名為jsp、jspx、java、
javax>sun>servIet和sunw。
開發(fā)者可通過前綴來引用標(biāo)簽庫中的標(biāo)簽。以下為一個簡單
的使用JSTL的代碼:
<%@tagliburi="/jsp/jstl/core"prefix="c"%>
<c:setvar="name"value="hello'7>l
該段代碼通過<c:set>標(biāo)簽將hello值
賦給了變量name。
3.3JSP的腳本標(biāo)識
在JSP頁面中,腳本標(biāo)識使用得最為頻繁。因
為它們能夠很方便、靈活地生成頁面中的動態(tài)內(nèi)
容,特別是Scriptlet腳本程序。JSP中的腳本標(biāo)識
包括以下三種元素:聲明標(biāo)識(Declaration)、
JSP表達(dá)式(Expression)和腳本程序
(Scriptlet)。通過這些元素,就可以在JSP頁面
中像編寫Java程序一樣來聲明變量、定義函數(shù)或
進(jìn)行各種表達(dá)式的運(yùn)算。在JSP頁面中需要通過特
殊的約定來表示這些元素,并且對于客戶端這些
元素是不可見的,它們由服務(wù)器執(zhí)行。
3.3JSP的腳本標(biāo)識
■3.3.1JSP表達(dá)式(Expression)N
■3.3.2聲明標(biāo)識(Declaration)工
■3.3.3腳本程序(SEMet)N
3.3.1JSP表達(dá)式
表達(dá)式用于向頁面中輸出信息,其使用格式為:
<%=變量或可以返回值的方法或Java表達(dá)式%>
特別要注意,“<%”與“二”之間不要有空格。
JSP表達(dá)式在頁面被轉(zhuǎn)換為ServIet后,轉(zhuǎn)換為了out.print()
方法。所以JSP表達(dá)式與JSP頁面中嵌入到小腳本程序中的
out.print。方法實(shí)現(xiàn)的功能相同。如果通過JSP表達(dá)式輸出
一個對象,則該對象的toString()方法會被自動調(diào)用,表達(dá)
式將輸出toString()方法返回的內(nèi)容。
JSP表達(dá)式可以應(yīng)用到以下幾種情況。
(1)向頁面輸出內(nèi)容,例如下面的代碼:
3.3.1JSP表達(dá)式
運(yùn)行該段代碼將顯示:
<%Stringname="";%>
、用戶名:,
用戶名:〈%=name%>
(2)生成動態(tài)的鏈接地址,例如下面的代碼:
<%Stringpath="welcome.jspn;%>
<ahref="v%=path%>”>鏈接到welcom.jspv/a>—一"
/L\
運(yùn)行該段代碼將生成下面的HTML代碼:
、<ahref="welcome.jsp”>鏈接至Uwelcome.jspv/a〉,
(3)動態(tài)指定Form表單處理頁面,例如下面的代碼:
<%Stringname="logon.jsp";%>
<formaction=''<%=name%>',></form^^^^^
運(yùn)行該段代碼將生成下面的HTML代碼:
、〈formaction="logon.jsp”>v/form〉,
3.3.1JSP表達(dá)式
(4)為通過循環(huán)語句生成的元素命名,例如下面的代碼:
<%for(inti=1;i<3;i++){%>
file<%=i%>:<inputtype="text"
name="<%="file"+i%>"><br>
<%}%>
運(yùn)行該段代碼將生成下面的HTML代碼:
filel:<inputtype=*'text"name="file1"><br>
、file2:〈inputtype="text"name="file2">〈br>/
43.3.2聲明標(biāo)識(Declaration)
在JSP頁面中可以聲明變量或方法,其聲明格式為:
<%!聲明變量或方法的代碼%>
特別要注意,在“〈%”與“!”之間不要有空格。聲明的語
法與在Java語言中聲明變量和方法時是一樣的。
在頁面中通過聲明標(biāo)識聲明的變量和方法,在整個頁面內(nèi)都
有效,它們將成為JSP頁面被轉(zhuǎn)換為Java類后類中的屬性和
方法。并且它們會被多個線程即多個用戶共享。也就是說,
其中的任何一個線程對聲明的變量或方法的修改都會改變它
們原來的狀態(tài)。它們的生命周期從創(chuàng)建到服務(wù)器關(guān)閉后結(jié)束。
下面將通過一個具體實(shí)例來介紹聲明標(biāo)識的應(yīng)用。
【例3-2】一個簡單的網(wǎng)站計(jì)數(shù)器W
、333腳本程序(Scriptlet)
腳本程序是在JSP頁面中使用“跳”與“%>”標(biāo)記起來的一段
Java代碼。在腳本程序中可以定義變量、調(diào)用方法和進(jìn)行各
種表達(dá)式運(yùn)算,且每行語句后面要加入分號。在腳本程序中
定義的變量在當(dāng)前的整個頁面內(nèi)都有效,但不會被其他的線
程共享,當(dāng)前用戶對該變量的操作不會影響到其他的用戶。
當(dāng)變量所在的頁面關(guān)閉后就會被銷毀。
腳本程序使用格式如下:
<%Java程序片段%>
腳本程序的使用比較靈活,它所實(shí)現(xiàn)的功能是JSP表達(dá)式無
法實(shí)現(xiàn)的。
【例3-3】腳本程序的應(yīng)用八j
13.4JSP的注釋
■
在JSP頁面中可以應(yīng)用多種注釋,如HTML中的注釋、
Java中的注釋和在嚴(yán)格意義上說屬于JSP頁面自己的注釋:
帶有JSP表達(dá)式和隱藏的注釋。在JSP規(guī)范中,它們都屬
于JSP中的注釋,并且它們的語法規(guī)則和運(yùn)行的效果有所
不同。下面將介紹JSP中的各種注釋。
■3.4.1HTML中的注釋N
■3.4.2帶有JSP表達(dá)式的注釋N
■3.4.3隱藏注釋
■3.4.4腳本程序(S程diet)中的注釋7
3.4.1HTML中的注釋
JSP文件是由HTML標(biāo)記和嵌入的Java程序片段組成的,
所以在HTML中的注釋同樣可以在JSP文件中使用。注釋格式
如下:
<!一注釋內(nèi)谷一>
【例3-4】HTML注釋的應(yīng)用
3.4.2帶有JSP表達(dá)式的注釋
在HTML注釋中可以嵌入JSP表達(dá)式,注釋格式如下:
<!-comment<%=expression%>->
包含該注釋語句的JSP頁面被請求后,服務(wù)器能夠識別
注釋中的JSP表達(dá)式,從而來執(zhí)行該表達(dá)式,而對注釋中的
其他內(nèi)容不做任何操作。當(dāng)服務(wù)器將執(zhí)行結(jié)果返回給客戶端
后,客戶端瀏覽器會識別該注釋語句,所以被注釋的內(nèi)容不
會顯示在瀏覽器中。
【例3-5】帶有JSP表達(dá)式注釋的應(yīng)用
3.4.3隱藏注釋
在前面已經(jīng)介紹了如何應(yīng)用HTML中的注釋,這種注釋
雖然在客戶端瀏覽頁面時不會看見,但它卻存在于源代碼中,
可通過在客戶端查看源代碼看到被注釋的內(nèi)容。所以嚴(yán)格來
說,這種注釋并不安全。下面將介紹一種隱藏注釋,注釋格
式如下:
v%--汪釋內(nèi)容--%>
使用該方法注釋的內(nèi)容,不僅在客戶端瀏覽時看不到,而且
即使是通過在客戶端查看HTML源代碼,也不會看到,所以安
全性較高。
【例3-6】隱藏注釋的應(yīng)用
3.4.4腳本程序(Scriptlet)中
」的注釋
在腳本程序中所包含的是一段Java代碼,所以在腳本
程序中的注釋和在Java中的注釋是相同的。腳本程序中包括
下面3種注釋方法。
1.單行注釋
單行注釋的格式如下:
〃注釋內(nèi)容
該方法進(jìn)行單行注釋,符號“//”后面的所有內(nèi)容為注釋的
內(nèi)容,服務(wù)器對該內(nèi)容不進(jìn)行任何操作。因?yàn)槟_本程序在客
戶端通過查看源代碼是不可見的,所以在腳本程序中通過該
方法被注釋的內(nèi)容也是不可見的,并且在后面將要提到的通
過多行注釋和提示文檔進(jìn)行注釋的內(nèi)容都是不可見的。
3.4.4腳本程序(Scriptlet)中
工的注釋
-h【
【例3-7】單行注釋的應(yīng)用
2.多行注釋
多行注釋的是通過“/*”與“*/”符號進(jìn)行標(biāo)記,它們必須
成對出現(xiàn),在它們之間輸入的注釋內(nèi)容可以換行。注釋格式
女月下:
注釋內(nèi)容1
注釋內(nèi)容2
*/
為了程序代碼的美觀,開發(fā)員習(xí)慣上在每行的注釋內(nèi)容
前面加入一個號,構(gòu)成以下的注釋格式:
3.4.4腳本程序(Scriptlet)中
j的注釋
/*
*注釋內(nèi)容1
*注釋內(nèi)容2
*/
同單行注釋一樣,在“/*”與“*/”之間被注釋的所有內(nèi)容,
即使是JSP表達(dá)式或其他的腳本程序,服務(wù)器都不會做任何
處理,并且多行注釋的開始標(biāo)記和結(jié)束標(biāo)記可以不在同一個
腳本程序中同時出現(xiàn)。
【例3-8】多行注釋的應(yīng)用
3.提示文檔注釋
3.4.4腳本程序(Scriptlet)中
金的注釋
該種注釋會被Javadoc文檔工具生成文檔時所讀取,文
檔是對代碼結(jié)構(gòu)和功能的描述。
注釋格式如下:
/**
提示信息1
提示信息2
*/
該注釋方法與前面介紹的多行注釋很相似,但細(xì)心的讀
者會發(fā)現(xiàn)它是以“/**”符號作為注釋的開始標(biāo)記,而不是
。與多行注釋一樣,被“/**”和“/*”符號注釋的
所有內(nèi)容,服務(wù)器都不會做任何處理。
3.4,4腳本程序(Scriptlet)中
」的注釋
在EcIipse開發(fā)工具中向創(chuàng)建的JSP文件輸入下面的代碼,
然后將鼠標(biāo)指針移動到指定的代碼上,將會出現(xiàn)提示信息。
<%!
inti=0;
@作者:YXQ
@功能:該方法用來實(shí)現(xiàn)一個簡單的計(jì)數(shù)器
7
synchronizedvoidadd(){
i++;
)
%>
<%add();%>
當(dāng)前訪日次數(shù):<%=i%>
3.4.4腳本程序(Scriptlet)中
的注釋
將鼠標(biāo)指針移動到<%add0;%>代碼上,將出現(xiàn)下圖如圖所
示的提示信息。
:<0pagecontentType=,,cex€/htinl;charseu=gb2312rr-:>
<%?
inti=0;
/**
@作者:YXQ
@功能:該方法用來實(shí)現(xiàn)一個簡單的計(jì)數(shù)器
*/
synchronizedvoidadd(){
i++;
-add(]);
當(dāng)前訪問daa.addO
。作者
YXQ
0功能
該方法用來實(shí)現(xiàn)一個簡單的計(jì)數(shù)器
按“F2”以獲取急點(diǎn).
3.5動作標(biāo)識
在JSP中提供了一系列的使用XML語法寫成的動作標(biāo)識,
這些標(biāo)識可用來實(shí)現(xiàn)特殊的功能,例如請求的轉(zhuǎn)發(fā)、在當(dāng)
前頁中包含其他文件、在頁面中創(chuàng)建一個JavaBean實(shí)例等。
動作標(biāo)識是在請求處理階段按照在頁面中出現(xiàn)的順序
被執(zhí)行的,只有它們被執(zhí)行的時候才會去實(shí)現(xiàn)自己所具有
的功能。這與指令標(biāo)識是不同的,因?yàn)樵贘SP頁面被執(zhí)行
時首先進(jìn)入翻譯階段,程序會先查找頁面中的指令標(biāo)識并
將它們轉(zhuǎn)換成Servlet,所以這些指令標(biāo)識會首先被執(zhí)行,
從而設(shè)置了整個的JSP頁面。
動作標(biāo)識通用的使用格式如下:
3.5動作標(biāo)識
V動作標(biāo)識名稱屬性1二“值1”屬性2=“值2”…/>
或
v動作標(biāo)識名稱屬性1二“值1“屬性2二“值2"…〉
v子動作屬性1二“值1“屬性2二“值2"…/>
v/動作標(biāo)識名稱,
在JSP中提供的常用的標(biāo)準(zhǔn)動作標(biāo)識有:
□3.5動作標(biāo)識
■vjsp:include><
■vjsp:forward><
■vjsp:useBean>N
■vjsp:setProperty>N
■vjsp:getPrope<y><
■vjsp:fallback><
■vjsp:plugin>q
<jsp:include>
<jsp:include>動作標(biāo)識用于向當(dāng)前的頁面中包含其他
的文件,這個文件可以是動態(tài)文件也可以是靜態(tài)文件。該標(biāo)
識的使用格式如下:
<jsp:includepage二”被包含文件的路徑”flush="true|false'7>
或者向被包含的動態(tài)頁面中傳遞參數(shù):
<jsp:includepage二”被包含文件的路徑”flush="true|false">
<jsp:paramname二"參數(shù)名稱“valude="參數(shù)值"/>
</jsp:include>
page屬性:該屬性指定了被包含文件的路徑,其值可以
是一個代表了相對路徑的表達(dá)式。當(dāng)路徑是以開頭時,
則按照當(dāng)前應(yīng)用的路徑查找這個文件;如果路徑是以文件名
或目錄名稱開頭,那么將按照當(dāng)前的路徑來查找被包含的文
件。
<jsp:include>
flush屬性:表示當(dāng)輸出緩沖區(qū)滿時,是否清空緩沖區(qū)。
該屬性值為boolean型,默認(rèn)值為faIse,通常情況下設(shè)為
true。
<jsp:param>子標(biāo)識可以向被包含的動態(tài)頁面中傳遞參
數(shù)。
<jsp:include>標(biāo)識對包含的動態(tài)文件和靜態(tài)文件的處
理方式是不同的。如果被包含的是靜態(tài)的文件,則頁面執(zhí)行
后,在使用了該標(biāo)識的位置處將會輸出這個文件的內(nèi)容。如
果<jsp:include〉標(biāo)識包含的是一個動態(tài)的文件,那么JSP編
譯器將編譯并執(zhí)行這個文件。不能通過文件的名稱來判斷該
文件是靜態(tài)的還是動態(tài)的,<jsp:include》標(biāo)識會識別出文
件的類型。
<jsp:include>
<jsp:include〉動作標(biāo)識與incIude指令都可用來包含文
件,下面來介紹它們之間存在的差異。
1.屬性
小。1”6指令通過、Ie屬性來指定被包含的頁面,include指
令將fiIe屬性值看作一個實(shí)際存在的文件的路徑,所以該屬
性不支持任何表達(dá)式。若在fiIe屬性值中應(yīng)用JSP表達(dá)式,
則會拋出異常,如下面的代碼:
<%Stringpath-'logon.jsp";%>
<%@includefile="<%=path%>"%>
該用法將拋出下面的異常:
File〃/<%=path%>〃notfound
<jsp:include>
<jsp:include>動作標(biāo)識通過page屬性來指定被包含的
頁面,該屬性支持JSP表達(dá)式。
2.處理方式
使用incIude指令被包含的文件,它的內(nèi)容會原封不動地插入
到包含頁中使用該指令的位置,然后JSP編譯器再對這個合成的文
件進(jìn)行翻譯。所以在一個JSP頁面中使用incIude指令來包含另外
一個JSP頁面,最終編譯后的文件只有一個。
使用<jsp:include〉動作標(biāo)識包含文件時,當(dāng)該標(biāo)識被執(zhí)行時,
程序會將請求轉(zhuǎn)發(fā)到(注意是轉(zhuǎn)發(fā),而不是請求重定向)被包含
的頁面,并將執(zhí)行結(jié)果輸出到瀏覽器中,然后返回包含頁繼續(xù)執(zhí)
行后面的代碼。因?yàn)榉?wù)器執(zhí)行的是兩個文件,所以JSP編譯器會
分別對這兩個文件進(jìn)行編譯。
<jsp:include>
3.包含方式
使用inoIude指令包含文件,最終服務(wù)器執(zhí)行的是將兩個文件
合成后由JSP編譯器編譯成的一個Class文件,所以被包含文件的
內(nèi)容應(yīng)是固定不變的,若改變了被包含的文件,則主文件的代碼
就發(fā)生了改變,因此服務(wù)器會重新編譯主文件。include指令的這
種包含過程稱為靜態(tài)包含。
使用<jsp:incIude>動作標(biāo)識通常是來包含那些經(jīng)常需要改動
的文件。此時服務(wù)器執(zhí)行的是兩個文件,被包含文件的改動不會
影響到主文件,因此服務(wù)器不會對主文件重新編譯,而只需重新
編譯被包含的文件即可。而對被包含文件的編譯是在執(zhí)行時才進(jìn)
行的,也就是說,只有當(dāng)〈jsp:include〉動作標(biāo)識被執(zhí)行時,使用
該識包含的目標(biāo)文件才會被編譯,否則被包含的文件不會被編譯,
所以這種包含過程稱為動態(tài)包含。
<jsp:include>
47對被包含文件的約定
使用include指令包含文件時,對被包含文件有約定
(字符集編碼方式一致)。
【例3-9】通過include指令包含文件
【例370】通過include動作標(biāo)識包含文件
技巧:如果要在JSP頁面中要顯示大量的文本文字,
可以將文字寫入靜態(tài)文件中(如記事本),然后通
過incIude指令或動作標(biāo)識包含進(jìn)來。
<jsp:forward>
<jsp:forward〉動作標(biāo)識用來將請求轉(zhuǎn)發(fā)到另外一個JSP、
HTML或相關(guān)的資源文件中。當(dāng)該標(biāo)識被執(zhí)行后,當(dāng)前的頁面
將不再被執(zhí)行,而是去執(zhí)行該標(biāo)識指定的目標(biāo)頁面。
該標(biāo)識使用的格式如下:
<jsp:forwardpage二”文件路徑|表示路徑的表達(dá)式”/>
如果轉(zhuǎn)發(fā)的目標(biāo)是一個動態(tài)文件,還可以向該文件中傳
遞參數(shù),使用格式如下:
<jsp:forwardpage二”被包含文件的路徑"flush="true|false">
<jsp:paramname="參數(shù)名稱"valude="參救值”/>
</jsp:forward>
<jsp:forward>
page屬性:該屬性指定了目標(biāo)文件的路徑。如果該值是
以開頭,表示在當(dāng)前應(yīng)用的根目錄下查找文件,否則就
在當(dāng)前路徑下查找目標(biāo)文件。請求被轉(zhuǎn)向到的目標(biāo)文件必須
是內(nèi)部的資源,即當(dāng)前應(yīng)用中的資源。
如果想通過forward動作轉(zhuǎn)發(fā)到應(yīng)用外部的文件中,例如,
當(dāng)前應(yīng)用為A,在根目錄下的index.jsp頁面中存在下面的代
碼用來將請求轉(zhuǎn)發(fā)到應(yīng)用B中的logon.jsp頁面。
<jsp:forwardpage="http://localhost:8080/B/logon.jsp7>
那么將出現(xiàn)下面的錯誤提示:
Therequestedresource
(/http://locaIhost:8080/B/1ogon.jsp)isnot
avaiIabIe
<jsp:forward>
仔細(xì)觀察可以看到,錯誤提示中的路徑前自動加入了一
個“/”,這是因?yàn)閕ndex.jsp頁面在應(yīng)用A的根目錄下,當(dāng)
forward標(biāo)識被執(zhí)行時,會在該目錄下來查找page屬性指定
的目標(biāo)文件,所以會提示資源不存在的信息。
<jsp:param>子標(biāo)識用來向動態(tài)的目標(biāo)文件中傳遞參數(shù)。
這里重點(diǎn)提示一下,<jsp:forward〉標(biāo)識實(shí)現(xiàn)的是請求
的轉(zhuǎn)發(fā)操作,而不是請求重定向。它們之間的一個區(qū)別就是:
進(jìn)行請求轉(zhuǎn)發(fā)時,存儲在request對象中的信息會被保留并
被帶到目標(biāo)頁面中;而請求重定向是重新生成一個request
請求,然后將該請求重定向到指定的URL,所以事先存儲在
request對象中的信息都不存在了。
vjsp:forward>注意:
<jsp:forward?標(biāo)簽從一個JSP文件向另一個文件傳遞
—1^包含用戶請求的request對象。<jsp:forward〉標(biāo)
簽以下的代碼,將不能執(zhí)行。
熊夠向目標(biāo)文件傳送參數(shù)和值,如我們傳遞的參數(shù)名
為username,值為scott;如果使用了<jsp:param>標(biāo)
簽的話,目標(biāo)文件必須是一個動態(tài)的文件,能夠處理
參數(shù)。
如果使用了非緩沖輸出的話,那么使用Qsp:forward)
時要小心,如巢在使用<jsp:forward)之前,已經(jīng)有文
本被寫入輸出流而且頁面沒有設(shè)置緩沖,那么將拋出
—^IHegalStateException的異常。
【例3-11]<jsp:forward>標(biāo)識的使用(簡單的登陸驗(yàn)
證的頁面)
<jsp:useBean>
通過應(yīng)用<jsp:useBean>動作標(biāo)識可以在JSP頁面中創(chuàng)建
一個Bean實(shí)例,并且通過屬性的設(shè)置可以將該實(shí)例存儲到
JSP中的指定范圍內(nèi)。如果在指定的范圍內(nèi)已經(jīng)存在了指定
的Bean實(shí)例,那么將使用這個實(shí)例,而不會重新創(chuàng)建。通過
<jsp:useBean>標(biāo)識創(chuàng)建的Bean實(shí)例可以在ScriptIet中應(yīng)用。
該標(biāo)識的使用格式如下:
<jsp:useBean>
{}并不是真正的花括號,代
<jsp:useBean表以下選項(xiàng)可以是四選一,
id二”變量名“
scopeFpagelrequestlsessionlappJ^cTdf^
class="package.className"|
type="數(shù)據(jù)類型
class="package.className"type二"數(shù)據(jù)類型
beanName="package.className"type二”數(shù)據(jù)類型“
/>
<jsp:setPropertyname二“變量名“property="*'7>
也可以在標(biāo)識體內(nèi)嵌入子標(biāo)識或其他內(nèi)容:
<jsp:useBean>
<jsp:useBeanid="變量名”
scope="page|request|session|application"...>
<jsp:setPropertyname="變量名“property="*'7>
</jsp:useBean>
這兩種使用方法是有區(qū)別的。在頁面中應(yīng)用<jsp:useBean>
標(biāo)識創(chuàng)建一個Bean時,如果該Bean是第一次被實(shí)例化,那么
對于<jsp:useBean>標(biāo)識的第二種使用格式,標(biāo)識體內(nèi)的內(nèi)
容會被執(zhí)行,若已經(jīng)存在了指定的Bean實(shí)例,則標(biāo)識體內(nèi)的
內(nèi)容就不再被執(zhí)行了。而對于第一種使用格式,無論在指定
的范圍內(nèi)是否已經(jīng)存在一個指定的Bean實(shí)例,
<jsp:useBean>標(biāo)識后面的內(nèi)容都會被執(zhí)行。
<jsp:useBean>
下面將對<jsp:useBean>標(biāo)識中各屬性的用法進(jìn)行詳細(xì)
介紹。
1.id屬性
該屬性指定一個變量,在所定義的范圍內(nèi)或
Scriptlet中將使用該變量來對所創(chuàng)建的Bean實(shí)例進(jìn)
行引用。該變量必須符合Java中變量的命名規(guī)則。
<jsp:useBean>
2.type=〃數(shù)據(jù)類型〃
type屬性用于設(shè)置由id屬性指定的變量的類型。
type屬性可以指定要創(chuàng)建實(shí)例的類的本身、類的父
類或者是——y個4妾口O
使向type屬性來設(shè)置變量類型的使用格式如下:
<jsp:useBeanid="us"type="com.Bean.Userinfo"scope="session'7>
如果在session范圍內(nèi),已經(jīng)存在了名為“us”的實(shí)例,則
將該實(shí)例轉(zhuǎn)換為type屬性指定的UserInf。類型(必須是合法
的類型轉(zhuǎn)換)并賦值給id屬性指定的變量;若指定的實(shí)例不
存在將拋出"beanusnotfoundwithinscope”異常。
<jsp:useBean>
3.scope屬性
該屬性指定了所創(chuàng)建Bean實(shí)例的存取范圍,省略該屬性
時的值為page。<jsp:useBean>標(biāo)識被執(zhí)行時,首先會在
scope屬性指定的范圍來查找指定的Bean實(shí)例,如果該實(shí)例
已經(jīng)存在,則引用這個Bean,否則重新創(chuàng)建,并將其存儲在
scope屬性指定的范圍內(nèi)。scope屬性具有的可選值如下。
page:指定了所創(chuàng)建的Bean實(shí)例只能夠在當(dāng)前的JSP文
件中使用,包括在通過incIude指令靜態(tài)包含的頁面中有效。
request:指定了所創(chuàng)建的Bean實(shí)例可以在請求范圍內(nèi)
進(jìn)行存取。在請求被轉(zhuǎn)發(fā)至的目標(biāo)頁面中可通過request對
象的getAttribute(〃id屬性值〃)方法獲取創(chuàng)建的Bean實(shí)例。
<jsp:useBean>
一個請求的生命周期是從客戶端向服務(wù)器發(fā)出一個請求到服
務(wù)器響應(yīng)這個請求給用戶后結(jié)束,所以請求結(jié)束后,存儲在
其中的Bean的實(shí)例也就失效了。
session:指定了所創(chuàng)建的Bean實(shí)例的有效范圍為
sessionosession是當(dāng)用戶訪問Web應(yīng)用時,服務(wù)器為用戶
創(chuàng)建的一個對象,服務(wù)器通過session的ID值來區(qū)分其他的
用戶。針對某一個用戶而言,在該范圍中的對象可被多個頁
面共享。
注意:可以使用session對象的getAttribute(〃id屬性值〃)
方法獲取存儲在session中的Bean實(shí)例,也可以使用session
對象的getVaIue(〃id屬性值〃)來獲取,但該方法不建議使用。
<jsp:useBean>
application:該值指定了所創(chuàng)建的Bean實(shí)例的有效范
圍從服務(wù)器啟動開始到服務(wù)器關(guān)閉結(jié)束。application對象
是在服務(wù)器啟動時創(chuàng)建的,它被多個用戶共享。所以訪問該
appIication對象的所有用戶共享存儲于該對象中的Bean實(shí)
例。
注意:可以使用appIication對象的getAttribute注d屬性值”)方法獲取
存在于appIication中的Bean實(shí)例。
4.cIass="package.cIassName”
class屬性指定了一個完整的類名,其中package表示類
包的名字,cIassName表示類的CIass文件名稱。通過cIass
屬性指定的類不能是抽象的,它必須具有公共的、沒有參數(shù)
的構(gòu)造方法。在沒有設(shè)置type屬性時,必須設(shè)置class屬性。
<jsp:useBean>
使用class屬性定位一個類的使用格式如下:
<jsp:useBeanid="us"class="com.Bean.Userinfo"
scope="session'7>
程序首先會在session范圍中來查找是否存在名為“us”的
UserInfo類的實(shí)例,如果不存在,那么會通過new操作符實(shí)
例化UserInfo類來獲取一個實(shí)例,并以“us”為實(shí)例名稱存
儲到session范圍內(nèi)。
5.cIass="package,cIassName“type=''數(shù)據(jù)類型”
class屬性與type屬性可以指定同一個類,在
<jsp:useBean>標(biāo)識中cIass屬性與type屬性一起使用時的格
式如下:
<jsp:useBean>
<jsp:useBeanid="us"class="com.Bean.Userinfo"
type="com.Bean.UserBase"scope="session'7>
這里假設(shè)UserBase類為UserInfo類的父類。該標(biāo)識被執(zhí)
行時,程序首先創(chuàng)建了一個以type屬性的值為類型,以id屬
性值為名稱的變量us,并賦值為null;然后在session范圍
內(nèi)來查找這個名為“us”的Bean實(shí)例,如果存在,則將其轉(zhuǎn)
換為type屬性指定的UserBase類型(類型轉(zhuǎn)換必須是合法的)
并賦值給變量us;如果實(shí)例不存在,那么將通過new操作符
來實(shí)例化一個UserInfo類的實(shí)例并賦值給變量us,最后將us
變量儲在session范圍內(nèi)。
6.beanName=,,package.className,ztype="數(shù)據(jù)類型〃
<jsp:useBean>
beanName屬性與type屬性可以指定同一個類,在
<jsp:useBean>標(biāo)識中beanName屬性與type屬性一起使用
同的格式如下:
<jsp:useBeanid="us"beanName="com.Bean.Userinfo"
type="com.Bean.UserBase7>
這里假設(shè)卜6山256類為卜?口村0類的父類。該標(biāo)識被執(zhí)行時,程
序首先創(chuàng)建了一個以type屬性的值為類型,以id屬性值為名稱的
變量us,并賦值為null;然后在session范圍內(nèi)來查找這個名為
“us”的Bean實(shí)例,如果存在,則將其轉(zhuǎn)換為type屬性指定的
UserBase類型(類型轉(zhuǎn)換必須是合法的)并賦值給變量us;如果
實(shí)例不存在,那么將通過instantiate()方法從Userinfo類中實(shí)例
化一個類并將其轉(zhuǎn)換成UserBase類型后賦值給變量us,最后將變
量us存儲在session范圍內(nèi)。
J<jsp:useBean>
通常情況下應(yīng)用<jsp:useBean>標(biāo)識的格式如下:_______
<jsp:useBeanid二“變量名“class="package.className7>
如果想在多個頁面中共享這個Bean實(shí)例,可將scope屬性設(shè)
置為session0
在頁面中使用<jsp:useBean>標(biāo)識來實(shí)例化一^f^Bean實(shí)例后,
可以通過<jsp:setProperty>屬性來設(shè)置或修改該Bean中的
屬性,或者通過<jsp:getProperty>標(biāo)識來讀取該Bean中指
定的屬性。
<jsp:setProperty>
<jsp:setProperty>標(biāo)識通常情況下與<jsp:useBean>標(biāo)識
一起使用,它將調(diào)用Bean中的setXxx()方法將請求中的參
數(shù)賦值給由<jsp:useBean>標(biāo)識創(chuàng)建的JavaBean中對應(yīng)的
簡單屬性或索引屬性。該標(biāo)識的使用格式如下:
<jsp:setProperty
name="Bean實(shí)例名”
(
property="*"|
property="propertyName"|
property="propertyName"param="parameterName"|
property="propertyName"value二“值“
}/>
<jsp:setProperty>
1.name屬性
name屬性用來指定一個存在JSP中某個范圍中的Bean實(shí)例。
<jsp:setProperty>標(biāo)識將會按照page、request、session
和application的順序來查找這個Bean實(shí)例,直到第一個實(shí)
例被找到。若任何范圍內(nèi)不存在這個Bean實(shí)例,則會拋出異
常。〃〃
2.property=〃*〃
property屬性取值為時,則request請求中所有參數(shù)的
值將被一一賦給Bean中與參數(shù)具有相同名字的屬性。如果請
求中存在值為空的參數(shù),那么Bean中對應(yīng)的屬性將不會被賦
值為Null;如果Bean中存在一個屬性,但請求中沒有與之對
應(yīng)的參數(shù),那么該屬性同樣不會被賦值為Null,在這兩種情
況
<jsp:setProperty>
下的Bean屬性都會保留原來或默認(rèn)的值。
該種使用方法要求請求中參數(shù)的名稱和類型必須與
Bean中屬性的名稱和類型一致。但由于通過表單傳遞的參
數(shù)都是String類型的,所以JSP會自動將這些參數(shù)轉(zhuǎn)換為
Bean中對應(yīng)屬性的類型。下表給出了JSP自動將String類
型轉(zhuǎn)換為其他類型時所調(diào)用的方法。
<jsp:setProperty>
其他類型轉(zhuǎn)換方法
booleanjava.lang.Boolean.valueOf(String).booleanValue()
Booleanjava.lang.Boolean.valueOfifString)
bytejava.lang.Byte.valueOf(String).byteValue()
Bytejava.lang.Byte.valueOf(String)
doublejava.lang.Double.valueOf(String).doubleValue()
Doublejava.lang.Double.valueOffString)
intjava.lang.Integer.valueOfi(String).intValue()
Integerjava.lang.Integer.valueOf(String)
floatjava.lang.Float.valueOf(String).floatValue();
Floatjava.lang.Float.valueOf(String)
longjava.lang.Long.valueOf(String
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安裝分包施工合同
- 綠色環(huán)保建筑工地安全管理制度
- 《自然環(huán)境保護(hù):高中生物地理教學(xué)教案》
- 委托活動代理服務(wù)協(xié)議書
- 重要會議紀(jì)要的編制要點(diǎn)與范例
- 船舶修理維護(hù)合同7篇
- 摩托車轉(zhuǎn)讓協(xié)議合同與摩托車過戶轉(zhuǎn)讓協(xié)議6篇
- 第三方供餐合同8篇
- 2025年銀川貨運(yùn)從業(yè)資格證考試模擬題及答案
- 2023年新高考全國乙卷語文真題(原卷版)
- 電腦終端安全培訓(xùn)
- 成人重癥患者顱內(nèi)壓增高防控護(hù)理專家共識2024
- 物品消毒知識培訓(xùn)課件
- 第3課《列夫·托爾斯泰》課件-2024-2025學(xué)年統(tǒng)編版語文七年級下冊
- 少兒足球基礎(chǔ)知識
- TSDLPA 0001-2024 研究型病房建設(shè)和配置標(biāo)準(zhǔn)
- 陜09J01 建筑用料及做法圖集
- MOC3061驅(qū)動BT134雙向可控硅
- 無線通信與網(wǎng)絡(luò)復(fù)習(xí)資料
- 八大員考試試題——勞務(wù)員題庫
- 人教版小學(xué)數(shù)學(xué)五年級下冊教材分析
評論
0/150
提交評論