四种属性范围

一、在JSP中提供了四种属性的保存范围,所谓的属性保存范围,指的是一个设置的对象,可以在多少个页面中保存并可以继续使用。

四种属性范围包括:

1.pageContext:只在一个页面中保存属性,跳转之后无效。

2.request:只在一次请求中保存,服务器跳转后依然有效。

3.session:在一次会话范围中,无论何种跳转都可以使用,但是新开浏览器无法使用。

4.application:在整个服务器上保存,所有用户都可以使用。

以上四个内置对象都有一下属性操作方法:

1.设置属性的名称及内容

          public void setAttribute(String name, Object o)

2.根据属性名称取得属性

          public Object getAttribute(String name)

3.删除指定的属性

          public void removeAttribute(String name)

注:设置属性的时候,属性名称是String,而属性的内容是Object即可以设置任意内容

二、page属性范围(pageContext属性范围)
表示将一个属性设置在本页上,跳转后无法取得。

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>欢迎来到望星空</title></head>
<body>
<%
	pageContext.setAttribute("name", "Joywy");
	pageContext.setAttribute("birthday", new Date());
%>
<%
	String name = (String)pageContext.getAttribute("name");
	Date birth = (Date)pageContext.getAttribute("birthday");
%>
<h2>姓名:<%=name%></h2>
<h2>生日:<%=birth%></h2>
</body>
</html>
三、request属性范围

1.如果要在服务器跳转之后属性可以继续保存下来,则可以使用request属性范围操作,request属性范围表示的是在服务器跳转之后,所有设置的内容依然会保留下来。
request_1.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>欢迎来到望星空</title></head>
<body>
<%
	request.setAttribute("name", "Joywy");
	request.setAttribute("birthday", new Date());
%>
<jsp:forward page="request_2.jsp"/>
</body>
</html>
request_2.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>欢迎来到望星空</title></head>
<body>
<%
	String name = (String)request.getAttribute("name");
	Date birth = (Date)request.getAttribute("birthday");
%>
<h2>姓名:<%=name%></h2>
<h2>生日:<%=birth%></h2>
</body>
</html>
注:使用超链接进行页面的跳转,首先地址栏会发生改变,应该是属于客户端跳转,客户端跳转是无法传递request属性的。
2.关于request属性范围的理解

request表示的是客户端的请求,正常情况下,一次请求服务器只会给予一次回应,那么这个时候如果是服务器跳转,请求的地址栏没有改变,所以也就相当于回应了一次,而如果地址栏改变了,就相当于是发出了第二次请求,则第一次请求的内容肯定就已经消失了,所以无法取得。

四、session属性范围

如果希望一个属性设置之后,可以在任何一个与设置页面相关的页面中取得的话,则可以使用session属性范围,使用session设置属性之后,不管是客户端跳转还是服务器端跳转,只要属性设置了,就都可以取得。

注意:session只保存在当前的浏览器之中,并且可以从相关的页面中取得。对于服务器而言,每一个连接到他的客户端都是一个session。

五、application属性范围

application属性范围可以让所有的用户(每一个session)都可以看见,这样属性就保存在服务器上了。但是如果此时服务器重新启动了,则无法取得。因为关闭后属性消失,要想再访问,则可以重新设置。application属性范围的内容都是保存在服务器上的,当设置很多个application的话,则服务器的性能肯定会有所降低,而且四种属性范围都是保存在服务器上的,有一个原则:能使用page范围的就不要使用request,能使用request的就不要使用session,能使用session的就不要使用application,因为保存范围越窄,则肯定对于服务器的压力就越低。

六、深入研究page属性范围

之前研究过的page属性范围中使用的是pageContext进行属性设置的,但是从javax.servlet.PageContext类中可以发现,有以下一种设置属性的方法

1.public void setAttribute(String name, Object value, int scope)

2.在PageContext类中存在四个表示属性范围的常量,可以直接通过这些常量指定scope的内容:

(1)public static final int PAGE_SCOPE

(2)public static final int REQUEST_SCOPE

(3)public static final int SESSION_SCOPE

(4)public static final int APPLICATION_SCOPE

样例:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>欢迎来到望星空</title></head>
<body>
<%
	pageContext.setAttribute("name", "Joywy", PageContext.REQUEST_SCOPE);
	pageContext.setAttribute("birthday", new Date(), PageContext.REQUEST_SCOPE);
%>
<%
	String name = (String)pageContext.getAttribute("name");
	Date birth = (Date)pageContext.getAttribute("birthday");
%>
<h2>姓名:<%=name%></h2>
<h2>生日:<%=birth%></h2>
</body>
</html>
此时是通过pageContext将一个属性设置成了request范围。

注意:pageContext可以操作四钟范围

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值