HTML 注釋 在客戶端顯示一個(gè)注釋.
JSP 語法 <!-- comment [ <%= expression %> ] --> 例子 1 <!-- This file displays the user login screen --> 在客戶端的HTML源代碼中產(chǎn)生和上面一樣的數(shù)據(jù):
<!-- This file displays the user login screen --> 例子 2 <!-- This page was loaded on <%= (new java.util.Date()).toLocaleString() %> --> 在客戶端的HTML源代碼中顯示為:
<!-- This page was loaded on January 1, 2000 --> 描述 這種注釋和HTML中很像,也就是它可以在"查看源代碼"中看到.
唯一有些不同的就是,你可以在這個(gè)注釋中用表達(dá)式(例子2所示).這個(gè)表達(dá)示是不定的,由頁面不同而不同,你能夠使用各種表達(dá)式,只要是合法的就行。更多的請(qǐng)看表達(dá)式
========================================================== 隱藏注釋 寫在JSP程序中,但不是發(fā)給客戶。
JSP 語法 <%-- comment --%> 例子: <%@ page language="java" %> <html> <head><title>A Comment Test</title></head> <body> <h2>A Test of Comments</h2> <%-- This comment will not be visible in the page source --%> </body> </html> 描述 用隱藏注釋標(biāo)記的字符會(huì)在JSP編譯時(shí)被忽略掉。這個(gè)注釋在你希望隱藏或注釋你的JSP程序時(shí)是很有用的。JSP編譯器不是會(huì)對(duì)<%--and--%>之間的語句進(jìn)行編譯的,它不會(huì)顯示在客戶的瀏覽器中,也不會(huì)在源代碼中看到
在<%-- --%>之間,你可以任意寫注釋語句,但是不能使用 "--%>",如果你非要使用請(qǐng)用"--%>".
================================================================ 聲明 在JSP程序中聲明合法的變量和方法
JSP 語法 <%! declaration; [ declaration; ]+ ... %> 例子 <%! int i = 0; %> <%! int a, b, c; %> <%! Circle a = new Circle(2.0); %> 描述 聲明你將要在JSP程序中用到的變量和方法。你也必須這樣做,不然會(huì)出錯(cuò).
你可以一次性聲明多個(gè)變量和方法,只要以";"結(jié)尾就行,當(dāng)然這些聲明在Java中要是合法的。
當(dāng)你聲明方法或變量時(shí),請(qǐng)注意以下的一些規(guī)則:
聲明必須以";"結(jié)尾(Scriptlet有同樣的規(guī)則,但是 表達(dá)式就不同了). 你可以直接使用在<% @ page %>中被包含進(jìn)來的已經(jīng)聲明的變量和方法,不需要對(duì)它們重新進(jìn)行聲明. 一個(gè)聲明僅在一個(gè)頁面中有效。如果你想每個(gè)頁面都用到一些聲明,最好把它們寫成一個(gè)單獨(dú)的文件,然后用<%@ include %>或<jsp:include >元素包含進(jìn)來。
================================================================== 表達(dá)式 包含一個(gè)符合JSP語法的表達(dá)式
JSP 語法 <%= expression %> 例子 <font color="blue"><%= map.size() %></font> <b><%= numguess.getHint() %></b>. 描述 表達(dá)式元素表示的是一個(gè)在腳本語言中被定義的表達(dá)式,在運(yùn)行后被自動(dòng)轉(zhuǎn)化為字符串,然后插入到這個(gè)表達(dá)示在JSP文件的位置顯示。因?yàn)檫@個(gè)表達(dá)式的值已經(jīng)被轉(zhuǎn)化為字符串,所以你能在一行文本中插入這個(gè)表達(dá)式(形式和ASP完全一樣).
當(dāng)你在JSP中使用表達(dá)式時(shí)請(qǐng)記住以下幾點(diǎn):
你不能用一個(gè)分號(hào)(";")來作為表達(dá)式的結(jié)束符.但是同樣的表達(dá)式用在scriptlet中就需要以分號(hào)來結(jié)尾了!查看Scriptlet 這個(gè)表達(dá)式元素能夠包括任何在Java Language Specification中有效的表達(dá)式. 有時(shí)候表達(dá)式也能做為其它JSP元素的屬性值.一個(gè)表達(dá)式能夠變得很復(fù)雜,它可能由一個(gè)或多個(gè)表達(dá)式組成,這些表達(dá)式的順序是從左到右。
================================================================== Scriptlet 包含一個(gè)有效的程序段.
JSP 語法 <% code fragment %> 例子 <% String name = null; if (request.getParameter("name") == null) { %> <%@ include file="error.html" %> <% } else { foo.setName(request.getParameter("name")); if (foo.getName().equalsIgnoreCase("integra")) name = "acura"; if (name.equalsIgnoreCase( "acura" )) { %> 描述 一個(gè)scriptlet能夠包含多個(gè)jsp語句,方法,變量,表達(dá)式
因?yàn)?/span>scriptlet,我們便能做以下的事:
聲明將要用到的變量或方法(參考 聲明). 編寫JSP表達(dá)式(參考 表達(dá)式). 使用任何隱含的對(duì)象和任何用<jsp:useBean>聲明過的對(duì)象 編寫JSP語句 (如果你在使用Java語言,這些語句必須遵從Java Language Specification,). 任何文本,HTML標(biāo)記,JSP元素必須在scriptlet之外 當(dāng)JSP收到客戶的請(qǐng)求時(shí),scriptlet就會(huì)被執(zhí)行,如果scriptlet有顯示的內(nèi)容,這些顯示的內(nèi)容就被存在out對(duì)象中。
======================================================================= Include 指命 在JSP中包含一個(gè)靜態(tài)的文件,同時(shí)解析這個(gè)文件中的JSP語句.
JSP 語法 <%@ include file="relativeURL" %> 例子 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
描述 <%@include %>指令將會(huì)在JSP編譯時(shí)插入一個(gè)包含文本或代碼的文件,當(dāng)你使用<%@ include %>指命時(shí),這個(gè)包含的過程就當(dāng)是靜態(tài)的。靜態(tài)的包含就是指這個(gè)被包含的文件將會(huì)被插入到JSP文件中去,這個(gè)包含的文件可以是JSP文件,HTML文件,文本文件。如果包含的是JSP文件,這個(gè)包含的JSP的文件中代碼將會(huì)被執(zhí)行。
如果你僅僅只是用include 來包含一個(gè)靜態(tài)文件。那么這個(gè)包含的文件所執(zhí)行的結(jié)果將會(huì)插入到JSP文件中放<% @ include %>的地方。一旦包含文件被執(zhí)行,那么主JSP文件的過程將會(huì)被恢復(fù),繼續(xù)執(zhí)行下一行.
這個(gè)被包含文件可以是html文件,jsp文件,文本文件,或者只是一段Java代碼,但是你得注意在這個(gè)包含文件中不能使用<html>,</html>,<body>,</body>標(biāo)記,因?yàn)檫@將會(huì)影響在原JSP文件中同樣的標(biāo)記 ,這樣做有時(shí)會(huì)導(dǎo)致錯(cuò)誤.
有一些<%@ include %>指命的行為是以特殊的JSP編譯條件為基礎(chǔ),比如:
這個(gè)被包含的文件必須對(duì)所有客戶都有開放且必須f有效,或者它有安全限制 如果這個(gè)包含文件被改變,包含此文件的JSP文件將被重新編譯 屬性: file="relativeURL" 這個(gè)包含文件的路徑名一般來說是指相對(duì)路徑,不需要什么端口,協(xié)議,和域名,如下:
"error.jsp""/templates/onlinestore.html""/beans/calendar.jsp"
如果這個(gè)路徑以"/"開頭,那么這個(gè)路徑主要是參照JSP應(yīng)用的上下關(guān)系路徑,如果路徑是以文件名或目錄名開頭,那么這個(gè)路徑就是正在使用的JSP文件的當(dāng)前路徑.
================================================================== Page 指令 定義JSP文件中的全局屬性.
JSP 語法 <%@ page [ language="java" ] [ extends="package.class" ] [ import="{package.class / package.*}, ..." ] [ session="true / false" ] [ buffer="none / 8kb / sizekb" ] [ autoFlush="true / false" ] [ isThreadSafe="true / false" ] [ info="text" ] [ errorPage="relativeURL" ] [ contentType="mimeType [ ;charset=characterSet ]" / "text/html ; charset=ISO-8859-1" ] [ isErrorPage="true / false" ] %> 例子 <%@ page import="java.util.*, java.lang.*" %> <%@ page buffer="5kb" autoFlush="false" %> <%@ page errorPage="error.jsp" %> 描述 <%@ page %>指令作用于整個(gè)JSP頁面,同樣包括靜態(tài)的包含文件。但是<% @ page %>指令不能作用于動(dòng)態(tài)的包含文件,比如 <jsp:include>
你可以在一個(gè)頁面中用上多個(gè)<% @ page %>指令,但是其中的屬性只能用一次,不過也有個(gè)例外,那就是import屬性。因?yàn)?/span>import屬性和Java中的import語句差不多(參照Java Language),所以你就能多用此屬性幾次了.
無論你把<% @ page %>指令放在JSP的文件的哪個(gè)地方,它的作用范圍都是整個(gè)JSP頁面。不過,為了JSP程序的可讀性,以及好的編程習(xí)慣,最好還是把它放在JSP文件的頂部.
屬性 language="java" 聲明腳本語言的種類,暫時(shí)只能用"java"
extends="package.class" 標(biāo)明JSP編譯時(shí)需要加入的Java Class的全名,但是得慎重的使用它,它會(huì)限制JSP的編譯能力.
import="{package.class / package.* }, ..." 需要導(dǎo)入的Java包的列表,這些包就作用于程序段,表達(dá)式,以及聲明。
下面的包在JSP編譯時(shí)已經(jīng)導(dǎo)入了,所以你就不需要再指明了:
java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*
session="true / false" 設(shè)定客戶是否需要HTTP Session.(學(xué)過ASP的人,應(yīng)該對(duì)它不陌生)如果它為true,那么Session是有用的。
如果它有false,那么你就不能使用session對(duì)象,以及定義了scope=session的<jsp:useBean>元素。這樣的使用會(huì)導(dǎo)致錯(cuò)誤.
缺省值是true.
buffer="none / 8kb / sizekb" buffer的大小被out對(duì)象用于處理執(zhí)行后的JSP對(duì)客戶瀏覽器的輸出。缺省值是8kb
autoFlush="true / false" 設(shè)置如果buffer溢出,是否需要強(qiáng)制輸出,如果其值被定義為true(缺省值),輸出正常,如果它被設(shè)置為false,如果這個(gè)buffer溢出,就會(huì)導(dǎo)致一個(gè)意外錯(cuò)誤的發(fā)生.如果你把buffer設(shè)置為none,那么你就不能把autoFlush設(shè)置為false.
isThreadSafe="true / false" 設(shè)置Jsp文件是否能多線程使用。缺省值是true,也就是說,JSP能夠同時(shí)處理多個(gè)用戶的請(qǐng)求,如果設(shè)置為false,一個(gè)jsp只能一次處理一個(gè)請(qǐng)求
info="text" 一個(gè)文本在執(zhí)行JSP將會(huì)被逐字加入JSP中,你能夠使用Servlet.getServletInfo方法取回。
errorPage="relativeURL" 設(shè)置處理異常事件的JSP文件。
isErrorPage="true / false" 設(shè)置此頁是否為出錯(cuò)頁,如果被設(shè)置為true,你就能使用exception對(duì)象.
contentType="mimeType [ ;charset=characterSet ]" / "text/html;charset=ISO-8859-1" 設(shè)置MIME類型 。缺省MIME 類型是: text/html, 缺省字符集為 ISO-8859-1.
================================================================= Taglib 指令 定義一個(gè)標(biāo)簽庫以及其自定義標(biāo)簽的前綴.
JSP 語法 <%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %> 例子 <%@ taglib uri="http://www./tags" prefix="public" %> <public:loop> . . </public:loop> 描述 <% @ taglib %>指令聲明此JSP文件使用了自定義的標(biāo)簽,同時(shí)引用標(biāo)簽庫,也指定了他們的標(biāo)簽的前綴。
這里自定義的標(biāo)簽含有標(biāo)簽和元素之分。因?yàn)?/span>JSP文件能夠轉(zhuǎn)化為XML,所以了解標(biāo)簽和元素之間的聯(lián)系很重要。標(biāo)簽只不過是一個(gè)在意義上被抬高了點(diǎn)的標(biāo)記,是JSP元素的一部分。JSP元素是JSP語法的一部分,和XML一樣有開始標(biāo)記和結(jié)束標(biāo)記。元素也可以包含其它的文本,標(biāo)記,元素。比如,一個(gè)jsp:plugin元素有<jsp:plugin>開始標(biāo)記和</jsp:plugin>結(jié)束標(biāo)記,同樣也可以有<jsp:params>和<jsp:fallback>元素.
你必須在使用自定義標(biāo)簽之前使用<% @ taglib %>指令,而且你可以在一個(gè)頁面中多次使用,但是前綴只能使用一次
屬性 uri="URIToTagLibrary" Uniform Resource Identifier (URI)根據(jù)標(biāo)簽的前綴對(duì)自定義的標(biāo)簽進(jìn)行唯一的命名,URI可以是以下的內(nèi)容:
Uniform Resource Locator (URL), 由 RFC 2396 定義, 查看 http://www./u/jkorpela/rfc/2396/full.html
Uniform Resource Name (URN), 由 RFC 2396定義
一個(gè)相對(duì)或絕對(duì)的路徑 prefix="tagPrefix" 在自定義標(biāo)簽之前的前綴,比如,在<public:loop>中的public,如果這里不寫public,那么這就是不合法的。請(qǐng)不要用jsp, jspx, java, javax, servlet, sun, 和sunw做為你的前綴
===================================================================== <jsp:forward> 重定向一個(gè)HTML文件,JSP文件,或者是一個(gè)程序段.
JSP 語法 <jsp:forward page={"relativeURL" / "<%= expression %>"} /> or <jsp:forward page={"relativeURL" / "<%= expression %>"} > <jsp:param name="parameterName" value="{parameterValue / <%= expression %>}" />+ </jsp:forward> 例子 <jsp:forward page="/servlet/login" /> <jsp:forward page="/servlet/login"> <jsp:param name="username" value="jsmith" /> </jsp:forward> 描述 <jsp:forward>標(biāo)簽從一個(gè)JSP文件向另一個(gè)文件傳遞一個(gè)包含用戶請(qǐng)求的request對(duì)象.<jsp:forward>標(biāo)簽以下的代碼,將不能執(zhí)行.
你能夠向目標(biāo)文件傳送參數(shù)和值,在這個(gè)例子中我們傳遞的參數(shù)名為username,值為scott,如果你使用了<jsp:param>標(biāo)簽的話,目標(biāo)文件必須是一個(gè)動(dòng)態(tài)的文件,能夠處理參數(shù).
如果你使用了非緩沖輸出的話,那么使用<jsp:forward>時(shí)就要小心。如果在你使用<jsp:forward>之前,jsp文件已經(jīng)有了數(shù)據(jù),那么文件執(zhí)行就會(huì)出錯(cuò).
屬性 page="{relativeURL / <%= expression %>}" 這里是一個(gè)表達(dá)式或是一個(gè)字符串用于說明你將要定向的文件或URL.這個(gè)文件可以是JSP,程序段,或者其它能夠處理request對(duì)象的文件(如asp,cgi,php).
<jsp:param name="parameterName" value="{parameterValue / <%= expression %>}" />+ 向一個(gè)動(dòng)態(tài)文件發(fā)送一個(gè)或多個(gè)參數(shù),這個(gè)文件一定是動(dòng)態(tài)文件.
如果你想傳遞多個(gè)參數(shù),你可以在一個(gè)JSP文件中使用多個(gè)<jsp:param>。name指定參數(shù)名,value指定參數(shù)值.
====================================================================== <jsp:getProperty> 獲取Bean的屬性值,用于顯示在頁面中
JSP 語法 <jsp:getProperty name="beanInstanceName" property="propertyName" /> 例子 <jsp:useBean id="calendar" scope="page" class="employee.Calendar" /> <h2> Calendar of <jsp:getProperty name="calendar" property="username" /> </h2> 描述 這個(gè)<jsp:getProperty>元素將獲得Bean的屬性值,并可以將其使用或顯示在JSP頁面中.在你使用<jsp:getProperty>之前,你必須用<jsp:useBean>創(chuàng)建它.
<jsp:getProperty>元素有一些限制:
你不能使用<jsp:getProperty>來檢索一個(gè)已經(jīng)被索引了的屬性 你能夠和JavaBeans組件一起使用<jsp:getProperty>,但是不能與Enterprise Bean一起使用。 屬性 name="beanInstanceName" bean的名字,由<jsp:useBean>指定
property="propertyName" 所指定的Bean的屬性名。
技巧: 在sun的JSP參考中提到,如果你使用<jsp:getProperty>來檢索的值是空值,那么NullPointerException將會(huì)出現(xiàn),同時(shí)如果使用程序段或表達(dá)式來檢索其值,那么在瀏覽器上出現(xiàn)的是null(空).
====================================================================== <jsp:include> 包含一個(gè)靜態(tài)或動(dòng)態(tài)文件.
JSP 語法 <jsp:include page="{relativeURL / <%= expression%>}" flush="true" /> or <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>元素允許你包含動(dòng)態(tài)文件和靜態(tài),這兩種包含文件的結(jié)果是不同的。如果文件僅是靜態(tài)文件,那么這種包含僅僅是把包含文件的內(nèi)容加到jsp文件中去,而如果這個(gè)文件動(dòng)態(tài)的,那么這個(gè)被包含文件也會(huì)被Jsp編譯器執(zhí)行(這一切與asp相似)
你不能從文件名上判斷一個(gè)文件是動(dòng)態(tài)的還是靜態(tài)的,比如aspcn.asp 就有可能只是包含一些信息而已,而不需要執(zhí)行。<jsp:include>能夠同時(shí)處理這兩種文件,因此你就不需要包含時(shí)還要判斷此文件是動(dòng)態(tài)的還是靜態(tài)的.
如果這個(gè)包含文件是動(dòng)態(tài)的,那么你還可以用<jsp:param>還傳遞參數(shù)名和參數(shù)值。
屬性 page="{relativeURL / <%= expression %>}" 參數(shù)為一相對(duì)路徑,或者是代表相對(duì)路徑的表達(dá)式.
flush="true" 這里你必須使用flush="true",你不能使用false值.缺省值為false
<jsp:param name="parameterName" value="{parameterValue / <%= expression %> }" />+ <jsp:param>子句能讓你傳遞一個(gè)或多個(gè)參數(shù)給動(dòng)態(tài)文件
你能在一個(gè)頁面中使用多個(gè)<jsp:param>來傳遞多個(gè)參數(shù).
================================================================== <jsp:plugin> 執(zhí)行一個(gè)applet或Bean,有可能的話還要下載一個(gè)Java插件用于執(zhí)行它.
JSP 語法 <jsp:plugin type="bean / applet" code="classFileName" codebase="classFileDirectoryName" [ name="instanceName" ] [ archive="URIToArchive, ..." ] [ align="bottom / top / middle / left / right" ] [ height="displayPixels" ] [ width="displayPixels" ] [ hspace="leftRightPixels" ] [ vspace="topBottomPixels" ] [ jreversion="JREVersionNumber / 1.1" ] [ nspluginurl="URLToPlugin" ] [ iepluginurl="URLToPlugin" ] > [ <jsp:params> [ <jsp:param name="parameterName" value="{parameterValue / <%= expression %>}" /> ]+ </jsp:params> ]
[ <jsp:fallback> text message for user </jsp:fallback> ]
</jsp:plugin>
例子 <jsp:plugin type=applet code="Molecule.class" codebase="/html"> <jsp:params> <jsp:param name="molecule" value="molecules/benzene.mol" /> </jsp:params> <jsp:fallback> <p>Unable to load applet</p> </jsp:fallback> </jsp:plugin> 描述 <jsp:plugin>元素用于在瀏覽器中播放或顯示一個(gè)對(duì)象(典型的就是applet和Bean),而這種顯示需要在瀏覽器的java插件。
當(dāng)Jsp文件被編譯,送往瀏覽器時(shí),<jsp:plugin>元素將會(huì)根據(jù)瀏覽器的版本替換成<object>或者<embed>元素。注意,<object>用于HTML 4.0 ,<embed>用于HTML 3.2.
一般來說,<jsp:plugin>元素會(huì)指定對(duì)象是Applet還是Bean,同樣也會(huì)指定class的名字,還有位置,另外還會(huì)指定將從哪里下載這個(gè)Java插件。具體如下:
屬性 type="bean / applet" .將被執(zhí)行的插件對(duì)象的類型,你必須得指定這個(gè)是Bean還是applet,因?yàn)檫@個(gè)屬性沒有缺省值.
code="classFileName" 將會(huì)被Java插件執(zhí)行的Java Class的名字,必須以.class結(jié)尾。這個(gè)文件必須存在于codebase屬性指定的目錄中.
codebase="classFileDirectoryName" 將會(huì)被執(zhí)行的Java Class文件的目錄(或者是路徑),如果你沒有提供此屬性,那么使用<jsp:plugin>的jsp文件的目錄將會(huì)被使用.
name="instanceName" 這個(gè)Bean或applet實(shí)例的名字,它將會(huì)在Jsp其它的地方調(diào)用.
archive="URIToArchive, ..." 一些由逗號(hào)分開的路徑名,這些路徑名用于預(yù)裝一些將要使用的class,這會(huì)提高applet的性能.
align="bottom / top / middle / left / right" 圖形,對(duì)象,Applet的位置,有以下值:
bottom top middle left right height="displayPixels" width="displayPixels" Applet或Bean將要顯示的長寬的值,此值為數(shù)字,單位為象素.
hspace="leftRightPixels" vspace="topBottomPixels" Applet或Bean顯示時(shí)在屏幕左右,上下所需留下的空間,單位為象素.
jreversion="JREVersionNumber / 1.1" Applet或Bean運(yùn)行所需的Java Runtime Environment (JRE) 的版本. 缺省值是 1.1.
nspluginurl="URLToPlugin" Netscape Navigator用戶能夠使用的JRE的下載地址,此值為一個(gè)標(biāo)準(zhǔn)的URL,如http://www./jsp
iepluginurl="URLToPlugin" IE用戶能夠使用的JRE的下載地址,此值為一個(gè)標(biāo)準(zhǔn)的URL,如http://www./jsp
<jsp:params> [ <jsp:param name="parameterName" value="{parameterValue / <%= expression %>}" /> ]+ </jsp:params> 你需要向applet或Bean傳送的參數(shù)或參數(shù)值。
<jsp:fallback> text message for user </jsp:fallback> 一段文字用于Java 插件不能啟動(dòng)時(shí)顯示給用戶的,如果插件能夠啟動(dòng)而applet或Bean不能,那么瀏覽器會(huì)有一個(gè)出錯(cuò)信息彈出.
========================================================================= <jsp:setProperty> 設(shè)置Bean中的屬性值.
JSP語法 <jsp:setProperty name="beanInstanceName" { property= "*" / property="propertyName" [ param="parameterName" ] / property="propertyName" value="{string / <%= expression %>}" } /> 例子 <jsp:setProperty name="mybean" property="*" /> <jsp:setProperty name="mybean" property="username" /> <jsp:setProperty name="mybean" property="username" value="Steve" /> 描述 <jsp:setProperty>元素使用Bean給定的setter方法,在Bean中設(shè)置一個(gè)或多個(gè)屬性值。你在使用這個(gè)元素之前必須得使用<jsp:useBean>聲明此Bean.因?yàn)椋?/span><jsp:useBean>和<jsp:setProperty>是聯(lián)系在一起的,同時(shí)這他們使用的Bean實(shí)例的名字也應(yīng)當(dāng)相匹配(就是說,在<jsp:setProperty>中的name的值應(yīng)當(dāng)和<jsp:useBean>中id的值相同)
你能使用多種方法利用<jsp:setProperty>來設(shè)定屬性值 :
通過用戶輸入的所有值(被做為參數(shù)儲(chǔ)存中request對(duì)象中)來匹配Bean中的屬性 通過用戶輸入的指定的值來匹配Bean中指定的屬性 在運(yùn)行時(shí)使用一個(gè)表達(dá)式來匹配Bean的屬性 每一種設(shè)定屬性值的方法都有其特定的語法,下面我們會(huì)來講解
屬性及其用法 name="beanInstanceName" 表示已經(jīng)在<jsp:useBean>中創(chuàng)建的Bean實(shí)例的名字.
property="*" 儲(chǔ)存用戶在Jsp輸入的所有值,用于匹配Bean中的屬性。在Bean中的屬性的名字必須和request對(duì)象中的參數(shù)名一致.
從客戶傳到服器上的參數(shù)值一般都是字符類型 ,這些字符串為了能夠在Bean中匹配就必須轉(zhuǎn)換成其它的類型,下面的表中列出了Bean屬性的類型以及他們的轉(zhuǎn)換方法.
把字符串轉(zhuǎn)化為其它類型的方法. Property 類型 方法
boolean or Boolean
java.lang.Boolean.valueOf(String)
byte or Byte
java.lang.Byte.valueOf(String)
char or Character
java.lang.Character.valueOf(String)
double or Double
java.lang.Double.valueOf(String)
integer or Integer
java.lang.Integer.valueOf(String)
float or Float
java.lang.Float.valueOf(String)
long or Long
java.lang.Long.valueOf(String)
如果request對(duì)象的參數(shù)值中有空值,那么對(duì)應(yīng)的Bean屬性將不會(huì)設(shè)定任何值。同樣的,如果Bean中有一個(gè)屬性沒有與之對(duì)應(yīng)的Request參數(shù)值,那么這個(gè)屬性同樣也不會(huì)設(shè)定.
property="propertyName" [ param="parameterName" ] 使用request中的一個(gè)參數(shù)值來指定Bean中的一個(gè)屬性值。在這個(gè)語法中,property指定Bean的屬性名,param指定request中的參數(shù)名.
如果bean屬性和request參數(shù)的名字不同,那么你就必須得指定property和param ,如果他們同名,那么你就只需要指明property就行了.
如查參數(shù)值為空(或未初始化),對(duì)應(yīng)的Bean屬性不被設(shè)定.
property="propertyName" value="{string / <%= expression %>}" 使用指定的值來設(shè)定Bean屬性。這個(gè)值可以是字符串,也可以是表達(dá)式。如果這個(gè)字符串,那么它就會(huì)被轉(zhuǎn)換成Bean屬性的類型(查看上面的表).如果它是一個(gè)表達(dá)式,那么它類型就必須和它將要設(shè)定的屬性值的類型一致。
如果參數(shù)值為空,那么對(duì)應(yīng)的屬性值也不會(huì)被設(shè)定。另外,你不能在一個(gè)<jsp:setProperty>中同時(shí)使用param和value
技巧 如果你使用了property="*",那么Bean的屬性沒有必要按Html表單中的順序排序
======================================================================= <jsp:useBean> 創(chuàng)建一個(gè)Bean實(shí)例并指定它的名字和作用范圍.
JSP 語法 <jsp:useBean id="beanInstanceName" scope="page / request / session / application" { class="package.class" / type="package.class" / class="package.class" type="package.class" / beanName="{package.class / <%= expression %>}" type="package.class" } { /> / > other elements </jsp:useBean> } 例子 <jsp:useBean id="cart" scope="session" class="session.Carts" /> <jsp:setProperty name="cart" property="*" /> <jsp:useBean id="checking" scope="session" class="bank.Checking" > <jsp:setProperty name="checking" property="balance" value="0.0" /> </jsp:useBean>
描述 <jsp:useBean>用于定位或示例一個(gè)JavaBeans組件。<jsp:useBean>首先會(huì)試圖定位一個(gè)Bean實(shí)例,如果這個(gè)Bean不存在,那么<jsp:useBean>就會(huì)從一個(gè)class或模版中進(jìn)行示例。
為了定位或示例一個(gè)Bean,<jsp:useBean>會(huì)進(jìn)行以下步聚,順序如下:
通過給定名字和范圍試圖定位一個(gè)Bean. 對(duì)這個(gè)Bean對(duì)象引用變量以你指定的名字命名. 如果發(fā)現(xiàn)了這個(gè)Bean,將會(huì)在這個(gè)變量中儲(chǔ)存這個(gè)引用。如果你也指定了類型,那么這個(gè)Bean也設(shè)置為相應(yīng)的類型. 如果沒有發(fā)現(xiàn)這個(gè)Bean,將會(huì)從你指定的class中示例,并將此引用儲(chǔ)存到一個(gè)新的變量中去。如果這個(gè)class的名字代表的是一個(gè)模版,那么這個(gè)Bean被java.beans.Beans.instantiate示例. 如果<jsp:useBean>已經(jīng)示例(不是定位)了Bean,同時(shí)<jsp:useBean>和</jsp:useBean>中有元素,那么將會(huì)執(zhí)行其中的代碼. <jsp:useBean>元素的主體通常包含有<jsp:setProperty>元素,用于設(shè)置Bean的屬性值。正如上面第五步所說的,<jsp:useBean>的主體僅僅只有在<jsp:useBean>示例Bean時(shí)才會(huì)被執(zhí)行,如果這個(gè)Bean已經(jīng)存在,<jsp:useBean>能夠定位它,那么主體中的內(nèi)容將不會(huì)起作用
屬性以及用法 id="beanInstanceName" 在你所定義的范圍中確認(rèn)Bean的變量,你能在后面的程序中使用此變量名來分辨不同的Bean
這個(gè)變量名對(duì)大小寫敏感,必須符合你所使用的腳本語言的規(guī)定,在Java Programming Language中,這個(gè)規(guī)定在Java Language 規(guī)范已經(jīng)寫明。如果這個(gè)Bean已經(jīng)在別的<jsp:useBean>中創(chuàng)建,那么這個(gè)id的值必須與原來的那個(gè)id值一致.
scope="page / request / session / application" Bean存在的范圍以及id變量名的有效范圍。缺省值是page,以下是詳細(xì)說明:
page - 你能在包含<jsp:useBean>元素的JSP文件以及此文件中的所有靜態(tài)包含文件中使用Bean,直到頁面執(zhí)行完畢向客戶端發(fā)回響應(yīng)或轉(zhuǎn)到另一個(gè)文件為止。
request - 你在任何執(zhí)行相同請(qǐng)求的Jsp文件中使用Bean,直到頁面執(zhí)行完畢向客戶端發(fā)回響應(yīng)或轉(zhuǎn)到另一個(gè)文件為止。你能夠使用Request對(duì)象訪問Bean,比如request.getAttribute(beanInstanceName)
session - 從創(chuàng)建Bean開始,你就能在任何使用相同session的Jsp文件中使用Bean.這個(gè)Bean存在于整個(gè)Session生存周期內(nèi),任何在分享此Session的Jsp文件都能使用同一Bean.注意在你創(chuàng)建Bean的Jsp文件中<% @ page %>指令中必須指定session=true
application - 從創(chuàng)建Bean開始,你就能在任何使用相同application的Jsp文件中使用Bean.這個(gè)Bean存在于整個(gè)application生存周期內(nèi),任何在分享此application的Jsp文件都能使用同一Bean. class="package.class" 使用new關(guān)鍵字以及class構(gòu)造器從一個(gè)class中示例一個(gè)bean.這個(gè)class不能是抽象的,必須有一個(gè)公用的,沒有參數(shù)的構(gòu)造器.這個(gè)package的名字區(qū)別大小寫。
type="package.class" 如果這個(gè)Bean已經(jīng)在指定的范圍中存在,那么寫這個(gè)Bean一個(gè)新的數(shù)據(jù)庫類型 。如果你沒有使用class或beanName指定type,Bean將不會(huì)被示例.package和class的名字,區(qū)分大小寫.
beanName="{package.class / <%= expression %>}" type="package.class" 使用java.beans.Beans.instantiate方法來從一個(gè)class或連續(xù)模版中示例一個(gè)Bean,同時(shí)指定Bean的類型。
beanName可以是package和class也可以是表達(dá)式,它的值會(huì)傳給Beans.instantiate.tupe的值可以和Bean相同。
package 和 class 名字區(qū)分大小寫. |
|