在JSP中,可以使用request.setAttribute(String name,Object value)进行设置属性并获取,同时也可以使用其他方法,那么他们有什么区别?
一、JSP作用域
- 页面域,生命周期是页面执行期间,存储在页面域的属性对于它所在的页面可用
- 请求域,生命周期是一次请求过程,也包括请求转发的情况(共用同一个请求域)和include的情况,存储在请求域中的属性只有在请求过程中才可以访问
- 会话域,生命周期是整个服务器与客户端连接的时间域内,只要不超过最大不活动时间或者没有被invalidate()调用,存储在会话域的属性可以在整个会话期间访问
- 应用域,生命周期是整个web应用程序的生命周期,是最长的,存储在应用域的属性可以被整个web应用的JSP和servlet访问
二、四种作用域内部对象
1.页面域,pageContext
- getAttribute(String name),根据名字获取域属性值
- removeAttribute(String name),根据名字移除属性值
- getAttributeNamesInScope(int scope),获得所有属性名称
2.请求域,request
- getParameter(String name) 根据参数名获取单一参数
- getParameterValues(String name) 根据参数名获取一组参数值
- setAttribute(String name,Object value) 设置属性
- getAttribute(String name) 获得属性值
3.会话域,session
- setAttribute(String name,Object value),以名\值对形式存储属性
- getAttribute(String name),根据名字获取属性值
- invalidate(),使session失效
4.应用域,application
- setAttribute(String name,Object value),以名\值对形式存储application域属性
- getAttribute(String name),根据名字获取application域属性值
- removeAttribute(String name),根据名字移除application属性值
三、实例:页面访问次数
differVisitCount.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
int pageCount = 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>
运行结果
这里会话域不是1因为我运行了一次然后调用了invalidate函数