首页 > 亚博体育登录 > JavaWebListener

JavaWebListener

2019-09-22

?

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

?

?

使用xml注册Listener


        listener.MyListener
    

监听的是整个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

文章标签: