即的scope属性的四种范围:application、session、page、request。

 

package org.lxh.vo;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Common {
	Date d = new Date();
	
	public String now(String s){
		SimpleDateFormat format = new SimpleDateFormat(s);
		return format.format(d);
	}
}

测试页面的代码为:

 

date.jsp

 

 


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="ISO-8859-1"%>
<jsp:useBean id="date" scope="request" class = "org.lxh.vo.Common" ></jsp:useBean>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>time:<%=date.now("yyyy-MM-dd HH:mm:ss") %></h1>
</body>
</html>

 


测试结果:

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,那将得到不正确的结果.



scope属性的各个设置值的意义和作用:

(1)page表示将JavaBean实例对象存储在PageContext对象中,作用范围是当前JSP页面有效,一旦点击刷新便消失

 

(2)request表示将JavaBean实例对象存储在ServletRequest对象中,存储在request对象中的JavaBean对象可以被属于同一个请求的所有Servlet和JSP页面访问。可用于forward命令中。

 

(3)session表示将JavaBean实例对象存储在HttpSession对象中,存储在HttpSession对象中的JavaBean对象可以被属于同一个会话的所有Servlet和JSP页面访问,此设置要求当前JSP页面支持Session,即没有将page指令的session属性设置为false。也就是对一个特定用户有效,一个http会话。

 

(4)application表示将JavaBean实例对象存储在ServletContext对象中,存储在ServletContext对象中的JavaBean对象可以被同一个Web应用程序中的所有Servlet和JSP页面访问。也就是所有用户都可以使用。