【JSP】对象(Attribute)的作用域

在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函数
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小子挺不错

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值