JSP_8th_useBean的scope属性

一、scope各项参数的意义:
①page:仅涵盖使用JavaBean的页面。之前已举例。

②request:有效范围仅限于JavaBean的请求。
生成一个request范围内的JavaBean对象:
<jsp:useBean id="counterBean" 
			class="com.hpe.bean.CounterBean" 
			scope="request">
</jsp:useBean>

这样看可能没有什么概念,上面这种声明相当于下面这种:
<%@ page import="com.hpe.bean.CounterBean" %>
<%
	CounterBean counterBean = (CounterBean)request.getAttribute("counterBean");
	if(counterBean == null) {
		counterBean = new CounterBean();
		request.setAttribute("counterBean", counterBean);
	}
%>

即直接从request对象中拿counterBean,由于返回值是Object类型,需要强制转换为CounterBean类型。
如果拿出来为NULL,说明还没有这个JavaBean对象,则生成一个,并且放到request对象中来。
这样,只要request对象是相同的,就可以访问到相同的JavaBean对象。

举例:
RequestBean.jsp如下所示:
<jsp:useBean id="counterBean" 
			class="com.hpe.bean.CounterBean" 
			scope="request">
</jsp:useBean>
<html>
<body>
	<h3>CounterBean scope="request" Example</h3>


 	<% counterBean.setCount(100); %>
 	
	<jsp:forward page="RequestBean2.jsp" />


</body>
</html>

其中的跳转页面RequestBean2.jsp如下所示:
<jsp:useBean id="counterBean" 
			class="com.hpe.bean.CounterBean" 
			scope="request">
</jsp:useBean>
<html>
<body>
	<h3>CounterBean scope="request2" Example</h3>
	<strong>Count: </strong><%= counterBean.getCount() %>
	
</body>
</html>
页面效果:


RequestBean2.jsp在加载useBean时会从request对象中键名为"counterBean"的值,由于在RequestBean.jsp中已经生成了counterBean,并set到了request对象中,则直接取出来就可以用。

③session:有效范围在用户整个会话阶段均有效
生成一个request范围内的JavaBean对象:
<jsp:useBean id="counterBean" 
			class="com.hpe.bean.CounterBean" 
			scope="session">
</jsp:useBean>

也就相当于:
<%@ page import="com.hpe.bean.CounterBean" %>
<%
	CounterBean counterBean = (CounterBean)session.getAttribute("counterBean");
	if(counterBean == null) {
		counterBean = new CounterBean();
		session.setAttribute("counterBean", counterBean);
	}
%>

举例SessionBean.jsp:
<jsp:useBean id="counterBean" 
			class="com.hpe.bean.CounterBean" 
			scope="session">
</jsp:useBean>
<html>
<body>
	<h3>CounterBean scope="session" Example</h3>
	<strong>Count: </strong><%= counterBean.getCount() %>
 
</body>
</html>

再写一个使用了useBean的jsp:SessionBean2.jsp如下所示:
<jsp:useBean id="counterBean" 
			class="com.hpe.bean.CounterBean" 
			scope="session">
</jsp:useBean>
<html>
<body>
	<h3>CounterBean scope="session2" Example</h3>
	<strong>Count: </strong><%= counterBean.getCount() %>
	
</body>
</html>

第一次访问:http://localhost:8080/TestJSP/SessionBean.jsp,页面效果如下:


多次访问后:


而此时在同一个窗口中访问:http://localhost:8080/TestJSP/SessionBean2.jsp,


用别的浏览器访问,则被当做另一个客户端,会创建新的session对象,也会创建新的CounterBean对象,从0自加起:


④application:有效范围涵盖整个应用程序,也就是对整个网站均有效。
生成一个ServletContext范围内的JavaBean对象:
<jsp:useBean id="counterBean" 
			class="com.hpe.bean.CounterBean" 
			scope="application">
</jsp:useBean>

相当于:
<%@ page import="com.hpe.bean.CounterBean" %>
<%
	CounterBean counterBean = (CounterBean)application.getAttribute("counterBean");
	if(counterBean == null) {
		counterBean = new CounterBean();
		application.setAttribute("counterBean", counterBean);
	}
%>

只要Tomcat不重启,该counterBean对象就会一直被保存在application对象中,在另一个jsp中就可以使用jsp:useBean 来拿出该counterBean对象。也是由于保存在application对象中的缘故,counterBean对象属于Tomcat启动后,任何时刻要访问它的客户端请求。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值