例子很簡單,Bean的功能為取目前時間,其代碼為:
Common.java:
--------------------
package XX;
import java.util.Date;
import java.text.*;
public class Common
{
Date d=new Date();
public String now(String s)
{
SimpleDateFormat formatter = new SimpleDateFormat(s);
return formatter.format(d);
}
}
測試頁面的代碼為:
date.jsp
-----------------------------------------------------------
<jsp:useBean id="cm" scope="XX" class="XX.Common"/>
<%=cm.now("yyyy-MM-dd HH:mm:ss") %>
測試結果:
1、當scope=application時,我們瀏覽date.jsp,這時顯示出了系統時間。可是不管我們怎麼重新整理,重新開啟一次瀏覽器,甚至換台機器,它顯示的時間始終不變,都是當初的時間(即bean剛建立時得到的系統時間),因為scope=application,所以Bean的執行個體在記憶體中只有一份,此時只要不重新啟動WEB服務,輸出不會變化。
2、當scope=session時,瀏覽date.jsp,重新整理時顯示也不會變化。可是當我們重新開啟一瀏覽器,即一個新的session,系統便再次建立Bean的執行個體,取得當前系統時間,這時將得到正確的時間。同樣,再次重新整理新開啟的頁面(新的session),顯示也不會變化。
3、當scope=page/request(它們的區別只在於包含靜態檔案時,此處無區別)時,不斷重新整理頁面將不斷得到當前系統時間。
以上可以看出不同的scope,Bean有不同的範圍。使用時一定注意,不要將得到經常變動的Bean的scope設為application或session,那將得到不正確的結果.
page,就是這個bean只在這個頁面中有效,比如你換了一個頁面或者重新整理了一下,這個bean就被重新執行個體化了
request,bean只在請求期間有效
session,bean在一個會話中有效
application,只要你的web server沒有停止,就一直有效。
page說白了就是只對當前頁面有效,request的話,可以通過jsp:forward來讓request在幾個servlet或者jsp中傳遞,所以page的範圍
Bean存在的範圍以及id變數名的有效範圍。預設值是page,以下詳細說明:
a)page :你能在包含<jsp:useBean>元素的JSP檔案以及此檔案中的所有靜態包含檔案中使用Bean,直到頁面執行完畢向用戶端發出響應或轉到另一個檔案為止。
b)request:你在任何執行相同請求的JSP檔案中使用Bean,直到頁面執行完畢向用戶端發出響應或轉到另一個檔案為止。你能夠使用Request對象訪問Bean
c)session:從建立Bean開始,就能在任何使用相同session的JSP檔案中使用Bean。這個Bean存在於整個Session生存周期內,任何在分享此Session的JSP檔案都能使用同一Bean。注意在你建立Bean的JSP檔案的<%@ page %>指令中必須指定session=true
d)application: 從建立Bean開始,你就能夠在任何使用相同application的JSP檔案中使用Bean。這個Bean存在於整個application生存周期內,任何在分享此application的JSP檔案都能使用同一Bean。
一個JavaBean的scope="request"的例子
request1.jsp 檔案
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*, test.TestBean" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>request1</title>
</head>
<body>
<jsp:useBean id="test" class="test.TestBean" scope="request"/>
<%
out.println(test.getCount());
request.setAttribute("test",test);
%>
<jsp:forward page="request2.jsp"/>
</form>
</body>
</html>
request2.jsp檔案
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*, test.TestBean" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>request2</title>
</head>
<body>
<%
out.println(((TestBean)request.getAttribute("test")).getCount());
%>
</body>
</html>
bean檔案
package test;
public class TestBean
{
private int count;
public int getCount() {
return count++;
}
}