javaweb四大域
什么是域?
一句话总结:就是用来存数据的地方,里面存储的数据都是以key/value的形式存储
javaweb中有四大域,他们的作用范围如下:PageContext<request<session<ServletContext
ServletContext作用范围为整个应用程序
PageContext作用范围为当前页面
这两个域要么作用范围太大,容易造成信息被盗取;要么作用范围太小,达不到数据传输效果,在开发过程中不经常用到
下面重点解释request域和session域
request域
request域作用在浏览器向服务器发送一次请求,请求处理完成,request域也随之消失
如果在一个请求中经历了多个Servlet,那么多个Servlet就可以使用request来共享数据
既然是用来存数据的,那么就有拿数据,存数据的方法:
void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性
Object getAttribute(String name):用来获取request中的数据,当前在获取之前需要先去存储才行
void removeAttribute(String name):用来移除request中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做
Enumeration getAttributeNames():获取所有域属性的名称
session域
session域作用在一次会话,一个会话创建一个HttpSession对象,同一会话中的多个请求中可以共享session中的数据
服务器创建session,在客户端使用getSession()方法拿到session对象,同理,调用setAttribute(),getAttribute()存储,拿到数据.
session实现原理
在实际案例中,session与cookie配合使用,比如,用户在浏览器登录淘宝,假设30分钟没有做任何操作的话,登录就会失效.
原因:
session:创建于服务器,存在于服务器
cookie:创建于服务器,存在于浏览器(也叫浏览器的一块小甜点)
session在服务器中有一个session池,这个session池用来存储数据(对象),每个用户都有它的session对象,那么服务器怎么知道这个session对象是谁的?
这时候要借助cookie,cookie在服务器创建时,带有sessionID,存在浏览器,下次再访问服务器时,cookie就自动把sessionID传到服务器,服务器通过sessionID找到对应的session对象.
注意:
session对象有效时间为30分钟,时间过后,session对象就会删除,sessionID找不到匹配的对象,所以在实际案例中,登录就会失效.
cookie与session