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

 

posted @ 2022-11-01 17:23  Tmillion  阅读(361)  评论(0编辑  收藏  举报