jsp中useBean动作的scope可以制定四种范围(page,request,session,application)的区别
2009-05-29 11:44
543 查看
例子很简单,Bean的功能为取当前时间,其代码为:
Common.java:
--------------------
package XX;
import java.util.Date;
import java.text.*;
public class Common
{
Date d=new Date();
public String now(String s)
{
SimpleDateFormat formatter = new SimpleDateFormat(s);
return formatter.format(d);
}
}
测试页面的代码为:
date.jsp
-----------------------------------------------------------
<jsp:useBean id="cm" scope="XX" class="XX.Common"/>
<%=cm.now("yyyy-MM-dd HH:mm:ss") %>
测试结果:
1、当scope=application时,我们浏览date.jsp,这时显示出了系统时间。可是不管我们怎么刷新,重新打开一次浏览器,甚至换台机器,它显示的时间始终不变,都是当初的时间(即bean刚创建时得到的系统时间),因为scope=application,所以Bean的实例在内存中只有一份,此时只要不重新启动WEB服务,输出不会变化。
2、当scope=session时,浏览date.jsp,刷新时显示也不会变化。可是当我们重新打开一浏览器,即一个新的session,系统便再次创建Bean的实例,取得当前系统时间,这时将得到正确的时间。同样,再次刷新新打开的页面(新的session),显示也不会变化。
3、当scope=page/request(它们的区别只在于包含静态文件时,此处无区别)时,不断刷新页面将不断得到当前系统时间。
以上可以看出不同的scope,Bean有不同的作用域。使用时一定注意,不要将得到经常变动的Bean的scope设为application或session,那将得到不正确的结果.
page,就是这个bean只在这个页面中有效,比如你换了一个页面或者刷新了一下,这个bean就被重新实例化了
request,bean只在请求期间有效
session,bean在一个会话中有效
application,只要你的web server没有停止,就一直有效。
page说白了就是只对当前页面有效,request的话,可以通过jsp:forward来让request在几个servlet或者jsp中传递,所以page的范围 <= request的范围
Bean存在的范围以及id变量名的有效范围。缺省值是page,以下详细说明:
a)page :你能在包含<jsp:useBean>元素的JSP文件以及此文件中的所有静态包含文件中使用Bean,直到页面执行完毕向客户端发出响应或转到另一个文件为止。
b)request:你在任何执行相同请求的JSP文件中使用Bean,直到页面执行完毕向客户端发出响应或转到另一个文件为止。你能够使用Request对象访问Bean
c)session:从创建Bean开始,就能在任何使用相同session的JSP文件中使用Bean。这个Bean存在于整个Session生存周期内,任何在分享此Session的JSP文件都能使用同一Bean。注意在你创建Bean的JSP文件的<%@ page %>指令中必须指定session=true
d)application: 从创建Bean开始,你就能够在任何使用相同application的JSP文件中使用Bean。这个Bean存在于整个application生存周期内,任何在分享此application的JSP文件都能使用同一Bean。
一个JavaBean的scope="request"的例子
request1.jsp 文件
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*, test.TestBean" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>request1</title>
</head>
<body>
<jsp:useBean id="test" class="test.TestBean" scope="request"/>
<%
out.println(test.getCount());
request.setAttribute("test",test);
%>
<jsp:forward page="request2.jsp"/>
</form>
</body>
</html>
request2.jsp文件
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*, test.TestBean" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>request2</title>
</head>
<body>
<%
out.println(((TestBean)request.getAttribute("test")).getCount());
%>
</body>
</html>
bean文件
package test;
public class TestBean
{
private int count;
public int getCount() {
return count++;
}
}
相关文章推荐
- jsp中useBean动作的scope可以制定四种范围(page,request,session,application)的区别
- Jsp useBean各项参数及page,request,session,application作用范围
- 关于JSP中的四种属性(page,request,session,application)在表达式中的属性范围
- jsp中的四种范围(page|request|session|application)
- 属性的四种存储范围page,request,session,application的区别
- jsp 的四个作用域 :page、request、session和application的区别
- page request session application四种范围
- jsp的四个作用域: page、request、session和application的区别
- JSP中page request session application 范围
- application、session、request、page的作用范围、Application,Session和Cookie的区别
- jsp 的四个作用域 :page、request、session和application的区别
- jsp 的四个作用域 :page、request、session和application的区别
- JAVABean在Jsp中的作用范围(page,request,session,application)
- jsp 的四个作用域 :page、request、session和application的区别 .
- jsp 的四个作用域 :page、request、session和application的区别 (转)
- jsp 的四个作用域 :page、request、session和application的区别 .
- jsp 的四个作用域 :page、request、session和application的区别 .
- JSP的范围(scope)之pageContext、request、session和application
- jsp 的四个作用域 :page、request、session和application的区别
- jsp的四个作用域 :page、request、session和application的区别