JavaWeb Listener

本文介绍了Servlet中的8种监听器,包括ServletContextListener、HttpSessionListener等,并详细解释了它们的作用及如何使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Listener是Servlet的事件监听器,一共有8种。

 

 

使用xml注册Listener

<listener>
        <listener-class>listener.MyListener</listener-class>
    </listener>

监听的是整个web应用,不是某个Servlet。

 

 

使用注解注册Listener

@WebListener()

 

 

 

 


 

 

 

  • ServletContextListener    监听ServletContext对象的创建、销毁
  • HttpSessionListener   监听HTTPSession对象的创建、销毁
  • ServletRequestListener   监听ServletRequest对象的创建、销毁

 

 

HttpSession对象销毁有2种情况

  • Session超时
  • 使用session.invalidate()强制销毁这个session。

用户直接关闭浏览器,服务器上这个session仍然在,没有被销毁,只是不能再使用这个Session了(作废),原session中数据全部丢失。

后面执行的request.getSession(),是新建一个session,再返回这个新的session,不是获取原session,。

 

 

 


 

 

 

使用Session+HttpSessionListener实现购物车

  • 用一个Map来存储购物车中的商品,key存储商品id,value存储购买数量。
  • 将Map放到session中,用户修改购物车中的商品时(加入商品、移出商品、修改购买数量),从session中使用getAttribute()取出Map,对Map进行修改,然后setAttribute()放回session中(同名覆盖)。
  • 当会话结束销毁session时,把session中的这个Map取出来,从中读取数据,存到数据库中。这个功能可以用Listener来实现。
@WebListener()
public class MyListener implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent se) {

    }

    public void sessionDestroyed(HttpSessionEvent se) {
        HttpSession session = se.getSession();
        //从session中取出Map,获取数据,存储到数据库中
        //......
 } }

重写方法时,要把原来的default权限改为public。

 

 

 


 

 

 

  • ServletContextAttributeListener   监听ServletContext(application域)中的属性变化,添加、修改——setattribute(),移出——removeAttribute()
  • HttpSessionAttributeListener    监听session域中的属性变化
  • ServletRequestAttributeListener   监听request域中的属性变化

 

ServletContext中(application域)放的是整个WebApp的共享数据,是所有用户的公共数据。

 

session是从request中通过SessionId这个Cookie来获取的,是根据用户浏览器上的SessionId这个Cookie来确定的。服务器上有很多session,一个用户(浏览器)对应一个session,我们从request获取的session是某个用户的,这个session域中存储的是某个用户的信息。

 

request是某个用户(浏览器)本次请求中添加、设置的数据,只在本次HTTP请求中有效。

 

 

 


 

 

 

 

JavaWeb中的8个监听器均为接口,自己新建Listener实现即可。

实现的时候需要注意,这8个接口只是声明为interface,里面的方法权限都是default,且都提供了空实现,并不是public abstract,所以IDEA不会自动重写里面的方法,需要我们Ctrl+B找到接口中的方法,复制过来,把default改为public,再写代码。

 

IDEA下新建Listener时,默认会实现 ServletContextListener,HttpSessionListener, HttpSessionAttributeListener 这三个最常用的监听器。

 

转载于:https://www.cnblogs.com/chy18883701161/p/11431581.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值