JavaBean在Jsp中的作用范圍(page,request,session,application)
JavaBean是一種可復(fù)用,跨平臺的組件。共有兩種JavaBean:一種無用戶界面,這種一般用于處理數(shù)據(jù)運算,操作數(shù)據(jù)庫等。另一種是有用戶界面(User Interface)的JavaBean. 在Jsp中一般訪問無用戶界面的JavaBean。
Jsp中訪問JavaBean語法:
- 使用page指令導(dǎo)入 JavaBean 類: <%@page import="包名 . 類名" %>
- 使用<jsp:useBean>標簽聲明JavaBean對象: <jsp:useBean id="實例名" class="包名 . 類名" scope="作用范圍"/>
注意:要給出完整的(包名 . 類名),否則報ClassNotFoundException 例:<jsp:useBean id="bean" class="com.CountBean" scope="session"/> 上面的代碼相當(dāng)于: CountBean bean = new CountBean(); session.setAttribute( "bean" , bean );
注意:如果在scope指定范圍內(nèi),該JavaBean已存在,則<jap:useBean>不會生成新的JavaBean對象,而是直接獲得已經(jīng)存在的 JavaBean 對象的引用.
3.使用<jsp:getProperty>和<jsp:setProerty>標簽訪問JavaBean屬性:
<jsp:getProperty name="實例名" property="Bean中的屬性名"> 調(diào)用Bean中的get方法得到某屬性的值
<jsp:setProperty name="實例名" property="Bean中的屬性名"> 調(diào)用Bean中的set方法給某屬性賦值
例子:<%@ page language="java" pageEncoding="ISO-8859-1"%><%@page import="com.CountBean;"%><jsp:useBean id="bean" class="com.CountBean" scope="[page][request][session][application]" />
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<title>Count.jsp'</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page">
</head>
<body> count values is:<jsp:getProperty name="bean" property="num" /> <jsp:setProperty name="bean" property="num" value="<%=bean.getNum()+1 %>"/>
<% CountBean obj = null; String scope = null; obj = (CountBean)request.getAttribute("bean"); if( obj != null ) scope = "request"; obj = ( CountBean )session.getAttribute("bean"); if( obj != null ) scope = "session"; obj = ( CountBean )application.getAttribute("bean"); if( obj != null ) scope = "application"; if( scope == null ) scope = "page"; %> <p> scope = <%=scope %> </p></body></html>
補充:1.JavaBean在page作用域中: 表示JavaBean有效范圍僅為其所在的JSP頁面,如果用戶關(guān)閉該JSP頁面,處理響應(yīng)該用戶請求的JavaBean也會消失。在這種情況下,服務(wù)器分配給每個客戶的JavaBean是不同的。 例子的結(jié)果: count values is: 0 scope = page
此時JavaBean在將以下兩種情況下結(jié)束生命周期 (1)當(dāng)客戶訪問當(dāng)前Jsp頁面通過forword轉(zhuǎn)發(fā)請求到另一文件時 (2) 當(dāng)客戶訪問當(dāng)前Jsp頁面執(zhí)行完畢并向客戶端發(fā)回響應(yīng)時
2.JavaBean在request作用域中: 表示分配給每個客戶的JavaBean不同,且有效范圍在request請求期間,即在請求與被請求頁面之間共享JavaBean。當(dāng)對請求作出響應(yīng)后,JavaBean就會被取消。 例子的結(jié)果: count values is: 0 scope = request 此時 , 當(dāng)客戶訪問當(dāng)前Jsp頁面執(zhí)行完畢并向客戶端發(fā)回響應(yīng)時 ,JavaBean結(jié)束生命周期
3 JavaBean在session作用域中: 表示分配給每個客戶的JavaBean不同,但在同一客戶打開的多個JSP頁面,即一次會話期間,用的是同一個JavaBean。如果在同一客戶的不同JSP頁面中,聲明了相同id的JavaBean且范圍仍為session,更改JavaBean的成員變量值,則其它頁面中id名相同的Bean的成員變量也會被改變。當(dāng)客戶從服務(wù)器端請求的所有網(wǎng)頁都被關(guān)閉時,與該客戶這一次會話對應(yīng)的JavaBean也會被取消。
JavaBean對象被創(chuàng)建后,一直存在于當(dāng)前回話中,在同一會話中,共享同一JavaBean 例子結(jié)果: count values is: 0( 每刷新一次,增長1,當(dāng)打開另一瀏覽器窗口重新發(fā)出請求時,就不在同一會話中了,將創(chuàng)建一個新的會話,從0開始重新增長。 ) scope = session
4.JavaBean在application作用域中 表示在這種情況下服務(wù)器端所有客戶之間共享JavaBean。如果其中一個客戶改變了JavaBean成員變量值,其它客戶使用的這個JavaBean的相應(yīng)變量值也會發(fā)生改變。當(dāng)服務(wù)器關(guān)閉時,JavaBean才會被取消。 JavaBean對象被創(chuàng)建后,一直存在于當(dāng)前Web應(yīng)用程序的生命周期中,在此應(yīng)用程序中,共享同一JavaBean例子結(jié)果: count values is: 0( 每刷新一次,增長1,當(dāng)打開另一瀏覽器窗口重新發(fā)出請求時,此時還在同一Web應(yīng)用程序中了,從原有基礎(chǔ)上增長。 ) scope = application