美文网首页
Java Web 之监听器

Java Web 之监听器

作者: CSeroad | 来源:发表于2021-08-13 15:30 被阅读0次

前言

学一学Java Web 三大组件之一监听器。

Servlet监听器

监听器主要用来监听事件的创建和销毁以及属性的一些变化。
按照监听的事件源分为ServletContext、HttpSession和ServletRequest这三个域对象。

ServletContext监听器

编写一个监听器只需要两步:

  1. 实现接口的方法
  2. 注册一个监听器

ServletContextListener接口用于监听ServletContext对象的创建和销毁事件

package com.guigu.servlet;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MySerlvetContextListener implements ServletContextListener{

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("SerlvetContext对象被销毁");
        
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("SerlvetContext对象被创建");
        
    }
    
}

注册监听器,在web.xml配置

  <!-- 配置监听器 -->
  <listener>
  <listener-class>com.guigu.servlet.MySerlvetContextListener</listener-class>
  </listener>
image.png

ServletContextAttributeListener接口用于监听ServletContext对象属性的添加、修改和移除
实现接口的方法

package com.guigu.servlet;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MySerlvetContextListener implements ServletContextAttributeListener{

    @Override
    public void attributeAdded(ServletContextAttributeEvent arg0) {
        System.out.println("ServletContextAttribute被添加:" + arg0.getName() + " : " + arg0.getValue());
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent arg0) {
        System.out.println("ServletContextAttribute被移除:" + arg0.getName() + " : " + arg0.getValue());
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent arg0) {
        System.out.println("ServletContextAttribute被替换:" + arg0.getName() + " : " + arg0.getValue());
        
    }

    
}

编写事件

package com.guigu.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class HelloServlet1 extends HttpServlet{


    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getServletContext().setAttribute("TestServletContextAttribute", "Hello");
        req.getServletContext().setAttribute("TestServletContextAttribute", "World");
        req.getServletContext().removeAttribute("TestServletContextAttribute");
        resp.getOutputStream().print("<p>Hello World</p>");
        
    }
}

注册监听器

  <!-- 配置监听器 -->
  <listener>
  <listener-class>com.guigu.servlet.MySerlvetContextListener</listener-class>
  </listener>

访问servlet

image.png

HttpSession监听器

HttpSessionListener接口用于监听HttpSession对象的创建和销毁
实现接口的创建销毁方法

package com.guigu.servlet;


import javax.servlet.http.*;


public class TestHttpSessionListener implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("Session创建了:" + se.getSession().getId());
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("Session销毁了:" + se.getSession().getId());
    }
}

编写事件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    Session ID: ${pageContext.session.id}
</body>
</html>

注册监听器

  <!-- 配置监听器 -->
  <listener>
  <listener-class>com.guigu.servlet.TestHttpSessionListener</listener-class>
  </listener>
  
  <session-config>
    <!-- 配置HttpSession对象的1分钟之后销毁 -->
    <session-timeout>1</session-timeout>
  </session-config>

访问index.jsp,服务端显示session值

image.png

HttpSessionAttributeListener接口用于监听HttpSession对象属性的添加、修改和移除
实现接口的方法

package com.guigu.servlet;


import javax.servlet.http.*;


public class TestHttpSessionListener implements HttpSessionAttributeListener {

    @Override
    public void attributeAdded(HttpSessionBindingEvent arg0) {
         System.out.println("HttpSessionAttribute被添加:" + arg0.getName() + " : " + arg0.getValue());
        
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent arg0) {
         System.out.println("HttpSessionAttribute被删除:" + arg0.getName() + " : " + arg0.getValue());
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent arg0) {
         System.out.println("HttpSessionAttribute被替换:" + arg0.getName() + " : " + arg0.getValue());
    }
   
}

编写事件

package com.guigu.servlet;


import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet2 extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getSession().setAttribute("TestSessionAttribute", "Session_Test11");
        req.getSession().setAttribute("TestSessionAttribute", "Session_Test22");
        req.getSession().removeAttribute("TestSessionAttribute");
        resp.getOutputStream().print("<p>Hello World</p>");
        
    }   
}

注册监听器

  <!-- 配置监听器 -->
  <listener>
  <listener-class>com.guigu.servlet.TestHttpSessionListener</listener-class>
  </listener>
image.png

待学习:
HttpSessionBindingListener接口用于对session钝化后监听。
HttpSessionActivationListener接口用于对session活化后监听。

ServletRequest监听器

ServletRequestListener接口用于监听ServletRequest对象的创建和销毁
实现接口的方法

package com.guigu.servlet;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

public class TestServletRequestListener implements ServletRequestListener{

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("ServletRequest创建了:"+sre.getServletRequest());
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("ServletRequest销毁了:"+sre.getServletRequest());
        
    }

}

注册监听器

  <listener>
  <listener-class>com.guigu.servlet.TestServletRequestListener</listener-class>
  </listener>
image.png

ServletRequestAttributeListener接口用于监听ServletRequest中属性的添加、修改和移除
实现接口的方法

package com.guigu.servlet;

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;

public class TestSerlvetRequest implements ServletRequestAttributeListener{

    @Override
    public void attributeAdded(ServletRequestAttributeEvent arg0) {
        System.out.println("ServletRequestAttribute被添加了:" + arg0.getName() + " : " + arg0.getValue());
    }

    @Override
    public void attributeRemoved(ServletRequestAttributeEvent arg0) {
        System.out.println("ServletRequestAttribute被删除了:" + arg0.getName() + " : " + arg0.getValue());
    }

    @Override
    public void attributeReplaced(ServletRequestAttributeEvent arg0) {
        System.out.println("ServletRequestAttribute被替换了:" + arg0.getName() + " : " + arg0.getValue());
    }


    
}

编写事件

package com.guigu.servlet;

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet2 extends HttpServlet{
    
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("Content-Type", "text/html;charset=UTF-8");
        req.setAttribute("Content-Type", "text/html;charset=gbk");
        req.removeAttribute("Content-Type");
        resp.getOutputStream().print("<p>Hello World</p>");
        
    }   
}

注册监听器

  <listener>
  <listener-class>com.guigu.servlet.TestSerlvetRequest</listener-class>
  </listener>
image.png

监听器脑图

image.png

参考资料

https://blog.coderap.com/article/45
https://www.bilibili.com/video/BV1Y7411K7zz?p=189

相关文章

  • 2018-08-24

    JAVA Web开发技术应用——监听器

  • Listener

    java web三大组件:servlet,listener,filter。java web中的监听器 事件源:三大...

  • 史上最全面‘java监听器’解读,读完就能用进项目

    Web监听器导图详解 监听器是JAVA Web开发中很重要的内容,其中涉及到的知识,可以参考下面导图: 一、Web...

  • Java Web 之监听器

    前言 学一学Java Web 三大组件之一监听器。 Servlet监听器 监听器主要用来监听事件的创建和销毁以及属...

  • JavaWeb Listener

    Java Web开发中,监听器常用与监听HttpServletRequest、HttpSession和Servle...

  • Java监听器

    监听器 web应用服务器通过监听器来监听servlet和与之对应的jsp中的三个内置对象。 web监听器本身是se...

  • javaweb 监听器

    1. java web中监听器的阐述 Listener是Servlet的监听器,它可以监听客户端的请求,服务端的操...

  • Listener

    监听器是实现特定的接口的java类,用来监听web应用中ServletContext,ServletRequest...

  • 监听器

    一、监听器定义 现实生活 -web监听器 二、web监听器应用 三、创建监听器 1、创建一个实现监听器接口的类。 ...

  • 2019-02-26 web监听器(慕课网学习笔记)

    1 监听器的定义 2 web中监听器的定义 3 web监听器的常用用途 4 创建第一个监听器 常规的web项目,需...

网友评论

      本文标题:Java Web 之监听器

      本文链接:https://www.haomeiwen.com/subject/eaegvltx.html