本文通過實驗的方法,總結(jié)出JavaBean在各種情況下實例的狀態(tài)。
先定義一個類
package yurow.jstore;
import java.util.Random;
public class TestClass {
private int showCount;
public TestClass(){
random = new Random().nextInt();
}
private int random;
public String Show(){
showCount++;
String str = "random : " + random;
str+="<br/>showCount : " + showCount;
return str;
}
}
然后在Default.jsp中調(diào)用。
<jsp:useBean id="test1" class="yurow.jstore.TestClass" scope="page" />
<%= test1.Show() %>
<br/>
<jsp:useBean id="test2" class="yurow.jstore.TestClass" scope="page" />
<%= test2.Show() %>
在test.jsp同樣使用這樣的調(diào)用方式。
而scope一共有"application","page","session","request"四個值。
一、page
現(xiàn)在的情況是scope="page" 。其頁面刷新。test1和test2的random不一致,并且兩個頁面中的也不一致。由此斷定:
scope="page"情況下,一個userBean就是一次實例化的過程。
二、request
scope="request"的情況與scope="page" 的一樣。
三、session
scope="session"的情況,同一個頁面中,test1與test2的random不一致,可以斷定,這是兩個實例。而showCount 會不斷累加,因此這兩個實例并不隨頁面的刷新而重新創(chuàng)建。兩個不同頁面中,test1的狀態(tài)完全一致,test2的狀態(tài)完全一致。這表明,scope="session"的狀態(tài),創(chuàng)建實例是與id相關(guān)的。打開不同瀏覽器或者清空Cookies,將導(dǎo)致實例的重新創(chuàng)建。這表明,當(dāng)前狀態(tài)下,創(chuàng)建實例與session相關(guān),有個過期的時間。
四、application
scope="application"是全局的表示。打開不同瀏覽器瀏覽不同的頁面,test1與test2仍然不一致,但是不同頁面的test1已經(jīng)一致,并且不同瀏覽器中數(shù)量仍然累加。所以,實例的創(chuàng)建與否,只與id有關(guān)。