目录
一、JSP内置对象的作用域理解
何为作用域?,作用域指的是信息共享的范围,就是说一个信息可以在多大的范围内有效。为了能在页面、请求、和用户之间传递和共享数据,作用域的效果便因此而显现,这些作用域就规定了数据可以传递和共享的范围以及数据的存活时间。
而我们常说的Web交互的最基本单位为HTTP请求。当每个用户从进入网站到离开网站这段过程我们称之为一个HTTP会话,一个服务器的运行过程中可以有多个用户访问,也就是会有多个HTTP会话。而Servlet/JSP中的Session功能,Application功能等是通过作用域(scope)这个概念来实现的。
二、Session域和Application域
先来一个表格说明一下吧
名称 | 作用域 |
session(会话作用域) | 在当前的一次会话中有效 |
application(应用程序作用域) | 在所有应用程序中有效 |
(一)Session域
- 由于HTTP协议是无状态的协议,那么当一个客户端发送请求,服务器端收到请求,并返回响应后,这一个过程就此结束,但是服务器并不会保存任何相关的信息。为了改进这一点,HTTP协议提供了session。
- 有了session域之后,当我们在应用程序的web页面间进行跳转时,同时保存用户的状态,从而使整个用户会话一直存在,直到浏览器关闭。
- session(会话作用域)的对象可用于同一个浏览器发出的所有请求,。Session 的作用范围为用户持续和服务器所连接的时间,当与服务器断线 ,这个属性就会失效。
1、Session范围:用户当前的一次会话范围内有效
常用方法:
名称 | 说明 |
setAttribute(String key,Object value) | 以key/value的形式保存对象的值 |
getAttribute(String key) | 通过key获得对象值 |
removeAttribute(String key) | 从session中删除指定key所对应的对象 |
2、Session生命周期:创建、参与活动、销毁
- 创建:当客户端第一次访问某个servlet的时候,服务器会为当前会话创建一个SessionID,每次客户端向服务器发送请求时,都会将此sessionID携带过去,服务端会对此sessionID进行校验。
- 参与活动:该次会话中,只要当前页面未全部关闭,再次打开不同浏览器会访问同一项目资源时属于同一次会话,只有此次会话全部关闭创建新的会话时才会变化。
- 销毁:可调用销毁方法destroy()。
(二)Application域
1、Application:代表与整个web应用程序相关的对象和属性
2、Application(应用程序作用域)中的对象作用于这个应用程序的所有用户。
- 从服务器一开始执行服务,一直到服务器关闭为止。
- Application的作用范围最广,作用的时间也最长。
- 使用时要特别注意其作用的情况,可能会造成服务器负载越来越重。
3、Application作用域就是服务器从启动到关闭的整段时间。
- 在这个作用域内设置的信息可以被所有应用程序使用。
- application作用域上的信息传递是通过ServletContext实现的。
主要方法:
名称 | 说明 |
getAttribute(String name) | 从application中获取信息 |
setAttribute(String name, Object value) | 在application作用域中设置信息 |
三、Session域和Application域实例
这里直接使用两个代码文件,实现了私有加法器和公有加法器的功能,这里就不展示代码部分了,因为需要的配置文件就有点多,故而只展示运行结果在不同浏览器上的截图
1、私有加法器:
我们输入加数2和加数3可得结果:
此刻我们更换浏览器,再输入一个加数10:
可见,session域只在当前会话有效,当更换浏览器之后,数据不会存在共享,这也是私有加法器的由来。
2、公有累加器
输入加数5和加数6可得结果:
更换浏览器,输入加数20:
从结果可知,这里的作用域是Application域,在所有应用程序上有效。