JavaWeb学习笔记九:监听器Listener学习,三大域对象的生命周期,邮件发送原理
发布日期:2021-05-28 16:47:33 浏览次数:35 分类:精选文章

本文共 3064 字,大约阅读时间需要 10 分钟。

监听器Listener学习

1. 监听器的基本概念与类型

监听器是一种用来感知和响应对象状态变化的程序组件。当对象发生变化时,监听器会自动执行相应的操作。

在Java Web开发中主要有以下几种类型的监听器:

  • ServletContextListener:用于监听ServletContext对象的状态变化。例如ServletContext创建、破坏以及属性的改变。
  • HttpServletListener:用于监听HttpServletRequest和HttpServletResponse的状态变化。
  • .HttpSessionListener:用于监听 HttpSession 对象的状态变化,包括创建、破坏以及属性的改变。
  • ServletRequestListenerServletResponseListener:用于监听Request和Response对象的状态变化。
  • ApplicationListener:用于监听ServletContext的状态变化。
  • SessionActivationListener:用于监听 HttpSession 对象的激活与钝化状态变化。
  • 2. ServletContext监听器的创建与使用

    要创建一个ServletContext监听器,可以按照以下步骤进行:

  • 创建一个类并实现ServletContextListener接口
  • 覆盖监听器的核心方法
    • contextDestroyed(ServletContextEvent sce):当ServletContext被销毁时调用。
    • context Initialized(ServletContextEvent sce):当ServletContext被创建时调用。
  • ServletContext监听器的生命周期

    ServletContext对象的生命周期主要包括以下几个阶段:

  • 重置(Preload)
  • 初始化(Initialized)
  • 销毁(Destroyed)
  • ServletContext对象的默认保存时间是30分钟,但可以通过配置来改变。

    监听ServletContext属性变化

    除了监听ServletContext的创建和销毁,开发者还可以通过实现ServletContextAttributeListener接口来监听ServletContext属性的变化。具体实现步骤如下:

  • 创建一个类并实现ServletContextAttributeListener接口
  • 覆盖valueaddedremoved方法,用于监听属性的添加和移除。
  • 3. HttpSession监听器的应用

    HttpSession的生命周期

    HttpSession对象的生命周期主要包括以下几个阶段:

  • 创建(当客户端请求生成时)。
  • 会话维持(默认30分钟过期,可通过配置改变)。
  • 销毁(当会话超时或客户端主动关闭时)。
  • HttpSession的属性变化监听

    要实现HttpSession属性变化的监听,可以按照以下步骤进行:

  • 创建一个实现HttpSessionActivationListener接口的类
  • 覆盖sessionWillPassivatesessionDidActivate方法,用于监听会话的钝化和激活。
  • 4. 监听三大域对象的属性变化

    在Java Web开发中,三大域对象(ServletContext、request和 HttpSession)的属性变化都可以通过特定类型的监听器来监测。

    监听属性变化的实现
  • 创建一个类并实现对应域对象的属性监听接口
    • ServletContext:实现ServletContextAttributeListener
    • HttpServletRequest:实现ServletRequestAttributeListener
    • HttpSession:实现SessionAttributeListener
  • web.xml中注册监听器
  • 5. 钝化与活化HttpSession

    钝化的意义

    钝化(即将 HttpSession 对象 serialization到文件系统中保存)有以下几个优点:

  • 减少内存占用:大规模的数据不再占据内存,降低了服务器性能负担。
  • 支持长时间会话:适合需要长时间保存的场景,例如电子商务中的购物车数据。
  • 钝化与活化的实现

    要实现HttpSession的钝化与活化,可以按照以下步骤进行:

  • 创建一个实现HttpSessionActivationListener接口的类
  • 覆盖钝化与活化的相关方法
  • 将钝化配置好的HttpServletRequest和 HttpSession 对象注明保存路径
  • web.xml中配置必要的参数以指定保存目录和钝化机制。
  • 代码示例

    以下是一个简单的HttpSession钝化与活化的实现代码示例:

    public class SessionManager implements HttpSessionActivationListener {    private String sessionId;    public String getSessionId() {        return sessionId;    }    public void setSessionId(String sessionId) {        this.sessionId = sessionId;    }    @Override    public void sessionWillPassivate(HttpSessionEvent se) {        System.out.println("Will be passivated: " + se.getId());        // 因此,调用save方法保存当前会话数据到磁盘        save(se);    }    @Override    public void sessionDidActivate(HttpSessionEvent se) {        System.out.println("Did active: " + se.getId());        // 从磁盘中读取并恢复会话数据        load(se);    }    private void save(HttpSessionEvent se) {        // TODO: 实现数据的保存逻辑    }    private void load(HttpSessionEvent se) {        // TODO: 实现数据读取逻辑    }}

    6. 邮箱服务器的实现原理

    电子邮件的发送通常遵循以下流程:

  • 邮件发送过程

    • 发件人通过POP3协议发送邮件到自己的邮件服务器。
    • 邮件服务器通过SMTP协议将邮件发送到目标邮件服务器。
    • 目标邮件服务器通知收件人邮件到达。
  • 邮件接收过程

    • 收件人通过POP3协议从邮件服务器下载邮件。
    • 集成邮件客户端查看邮件。
  • 通过以上机制,电子邮件能够在不同邮件服务器之间传输完成。

    总结

    通过以上学习,可以清楚地了解到如何利用Java Web开发中的不同类型的监听器来监测和管理各种域对象的状态变化。而在实际开发中,这些技术在项目的需要中可以灵活运用,但需要结合具体的业务需求来决定何种类型的监听器最佳使用。

    上一篇:一个.java文件中可以有几个同级类
    下一篇:JavaWeb学习笔记八:Ajax学习,使用Ajax引擎访问服务器,以及Servlet技术中乱码问题的再梳理

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年04月21日 22时19分25秒