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