转载自:http://blog.sina.com.cn/s/blog_3f4052100100092e.html![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
JSP页面在处理请求时,可以访问JAVA对象,这些对象包括用户创建的对象(例如,JavaBean对象)和JSP的隐含对象,这些对象按照作用范围和持续时间不同,可以分为:
- 页内有效
- 请求有效
- 会话有效
- 应用有效
对于不同有效范围的对象,JSP提供开发人员使用设置属性(setAttribute())和获取属性(getAttribute())两个方法进行对象的操作。
一、页内有效
页内有效(page)指创建后只能在当前JSP页面(创建对象的页面)内被访问,具有页内有效范围的对象被绑定到javax.servlet.jsp.PageContext对象中。
可以使用pageContext对象的setAttribute()和getAttribute()方法来传递数据,例1使用setAttribute()方法设置了两个对象(),然后用getAttribute()方法获取对象的值。
只有在同一页面内,页面有效的对象可以传递数据,通过这个页面链接或用forward等转向语句到其他页面,都不能读取到对象(“姓名”或“角色”)的值。
二、请求有效
在处理同一个请求时,不同JSP页面创建的对象在这些页面内部都是可以访问的,这些对象就是请求有效的对象。
具有请求有效(request)范围的对象被绑定到javax.servlet.ServletRequest对象中,请求有效在请求处理结束时就会失效。可以使用request这个隐含对象的getAttribute()方法来设置属性,或用setAttribute()方法来获取属性。
在调用forward()方法转向的页面或者调用include()方法包含的页面中,都可以访问这个范围内的对象。
3、会话有效
会话是指客户端和服务器之间持续链接一段时间,在这段时间内,当需要多次和服务器交互信息时,可以将有关信息存入session对象中,这些信息就是会话有效的。当超时或与服务器断开后,这些属性就不可用。对于同一会话中不同请求的JSP页面中创建的对象,如果在这些页面内部都是可用的,这些对象就是会话有效的对象。
具有会话有效(session)范围的对象被绑定到javax.servlet.http.HttpSession对象中,同一会话的不同页面之间可以使用session这个隐含对象的getAttribute()方法来设置属性,或用setAttribute()方法来获取属性,从而传递数据。
JSP容器为每一次会话,创建一个HttpSession对象,在会话期间,可以访问session范围内的对象。
页面如果要使用会话有效的对象,其page指令中属性session不能为false,默认值是true。
对象的值可以用forward或链接等方式保持会话有效,从而传递数据。 会话有效必须是和创建对象有关的页面才是会话有效的应用范围,新打开的页面和服务器会建立一个新的会话。
4.应用有效 应用有效的作用范围是从Web服务器一开始提供服务直至服务停止,信息只要存入application对象中,就长期驻留内存,可以任意从不同的页面调用对象。
由于应用有效的对象一直占用内存,因此在实际使用中不宜过多使用,以免服务器负载过大。
代码:
例1:PageScopeSetGet.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
<title>页内有效属性操作</title>
</head>
<body>
页内有效-使用pageContext.setAttribute()
<p/>
<% //设置了两个页内有效的对象,对象名为“姓名”和“角色”
pageContext.setAttribute("姓名","成龙");
pageContext.setAttribute("角色","志愿者");
%>
<% //获取对象值
String Name=(String)pageContext.getAttribute("姓名");
String role=(String)pageContext.getAttribute("角色");
%>
<% //在当前页面输出
out.print("姓名="+Name);
out.print(" 角色="+role);
%>
</body>
</html>
在浏览器地址栏中使用URL
http://localhost:8080/jsptest/PageScopeSetGet.jsp
页内有效-使用pageContext.setAttribute()
姓名=成龙 角色=志愿者
例2:程序1:requestScopeSet.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
<title>请求有效</title>
</head>
<body>
请求有效-使用请求request.setAttribute()
<p/>
<% request.setAttribute("姓名","成龙");
request.setAttribute("角色","志愿者");
%>
<jsp:forward page="requestScopeGet.jsp"/>
</body>
</html>
程序2:requestScopeGet.jsp
<%@ pagecontentType="text/html;charset=GB2312" %>
<html>
<head>
<title>请求有效</title>
</head>
<body>
请求有效-使用请求request.aetAttribute()
<p/>
<% String Name =(String)request.getAttribute("姓名");
String role=(String)request.getAttribute("角色");
out.print("姓名="+Name);
out.print(" 角色="+role);
%>
<jsp:forwardpage="requestScopeGetAgain.jsp"/>
</body>
</html>
在浏览器地址栏中使用URL http://localhost:8080/jsptest/requestScopeSet.jsp
请求有效-使用request.setAttribute()
姓名=成龙 角色=志愿者
例3:程序1:sessionScopeSet.jsp
<%@ page contentType="text/html;charset=GB2312" import="java.util.*" %>
<html>
<head>
<title>会话有效</title>
</head>
<body>
会话有效-使用会话session.setAttribute()
<p/>
会话ID:<%=session.getId()%><br>
是否新会话:<%=session.isNew()%><br>
<% session.setAttribute("姓名","成龙");
session.setAttribute("角色","志愿者");
%>
<% String Name = (String)session.getAttribute("姓名");
String role =(String)session.getAttribute("角色");
out.print("会话 姓名="+Name);
out.print(" 会话 角色="+role);
%><br>
<% Date creationTime = new Date(session.getCreationTime());
Date accessedTime = new Date(session.getLastAccessedTime());
%>
会话创建时间:<%= creationTime %><br>
上次访问时间:<%= accessedTime %><br>
会话持续时间(S):<%=session.getMaxInactiveInterval()%><br>
<%session.setMaxInactiveInterval(12);%>
修改会话持续时间(S):<%=session.getMaxInactiveInterval()%><br>
<a href="http://localhost:8080/JSP01/sessionScopeGetAgain.jsp" target=_blank>子页面</a>
</body>
</html>
程序2:sessionScopeGet.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
<title>会话有效</title>
</head>
<body>
会话有效-使用会话session.aetAttribute()
<p/>
<% String Name = (String)session.getAttribute("姓名");
String role =(String)session.getAttribute("角色");
out.print("会话 姓名="+Name);
out.print(" 会话 角色="+role);
%>
<% Date creationTime = new Date(session.getCreationTime());
Date accessedTime = new Date(session.getLastAccessedTime());
%>
会话创建时间:<%= creationTime()%><br>
上次访问时间:<%=accessedTime()%><br>
会话持续时间(S):<%=session.getMaxInactiveInterval()%><br>
<%session.setMaxInactiveInterval(12);%>
修改会话持续时间(S):<%=session.getMaxInactiveInterval()%><br>
</body>
</html>
程序3:
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
<title>会话有效</title>
</head>
<body>
使用不同方式调用此页面
<p/>
会话ID:<%=session.getId()%><br>
是否新会话:<%=session.isNew()%><br>
<% String Name = (String)session.getAttribute("姓名");
String role =(String)session.getAttribute("角色");
out.print("姓名="+Name);
out.print(" 角色="+role);
%>
</body>
</html>
在浏览器地址栏中使用URLhttp://localhost:8080/jsptest/sessionScopeSet.jsp
会话有效-使用会话session.aetAttribute()
会话ID:0ED573495A522A37F4C5FC0CDEF2E5E1
是否新会话:false
姓名=成龙 角色=志愿者
链接其他页面
点击“链接其他页面”,链接到sessionScopeGetAgain.jsp页面,得到如下结果:
使用不同方式调用此页面
会话ID:0ED573495A522A37F4C5FC0CDEF2E5E1
是否新会话:false
姓名=成龙 角色=志愿者
可以看到在sessionScopeSet.jsp页面中创建的“姓名”和“角色”对象的值可以用forward或链接等方式保持会话有效,从而传递数据。
运行时转向sessionScopeGet.jsp页面得到结果如下:新打开一个页面,在浏览器地址栏中使用URLhttp://localhost:8080/jsptest/sessionScopeGet.jsp 运行得到结果如下:
使用不同方式调用此页面
会话ID:E95D342E82DF206E800D1B87036378F1
是否新会话:true
姓名=null 角色=null
可以看到,会话ID和前两个结果不同,是否新会话为trun,而姓名和角色的值都是“null”,说明会话有效必须是和创建对象有关的页面才是会话有效的应用范围,新打开的页面和服务器会建立一个新的会话。