您的位置:首页 > Web前端 > JavaScript

JSP_8th_useBean的scope属性

2017-05-31 23:47 357 查看
一、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启动后,任何时刻要访问它的客户端请求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jsp useBean scope