对象的生命周期和可访问性称为作用域。在jsp中有四种作用域:页面域(page),请求域(request),会话域(session),应用域(application)。下面就来详细的介绍这是四种作用域。
一、page(页面域)
page(页面域)的生命周期是指页面执行期间。存储在页面域的对象只对于他所在页面是可访问的。二、request(请求域)
request(请求域)的生命周期是指一次的请求过程,包括请求被转发或者被包含的情况。存储在请求域中的对象只有在此次请求过程中才可以被访问。三、session(会话域)
session(会话域)的生命周期是指某个客户端与服务器所连接的时间;客户端在第一次访问服务器时创建会话,再会话期间或者用户主动退出后,会话结束。存储在会话域中的对象在整个会话期间(可能包含多次请求)都可以被访问。四、application(应用域)
application(应用域)的生命周期是指从服务器开始执行服务到服务器关闭为止,是4个作用域中时间最长的一个。以上四个作用域都通过setAttribute(String name,Object value)方法来存储属性,通过getAttribute(String name)来获得属性,从而实现属性对象在不同作用域的数据分享。
下面我们,我们来用代码演示 pageContext,session,application,的页面访问统计效果。
visitCount.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>访问统计</title>
</head>
<body>
<%
int pageCount = 1;
int requestCount = 1;
int sessionCount = 1;
int applicationCount = 1;
//页面域统计次数
if(pageContext.getAttribute("pageCount")!=null){
pageCount = Integer.parseInt(pageContext.getAttribute("pageCount").toString());
pageCount++;
}
pageContext.setAttribute("pageCount", pageCount);
//会话域统计次数
if(session.getAttribute("sessionCount")!=null){
sessionCount = Integer.parseInt(session.getAttribute("sessionCount").toString());
sessionCount++;
}
session.setAttribute("sessionCount", sessionCount);
//应用域统计次数
if(application.getAttribute("applicationCount")!=null){
applicationCount = Integer.parseInt(application.getAttribute("applicationCount").toString());
applicationCount++;
}
application.setAttribute("applicationCount", applicationCount);
%>
<p>页面统计次数:<%=pageCount %></p>
<p>会话统计次数:<%=sessionCount %></p>
<p>应用统计次数:<%=applicationCount %></p>
</body>
</html>
运行visitCount.jsp页面
多次刷新浏览器后的结果
在另一个浏览器中打开的结果
从上面的结果可以看出,pageContext域属性的访问范围是担当前jsp页面,因此访问统计次数始终都是1,session域属性的访问范围为当前浏览器域服务器的会话,因此刷新页面访问次数会累加,但是开启新的浏览器窗口时,会新建一个会话,计数又从1开始。application域属性的访问范围为整个应用,所以只要应用程序不停止运行,计数就会不断地累加。