zoukankan      html  css  js  c++  java
  • JavaWeb Listener

    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 这三个最常用的监听器。

  • 相关阅读:
    PHP文件系统处理(二)
    PHP中的文件系统处理(一)
    PHP中常用正则表达式大全
    PHP中的正则表达式的使用
    SLF4J日志框架
    内部类
    计算机存储单位
    Maven 要点
    Maven 父类工程创建及引用
    Eclipse Maven Web项目创建
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/11431581.html
Copyright © 2011-2022 走看看