JSP四大域属性空间(page、request、session、application)详解

JSP中提供了四个域属性空间:page(页面作用域)、request(请求作用域)、session会话作用域、application(应用程序作用域)。

1、page域:

page域作用范围:当前页面,即只在一个jsp页面中有效。当页面跳转时,属性就失效了。

page和pageContext区别:

page:对象是当前页面转换后的Servlet类的实例,是Object对象,在JSP页面中,很少使用page对象。
pageContext:javax.servlet.jsp.PageContext的实例,该对象代表该JSP页面的上下文,可以访问该页面中的共享数据,能够调用、存取其他隐含对象。

例子:

编辑index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<%
		//设置page域属性
		pageContext.setAttribute("user", "zhangsan");
	%>
	<%
		//获取page域属性
		//主要这里getAttribute()返回的是Object对象,需要强转
		String user = (String)pageContext.getAttribute("user");
		out.print("user = " + user);
	%>
</body>
</html>

index.jsp运行结果:
在这里插入图片描述

编辑index2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		//尝试获取index.jsp中的user属性值,如果为null则无法获取
		String user = (String)pageContext.getAttribute("user");
		out.print("user = " + user);
	%>
</body>
</html>

2、request(请求作用域):

request:http发出请求到服务器返回响应的全过程,在这个过程中使用forward方式跳转多个jsp,在这些页面里都可以使用该域中的变量。一旦客户端刷新浏览器,重新发起请求,则之前的请求参数和属性都将失效。

例子:

编辑index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	index page<br>
	<%
		//设置page域属性
		request.setAttribute("user", "zhangsan");
		request.getRequestDispatcher("index2.jsp").forward(request, response);
	%>
	
</body>
</html>

编辑index2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	index2 page<br>
	<%
		//尝试获取index.jsp中的user属性值,如果为null则无法获取
		String user = (String)request.getAttribute("user");
		out.print("user = " + user);
	%>
</body>
</html>

运行结果:
在这里插入图片描述
当我们在服务器响应结束后,之间访问index2.jsp是结果为空
在这里插入图片描述

3、session(会话作用域)

session:当前会话中,即浏览器打开到浏览器关闭的整个过程(默认时间为30分钟,可以设置,也可使用invalidate()方法强制结束)。

例子

编辑index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	index page<br>
	<%
		//设置page域属性
		session.setAttribute("user", "zhangsan");
	%>
	
</body>
</html>

编辑index2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	index2 page<br>
	<%
		//尝试获取index.jsp中的user属性值,如果为null则无法获取
		String user = (String)session.getAttribute("user");
		out.print("user = " + user);
	%>
</body>
</html>

首先我们直接访问index.jsp
在这里插入图片描述
然后我们直接访问index2.jsp
在这里插入图片描述
当我们将index.jsp改为

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	index page<br>
	<%
		//设置page域属性
		session.setAttribute("user", "zhangsan");
		session.invalidate();
	%>
	
</body>
</html>

再次访问index.jsp,之后再访问index2.jsp结果如下
在这里插入图片描述

4、application(应用程序作用域)

application:服务器一开始执行服务,到服务器关闭为止。它的有效范围是整个应用。 这里的整个应用是指应用启动到应用结束之间(服务器为关闭时)。当服务器关闭时,才会被清空。

例子

编写index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	index page<br>
	<%
		//设置page域属性
		application.setAttribute("user", "zhangsan");
	%>
	
</body>
</html>

编写index2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	index2 page<br>
	<%
		//尝试获取index.jsp中的user属性值,如果为null则无法获取
		String user = (String)application.getAttribute("user");
		out.print("user = " + user);
	%>
</body>
</html>

先访问index.jsp,在访问index2.jsp
在这里插入图片描述
重启服务器,访问index2.jsp
在这里插入图片描述
此时application域中user属性已被清空。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值