JSP属性范围

1.4种属性范围

page(当前页):只在一个页面中保存属性,跳转之后无效。
request(一次服务器请求):只在一次请求中保存属性,服务器跳转之后无效。
session(一次会话):在一次会话范围中保存,无论何种跳转都可以使用,但是新开浏览器无法使用。
application(上下文中):在整个服务器上保存,所由用户都可以使用。

范围:page<request<session<application

2.属性的操作方法

  既然JSP中提供了四种属性范围,则四种属性范围中都将包含以下的属性操作方法。
这里写图片描述
  属性的操作无外乎就是增加、取得和删除这个几个操作。
  单词Attribute的意思是“属性”,setAttribute(String name,Object value)从单词的组合来看就可以知道是这个方法的是设置属性,设置属性的名字和属性的值,名字(name)为String类型,值(value)为Object类型,由于值为Object类型,这表示可以设置任意类型的数据作为值,因为所有的类都是从Object类型继承而来。因此设置属性值的时候可以是任意类型的数据。getAttribute(String name)方法是根据属性的名字取得属性,removeAttribute(String name)方法是根据属性的名字删除属性。

3、JSP四种属性范围的具体介绍

3.1、page属性范围(pageContext)
  page属性范围相对好理解一些:在一个页面设置的属性,跳转到其他页面就无法访问了。但是在使用page属性范围的时候必须注意的是,虽然习惯上将页面范围的属性称为page范围,但是实际上操作的时候是使用pageContext内置对象完成的。
pageContext属性范围操作流程图
 这里写图片描述   
  pageContext从字面上的定义,可以发现,是表示一个页面(page)的上下文(Context),可以表示一个页面中的所有内容。
  从操作流程图来看,在第一个页面设置的属性经过服务器端跳转到第二个页面以后,在第二个页面是无法取得在第一个页面中设置的属性的,就好比现在坐着的桌子上有一支笔,但一旦离开了这张桌子,坐到别的桌子上时,笔就没有了。

3.2、request属性范围
  request属性范围表示在一次服务器跳转中有效,只要是服务器跳转,则设置的request属性可以一直传递下去。
这里写图片描述

注:request范围只针对服务器端跳转,而超链接操作后地址栏信息改变(属于客户端跳转),此时并不能取得属性。

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

3.3、session属性范围
  session设置的属性不管是客户端跳转还是服务器端跳转,只要属性设置了都可以取得。当然,session只针对一个用户
 这里写图片描述 
  在第一个页面上设置的属性,跳转(服务器跳转/客户端跳转)到其他页面之后,其他的页面依然可以取得第一个页面上设置的属性。
注:每一个新的浏览器连接上服务器后就是一个新的session。

 如果一个属性想让所有的用户都可以访问,则可以使用最后一种属性范围:application范围。

3.4、application属性范围
  这里写图片描述
因为application属性范围是在服务器上设置的一个属性,所以一旦设置之后任何用户都可以浏览到此属性。
注:application范围的属性设置过多会影响服务器性能。
以上不管打开多少个浏览器都可以访问到,但是如果服务器重新启动,则之前所设置的全部属性将消失。

3.5、关于pageContext属性范围的进一步补充
之前所讲解的四种属性范围,实际上都是通过pageContext属性范围设置上的。但是从java.servlet.jsp.PageContext类中可以发现,
public void setAttribute(String name,Object value,int scope)
此方法中存在一个scope的整型变量,此变量就表示一个属性的保存范围。而在pageContext类中同样存在4个表示属性范围的整形常量,可以直接通过这些整形常量指定scope的内容
  这里写图片描述
 
  这个setAttribute()方法如果不写后面的int类型的scope参数,则此参数默认为PAGE_SCOPE,则此时setAttribute()方法设置的就是page属性范围,如果传递过来的int类型参数scope为REQUEST_SCOPE,则此时setAttribute()方法设置的就是request属性范围,同理,传递的scope参数为SESSION_SCOPE和APPLICATION_SCOPE时,则表示setAttribute()方法设置的就是session属性范围和application属性范围。
实际上pageContext对象可以设置任意范围的属性,而其他操作也只是对这一功能的再包装而已。但一般还是习惯于使用pageContext对象设置保存在一页范围的属性,而很少使用pageContext设置其他范围的属性。

4、jsp四种属性范围的使用场合

(1)request:如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的。
(2)session:如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐。
(3)application(servletContext):如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在application(servletContext)域中,像聊天数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值