JavaBean的生命周期(page/request/session/application)

JavaBean的生命周期(page/request/session/application)

首先JSP页面中的javabean是通过JSP的动作标签来实现对javabean对象的操作,动作标签:
<jsp:usebean id="beanName" class="包名.类名" scope="page/request/session/application"/>
<jsp:getProperty name="beanName" property="name"/>
<jsp:setProperty name="beanName" property="name" value=""/>

其中scope指的就是javabean的生命周期,javabean实际上就是使用java代码封装的类。
接下来我们讨论一下javabean的生命周期。

1.page范围

与当前的页面相对应,JavaBean的生命周期只能存在于一个页面之中,也就是说,在page范围的javabean只能在当前创建的JSP文件中进行操作,如果页面关闭了或者是转发到其他的页面中去。javabean就会被销毁。常常用来是一次性的操作,因为每一次调用(刷新)这个JSP页面时都会重新生成一个对象。
这里我们将结合例子来说明page范围的具体应用。这里采用记录访问的人数的例子。

<核心的JavaBean文件>   // 对于4个范围里的<JavaBean的核心文件>都是采用这个
public class scope{
private int scope_count=5;

public scope(){//构造方法(无参数)

}
public int addCount(){
scope_count=scope_count+1;
return scope_count;
}
public void setCount(int count){
scope_coount=count;
}
}

page.jsp
<%@ page contentType="text/html";charset=utf-8"%>
<html><head>
<title>page范围计数人数</title>
</head>
<jsp:useBean id="scope" scope="page" class="ph01.scope"/>
<body>
page范围<br>
当前的访问人数是<%out.println(scope.addCount());%>
</body>
</html>

运行这个程序,我们就会发现当前的访问人数为6,然后我们不断进行刷新的话,访问的人数还是6,并不会增加。原因是因为addCount()这个方法只被执行了一次,每一次调用这个JSP页面都会重新生成一个对象,对象只在这个JSP页面中有效,所以当前的访问人数不会再发生改变了。

2.request范围

与JSP的request生命周期相应,有request范围的javabean常用于共享同一请求的JSP页面中,转发后的页面也依旧可以得到表单提交的数据。在转发后的页面得到的依旧是同一个实例的对象。当对象被销毁时,javabean也会被销毁。

JavaBean的核心文件在上面,这里就不一一再重复了。

<request范围的演示>
request.jsp
<%@ page contentType="text/html";charset=utf-8"%>
<html><head>
<title>request范围</title>
</head>
<jsp:useBean id=scope" scope="request" class="ph01.scope"/>
<body>
request范围积分<br>
当前的访问人数为<%out.println(scope.setCount(10));%>
<jsp:forward page=request0.jsp/>
</body></html>

request0.jsp
<%@ page contentType="text/html";charset=utf-8"%>
<html><head>
<title>request范围</title>
</head>
<jsp:useBean id="scope" scope="request" class="ph01.scope"/>
<body>
request范围积分程序演示<br>
当前的访问人数为<%out.println(scope.addCount());%>
</body>
</html>

运行这个程序,然后进行刷新,在这里我们给它重新设定了一个scope_count的值:10,用来传递给下一个JSP页面。最后会发现结果为11,因为在request范围里,所以在请求转发后的直接页面是与前一个页面使用的是同一个实例,10+1=11,所以我们就可以得到11了。

3.session范围

也是与JSP的session生命周期相对应,只有当session过期了或是超时了,javabean才会被释放掉。同时如果我们之前打开或浏览器,然后现在我们又重新打开了一个浏览器,就相当于我们重新开了一个session的会话,与之前的那个是不同的。

<JavaBean核心文件>在上文已经提及了,所以在这里不予以重复。

session.jsp
<%@ page contentType="text/html";charset=utf-8"%>
<html><head>
<title>session范围</title>
</head>
<jsp:useBean id="scope" scope="session" class="ph01.scope"/>
<body>
session范围<br>
当前的访问人数为<%out.println(scope.addCount());%>
</body>
</html>

当我们运行这个程序的时候,并且点击浏览器的刷新按钮,我们可以发现,6,7,8,9......,说明了addCount()方法一直被执行,在session范围里,一直使用的是同一个实例的对象。但是如果我们此时打开一个新的浏览器,我们就会发现,当前访问的人数依旧是从6开始,并不是参照之前已经访问的人数开始。这就说明了,我们重新打开这个浏览器,相当于是重新建了一个session对象,这两个对象是不同的,所以当前的访问人数当然也不同。



4.application范围

与JSP的application生命周期对应,只有当服务器被关掉才会被销毁。它的生命周期是最长的,一般会运用到计算浏览人次等。如果我们之前打开或浏览器,现在又重新打开一个浏览器,使用的还是同一个application。因为只有将web服务器重新启动后,才会生成另一个application对象。

<JavaBean核心文件>在上文已经提及了,所以在这里不予以重复。
application.jsp
<%@ page contentType="text/html";charset=gb2312"%>
<html>
<head>
<title>application范围积分程序演示</title>
</head>
<!--初始化JavaBean并生成一个scope的实例-->
<jsp:useBean id="scope" scope="application" class="ph01.scope"/>
<body>
application范围<br>
当前的访问人数为<%out.println(scope.addCount());%>
</body>
</html>

首先运行这个程序,然后点击浏览器的刷新按钮,我们可以发现现在页面上显示的数据与session的一模一样,是会不断发生变化的,addCount()方法一直被执行如果刷新了的话。而它与session对象的区别在于哪里呢?实际上application 的生命周期是最长的,如果我们现在又打开新的浏览器页面,我们就可以发现,两个浏览器所记录的人数是一样的。这是因为application是对于整个服务器来说的,只要服务器没有被关掉,那么它一直使用的就是同一个application对象。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值