2021-09-28

本文探讨了如何在Java Servlet中使用Cookie和HttpSession进行数据共享,以及它们的存储位置、数据类型和销毁时机。重点介绍了Cookie的默认行为和手动设置,以及HttpSession的会话管理与监听器的应用。
摘要由CSDN通过智能技术生成

Cookie: 同一个网站OneServlet与TwoServlet借助于Cookie实现数据共享

                OneServlet{

                        public void doGet(HttpServletReques request,HttpServletResponse resp)

                        //1.创建一个cookie对象,保存共享数据

                        Cookie card =new Cookie("key1","abc")

                        Cookie card1= xxxxx

                        //将cookie写入到响应头,交给浏览器

                        resp.addCookie(card);

                        resp.addCookie(card1);

}

 代码实现:

 

 Cookie销毁时机:

1.在默认情况下,Cookie对象存放在浏览器的缓存中。因此只要浏览器关闭,Cookie对象就被销毁掉

2.在手动设置情况下,可以要求浏览器将接受到的Cookie存放在客户端计算机硬盘上,同时需要指定Cookie在硬盘上存活时间。在存活时间范围内,关闭浏览器关闭客户端计算机,关闭故武器,都不会导致Cookie被销毁。在存活时间达到时,Cookie自动从硬盘上被删除

HttpSession:

 介绍:

1)HttpSession接口来自于Servlet规范下一个接口。存在于Tomcat中servlet-api,jar其中实现类由Http服务器提供。Tomcat提供实现类存在于Servlet-api.jar

2)如果两个servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,此时借助于HttpSession对象进行数据共享

3)开发人员习惯于HttpSession接口修饰对象称为回话对象作用域

HttpSession与Cookie的区别:

 1)存储位置:一个在天上,一个在地下

        Cookie:存放在客户端计算机(浏览器内存/硬盘)

        HttpSession:存放在服务端计算机内存

2)数据类型:

        Cookie对象存储共享数据类型只能是String

        HttpSession对象可以存储任意类型的共享数据Object

3)数据数量:

        一个Cookie对象只能存储一个共享数据

        Httpsession使用map集合存储共享数据,所以可以存储任意数量共享数据

4)参照物:

        Cookie相当于客户端在服务端【会员卡】

        HttpSession相当于客户在服务端【私人保险柜】

 

 getSession()与getSession(false)

1)getSession():如果当前用户在服务器已经拥有自己的私人储物柜,要求tomcat将这个私人存储柜进行返回如果当前用户在服务端尚未拥有自己的私人储物柜要求tomcat为当前用户创建一个全新的私人储物柜

2)getSession(false):如果当前用户在服务端已经拥有了自己的私人储物柜,要求tomcat将这个私人储物柜进行返回,如果当前用户在服务端尚未拥有自己的私人储物柜此时tomcat将返回null

HttpSession销毁时机:

1.用户与HttpSession关联时使用的Cookie只能存放在浏览器缓存中,

2.在浏览器关闭时,意味着用户与他的HttpSession关系被切断

3.由于Tomcat无法检测浏览器合适关闭,因此在浏览器关闭时并不会导致Tomcat将浏览器关联的HttpSession进行销毁

4.为了解决这个问题,tomcat为每一个HttpSession对象设置空闲时间这个空闲时间默认30分钟,如果当前HttpSession对象空闲时间达到30分钟,此时Tomcat认为洪湖已经放弃了自己的HttpSession,此时TOmcat就会销毁这个Httpsession

HttpSession空闲时间手动设置:

<session-config>

        <session-timeout>5</session-timeout>

</session-config>

HttpServletReques接口实现数据共享

1.介绍:

        1)在同一个网站中,如果两个Servlet之间通过请求转发方式进行调用,彼此之间共享同一个请求协议包,而一个请求协议包。而一个请求协议包只对应一个请求对象。因此servlet之间共享同一个请求对象,此时可以利用这个请求对象在两个servlet之间实现数据共享

        2)在请求对象实现servlet之间数据共享功能时,开发人员将请求对象称为请求作用域对象

监听器

介绍:

1.一组来自于servlet规范下接口,共享8个机接口。在tomcat存在servlet-api.jar包

2.监听器接口需要有开发人员亲自实现,http服务器提供jar包并没有对应的实现类

3监听器接口用户监控作用域对象生命周期变化时刻以及作用域对象共享数据变化时刻

2.作用域对象:

1)在servlet规范中,认为在服务器内存中可以在某些条件下为两个serblet之间提供数据共享方案对象,被称为作用域对象

2)servlet规范下作用域对象:

servletcontext:全局作用域对象

httpsession:会话作用域对象

httpservletrequest:请求作用域对象

3.监听器接口实现类开发规范:三步

1)根据监听的实际情况,选择对应监听器接口进行实现

2)重写监听器接口声明监听事件处理方法

3)在web.xml文件监听器接口实现类注册到http服务器

4.servletcontextListener接口:

1.作用:通过这个接口合法的检测全局作用域对象被初始化时刻以及被销毁时刻

2)监听事件处理方法:

public void contextInitlized():在全局作用域对象http服务器初始化被调用

public void contextDestory():在全局作用域被http服务器销毁时出发调用

5.servletconetextattributelistener接口:

        1.作用:通过这个接口合法对的检测全局作用域对象共享数据变化时刻

        2监听事件处理方法:

                public void contextadd();在全局作用域对象添加共享数据

                public void contexreplaced():在全局作用域对象更新共享数据

                public void conextRemove():在全局作用域对象删除共享数据

6.全局作用域对象共享数据变化时刻

        servletcontext application =request.getservletcontext();

        application.setattribute("key1",100)//新增

        application.setattribute("key1",100)//更新

        application.removeattribute("key1",100)//删除

servlet规范扩展-----------Filter接口(过滤器接口)

1.介绍:

        1)来自于servlet规范下接口,在tomcat中存在于servlet-api.jar包

        2)Filter接口实现类由开发人员负责提供,http服务器不负责提供

        3)Filter接口在http服务器调用资源文件之前,对http服务器进行拦截

2.具体作用:

        1)拦截http服务器,帮助http服务器检测当前请求合法性

        2)拦截http服务器,对当前请求进行增强操作

Filter接口实现类开发步骤:三步

        1)创建一个java类实现filter接口

        2)重写filter接口中dofilter方法

        3)web.xml将过滤器接口实现类注册到htttp服务器

        

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值