在jsp中九大内置对象的pageContext,request,session和application四个对象的作用范围

版权声明:hxt未经允许不可转载 https://blog.csdn.net/weixin_42979840/article/details/82969108

application的作用范围

编辑一个实验类jsp文件,applicationDemo1.jsp

使用application设定两个属性:userName和userPwd,然后使用application的getAttribute的方法获取数据

主要代码如下

<%
		application.setAttribute("userName", "admin");
		//pageContext.setAttribute("userName", "admin");
	%>
	<%
		application.setAttribute("userPwd", "123");
		//pageContext.setAttribute("userPwd", "123");
	%>
	<!--  显示页面-->
	<h1>在这里j里,使用application对象设置了属性和值</h1>
	<br>请到另一个页面看看是否可以显示这些值
	<br>
	<a href="applicationDemo2.jsp">到另外一个页面</a>
	<hr>
	<h1>当前页面获取</h1>
	<%
		String userName = (String) application.getAttribute("userName");
	%>
	<%
		String userPwd = (String) application.getAttribute("userPwd");
		out.println("userName=" + userName + ";userPwd =" + userPwd);
	%>

再编辑一个实验类applicationDemo2.jsp

在这个页面中获取,applicationDemo1中的数据

主要代码如下:

<h1>显示另外一个页面的application对象传递过来的属性值,为null,不能获取</h1>
	<br>
	<%
		//获取属性值
		String userName = (String) application.getAttribute("userName");
		String userPwd = (String) application.getAttribute("userPwd");
		out.println("userName=" + userName + ";userPwd =" + userPwd);
	%>

运行服务器:
1.applicationDemo1.jsp的结果
在这里插入图片描述

当点击另外一个页面的a链接的时候,显示结果为(页面跳转到applicationDemo2.jsp):
在这里插入图片描述

application的范围是从服务器一开始执行服务到服务器关闭为止
application的范围最大,停留的时间最长,所以要使用application要注意,甚至要限制使用,不然可能会造成服务器负载越来越重导致服务器奔溃的情况

Page范围-pageContext对象

使用pageContext对象和上述例子一样,使用pageContext对象调用setAttribute方法设定属性:userName和userPwd,并且设定初始值

编辑实验类pageContextDemo1.jsp,主要代码如下:

<%
		pageContext.setAttribute("userName", "admin");
	%>
	<%
		pageContext.setAttribute("userPwd", "123");
	%>
	<!--  显示页面-->
	<h1>在这里j里,使用pageContext对象设置了属性和值</h1>
	<br>请到另一个页面看看是否可以显示这些值
	<br>
	<a href="pageContextDemo2.jsp">到另外一个页面</a>
	<hr>
	<h1>当前页面获取</h1>
	<%
		String userName = (String) pageContext.getAttribute("userName");
	%>
	<%
		String userPwd = (String) pageContext.getAttribute("userPwd");
		out.println("userName=" + userName + ";userPwd =" + userPwd);
	%>

再编辑一个实验类pageContextDemo2.jsp,使用pageContext的getAttribute方法获取数据
主要代码如下:

<h1>显示另外一个页面的pageContext对象传递过来的属性值,为null,不能获取</h1>
	<br>
	<%
		//获取属性值
		String userName = (String) pageContext.getAttribute("userName");
		String userPwd = (String) pageContext.getAttribute("userPwd");
		out.println("userName=" + userName + ";userPwd =" + userPwd);
	%>

使用pageContext对象的范围效果为:
在这里插入图片描述

当点击另外一个页面的时候,使用pageContext对象无法传递当前页面的数据到另外一个页面
在这里插入图片描述

Request范围-request对象

request的范围是指在一个jsp网页发出请求到另外一个jsp页面之间,随后这个属性就失效了,设定Request范围的属性时候可以利用setAttribute()和getAttribute()方法.

1.如果使用请求转发,例如:<jsp:forward page="requestDemo2.jsp">
在当前页面请求转发之前设定了request对象的范围属性,则在requestDemo2.jsp中,使用request的getAttribute()方法获取属性是可以获取到属性的数据的

如果是未请求,直接在浏览器里面获取数据,是不能够获取到属性的数据的,所没有请求关系的页面,是无法获取这些属性

2.如果使用动态包含<jsp:include page="requestDemo3.jsp">
在requestDemo3.jsp中同样使用reques对象的getAttribute方法获取request的属性值,同样是可以获取到request中的属性

3.使用request在servlet中使用请求转发也可以使得请求的页面得到servlet中的设定的数据
如果使用重定向,则会造成数据丢失

【重要】跳转页面结论
请求转发跳转页面,地址栏不会变更,可以获取到之前的request的属性
响应重定向跳转页面,地址栏产生变更,不能获取之前的request的属性

总结

方法 能否得到request范围属性
jsp:froward ture
jsp:include ture
请求转发 request.getRequestDispatcher().forward() ture
重定向 response.sendRedirect() false

Session范围-session对象

Session作用范围比page和request范围要大
一般情况有四种情况,Session范围属性才会失效

方式一:
调用Session的API的invalidate()方法,强制使得会话失效
在这里插入图片描述

方式二:
调用Session的API的setMaxInactiveInterval(int)方法,设置session的最大不活动时间,则在没有任何操作的情况下,多少秒后session对象失效,单位是秒.

代码如下:

session.setMaxInactiveInterval(60);//单位是秒

其他API

session.getCreationTime() //获取session的创建时间
session.getLastAccessedTime() //获取上次与服务器交互的时间
session.getMaxInactiveInterval() //获取session最大的不活动的间隔时间 ,以秒为单位

方式二:

在web.xml中设置session过期时间,和设置session的最大不活动时间效果一样
在web.xml中配置如下:

<session-config>
       <session-timeout>1</session-timeout>
</session-config>

即客户端连续两次与服务器交互间隔时间最长为1分钟,1分钟后使用session.getAttribute()获取的值为null.

当我们使用session设定数据,使用浏览器访问是可以访问到session设定的属性值,但是如果关闭浏览器,再次访问则不会访问到属性的值

猜你喜欢

转载自blog.csdn.net/weixin_42979840/article/details/82969108