JavaBean的保存范围
在<jsp:useBean>的指令上存在了一个scope属性,表示的是一个JavaBean的保存范围,保存的范围一共是四种:
1):page:保存在一页的范围之中,跳转之后此JavaBean无效;
2):request:一个JavaBean对象可以保存在一次服务器跳转范围中;
3):session:在一个用户的操作范围中保存,重新打开浏览器的时候才会声明新的JavaBean。
4):application:在整个服务器上保存,服务器关闭时才会消失。
为了更好的验证JavaBean的范围,下面做一个简单的JavaBean,用于进行计数的操作。
下面分别来观察属性范围:
【page_bean01.jsp的内容如下:】
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>javabean</title></head>
<jsp:useBean id="cou" scope="page" class="com.skewrain.demo.Count"/>
<body>
<h3>第<jsp:getProperty name="cou" property="count"/>次访问!</h3>
</body>
</html>
执行此代码的结果如下:
服务器端的结果如下:
【page_bean02.jsp的内容如下:】
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>javabean</title></head>
<jsp:useBean id="cou" scope="page" class="com.skewrain.demo.Count"/>
<body>
<h3>第<jsp:getProperty name="cou" property="count"/>次访问!</h3>
<jsp:forward page="page_bean01.jsp"/>
</body>
</html>
我们刷新原来的执行页面,结果如下图所示:
服务器端一次增加了两个输出:
现在的对象只在一个JSP文件中保存,那么要想在一次跳转中保存,肯定就是request属性范围。
【request_bean01.jsp的内容如下:】
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>javabean</title></head>
<jsp:useBean id="cou" scope="request" class="com.skewrain.demo.Count"/>
<body>
<h3>第<jsp:getProperty name="cou" property="count"/>次访问!</h3>
<jsp:forward page="request_bean02.jsp"/>
</body>
</html>
【request_bean02.jsp的内容如下:】
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>javabean</title></head>
<jsp:useBean id="cou" scope="request" class="com.skewrain.demo.Count"/>
<body>
<h3>第<jsp:getProperty name="cou" property="count"/>次访问!</h3>
</body>
</html>
执行此代码的结果如下所示:
以此类推:
1):如果换为session属性,那么每刷新一次,那么次数就增加1,但是当新打开一个浏览器,次数又从0开始,而且,服务器重新启动的话,就创建了一个新的session。
2):如果换为application的话,那么每刷新一次,那么次数就增加1,但是当新打开一个浏览器,访问次数是接着上次的浏览器的访问次数增加,而且,服务器重新启动的话,就创建了一个新的session。
小结:
JavaBean一共包含了四种属性保存范围,这一点与JSP中的四种属性保存范围是一样的,唯一的区别就是page范围不用像在JSP那样通过pageContext指定了。
删除JavaBean
JavaBean虽然使用了<jsp:useBean>标签进行创建,但是其操作依靠的仍然是四种属性范围,如果一个JavaBean不再使用的话,则可以直接使用四种属性范围的removeAttribute()方法进行删除。
1):删除page范围的JavaBean可以使用:
pageContext.removeAttribute(JavaBean名称)
2):删除request范围的JavaBean可以使用:
request.removeAttribute(JavaBean名称)
3):删除session范围的JavaBean可以使用:
session.removeAttribute(JavaBean名称)
4):删除application范围的JavaBean可以使用:
application.removeAtttribute(JavaBean名称)。
例如:<% session.removeAttribute(“con”)%>
【remove_session.jsp内容如下:】
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>javabean</title></head>
<jsp:useBean id="cou" scope="request" class="com.skewrain.demo.Count"/>
<body>
<h3>第<jsp:getProperty name="cou" property="count"/>次访问!</h3>
<% session.removeAttribute(“con”)%>
</body>
</html>
每次刷新之后都会有一个新的对象产生,那么可以得出一个结论,每次的JavaBean声明id之后就是将对象保存在了属性范围之中。
小结:
JavaBean的删除依然使用了四种属性范围中提供的删除范围,所以实际上JavaBean就相当于是一个保存在指定范围中的属性。而且JavaBean的最大好处依然是结合表单来体现的。