一、scope各项参数的意义:
①page:仅涵盖使用JavaBean的页面。之前已举例。
②request:有效范围仅限于JavaBean的请求。
生成一个request范围内的JavaBean对象:
这样看可能没有什么概念,上面这种声明相当于下面这种:
即直接从request对象中拿counterBean,由于返回值是Object类型,需要强制转换为CounterBean类型。
如果拿出来为NULL,说明还没有这个JavaBean对象,则生成一个,并且放到request对象中来。
这样,只要request对象是相同的,就可以访问到相同的JavaBean对象。
举例:
RequestBean.jsp如下所示:
其中的跳转页面RequestBean2.jsp如下所示:
RequestBean2.jsp在加载useBean时会从request对象中键名为"counterBean"的值,由于在RequestBean.jsp中已经生成了counterBean,并set到了request对象中,则直接取出来就可以用。
③session:有效范围在用户整个会话阶段均有效
生成一个request范围内的JavaBean对象:
也就相当于:
举例SessionBean.jsp:
再写一个使用了useBean的jsp:SessionBean2.jsp如下所示:
第一次访问:http://localhost:8080/TestJSP/SessionBean.jsp,页面效果如下:
多次访问后:
而此时在同一个窗口中访问:http://localhost:8080/TestJSP/SessionBean2.jsp,
用别的浏览器访问,则被当做另一个客户端,会创建新的session对象,也会创建新的CounterBean对象,从0自加起:
④application:有效范围涵盖整个应用程序,也就是对整个网站均有效。
生成一个ServletContext范围内的JavaBean对象:
相当于:
只要Tomcat不重启,该counterBean对象就会一直被保存在application对象中,在另一个jsp中就可以使用jsp:useBean 来拿出该counterBean对象。也是由于保存在application对象中的缘故,counterBean对象属于Tomcat启动后,任何时刻要访问它的客户端请求。
①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启动后,任何时刻要访问它的客户端请求。