本文通过实验的方法,总结出JavaBean在各种情况下实例的状态。
先定义一个类
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中调用。
<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同样使用这样的调用方式。
而scope一共有"application","page","session","request"四个值。
一、page
现在的情况是scope="page" 。其页面刷新。test1和test2的random不一致,并且两个页面中的也不一致。由此断定:
scope="page"情况下,一个userBean就是一次实例化的过程。
二、request
scope="request"的情况与scope="page" 的一样。
三、session
scope="session"的情况,同一个页面中,test1与test2的random不一致,可以断定,这是两个实例。而showCount 会不断累加,因此这两个实例并不随页面的刷新而重新创建。两个不同页面中,test1的状态完全一致,test2的状态完全一致。这表明,scope="session"的状态,创建实例是与id相关的。打开不同浏览器或者清空Cookies,将导致实例的重新创建。这表明,当前状态下,创建实例与session相关,有个过期的时间。
四、application
scope="application"是全局的表示。打开不同浏览器浏览不同的页面,test1与test2仍然不一致,但是不同页面的test1已经一致,并且不同浏览器中数量仍然累加。所以,实例的创建与否,只与id有关。