Escucha de velocidad JavaWeb

Tabla de contenido

1. Inicio rápido con Listener

        1.Introducción al oyente:  

        2.Mecanismo de procesamiento de eventos de Java: 

Por ejemplo, ServletContextListener

        1. Función: 

        2. Métodos relacionados: 

        3. Ejemplos de aplicación: 

三、ServletContextAttributeListener

        1. Función: 

        2. Métodos relacionados: 

        3. Ejemplos de aplicación: 

4. HttpSessionListener

        1. Función: 

        2. Métodos relacionados: 

        3. Ejemplos de aplicación: 

5. Otros monitores

        1.HttpSessionAttributeListener: 

            1.1 Función 

            1.2 Métodos relacionados

        2.ServletRequestListener: 

            2.1 Función

            2.2 Métodos relacionados

        3.ServletRequestAttributeListener: 

            3.1 Función

            3.2 Métodos relacionados


1. Inicio rápido con Listener

       1.Introducción al oyente:  

        (1) El oyente es uno de los tres componentes principales de JavaWeb . Los tres componentes principales de JavaWeb son: programa Servlet , escucha y filtro .
        (2) El oyente es una especificación JavaEE , que es una interfaz.
        (3) La función del  oyente es monitorear ciertos cambios ( generalmente la creación/destrucción de objetos, cambios en atributos ) y activar el método correspondiente para completar la tarea correspondiente.
        (4)  JavaWeb tiene 8 oyentes , el más utilizado es ServletContextListener.

       2.Mecanismo de procesamiento de eventos de Java: 

        El procesamiento de eventos de Java adopta el " modelo de eventos delegados ". Es decir, cuando ocurre un evento, se genera el objeto del evento y la información relevante se pasa al "escucha de eventos" para su procesamiento .
        Entre ellos:
        ①El origen del evento se refiere a la operación del usuario, que puede ser un botón o una ventana, es decir, el objeto que genera el objeto del evento;

        ②Los eventos son objetos de eventos que transportan información generada cuando cambia el estado del origen del evento, como eventos de teclado, eventos de ventana, eventos de mouse, etc. Este objeto almacena mucha información sobre el evento actual, como el objeto KeyEvent que contiene el Código del valor de la tecla actualmente presionada. Se definen varios tipos de eventos en los paquetes java.awt.event y javax.swing.event.


Por ejemplo, ServletContextListener

        1. Función: 

        Monitorear la creación o destrucción de ServletContext (  el objeto ServletContext se crea cuando se inicia la aplicación web ), es decir, monitoreo del ciclo de vida.
        Escenarios de aplicación——
        (1) Cargue el archivo de configuración de inicialización, por ejemplo: archivo de configuración de Spring
        (2) Programación de tareas (cooperando con el temporizador Timer/TimerTask)

        2. Métodos relacionados: 

        (1) void contextInitialized (ServletContextEvent sce) se activa al crear un objeto ServletContext
        (2) void contextDestroyed (ServletContextEvent sce) se activa cuando se destruye el objeto ServletContext

        3. Ejemplos de aplicación: 

                El archivo de configuración web.xml es el siguiente: 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <listener>
        <listener-class>listener.IntroListener</listener-class>
    </listener>
</web-app>

               El código de la clase IntroListener es el siguiente: 

package listener;

import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;

/** Δ注意事项 : 
    (1) 当一个类实现了ServletContextListener接口,该类就是一个监听器。
    (2) 该类可以监听的事件,由该类实现的监听接口决定,
        eg: 实现了ServletContextListener接口,就可以监听ServletContextListener对象
            的创建和销毁,以此类推。
    (3) 当Web应用启动时,会产生ServletContextEvent事件对象,会调用对应的监听器的事件
        处理方法,此处为contextInitialized(...)方法,同时会传递事件对象。
    (4) 程序员可以通过ServletContextEvent事件对象,来获取需要的信息,然后再进行相应的业务处理。
    (5) Tomcat有维护一个容器来管理Listener.
 */
public class IntroListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        System.out.println("获取到的ServletContext对象 = " + servletContext);
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        System.out.println(servletContext + "————ServletContext对象被销毁~");
    }
}

                resultado de la operación: 


三、ServletContextAttributeListener

        1. Función: 

        Monitorear los cambios de propiedad de ServletContext

        2. Métodos relacionados: 

        (1) Se llama al atributo voidAdded (evento ServletContextAttributeEvent) al agregar un atributo
        (2) Se llama al atributo voidReplaced (evento ServletContextAttributeEvent) al reemplazar un atributo
        (3) Se llama al atributo voidRemoved (evento ServletContextAttributeEvent) al eliminar un atributo

        3. Ejemplos de aplicación: 

               El archivo de configuración web.xml es el siguiente: 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <listener>
        <listener-class>listener.IntroListener</listener-class>
    </listener>
    <listener>
        <listener-class>listener.ServletContextAttribute</listener-class>
    </listener>
</web-app>

                El código de la clase ServletContextAttribute es el siguiente: 

package listener;

import jakarta.servlet.ServletContextAttributeEvent;
import jakarta.servlet.ServletContextAttributeListener;

/**
 * @author : Cyan_RA9
 * @version : 21.0
 */
public class ServletContextAttribute implements ServletContextAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        String name = scae.getName();
        Object value = scae.getValue();
        System.out.println("监听到\"" + name + " = " + value + "\"属性被添加");
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        //Δ该方法取得的属性为旧值。

        String name = scae.getName();
        Object value = scae.getValue();
        System.out.println("监听到\"" + name + " = " + value + "\"属性被修改");
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        String name = scae.getName();
        Object value = scae.getValue();
        System.out.println("监听到\"" + name + " = " + value + "\"属性被删除");
    }
}

                El código de la clase TestServlet es el siguiente: 

package listener;

import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet(urlPatterns={"/test"})
public class TestServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = getServletContext();

        servletContext.setAttribute("color", "cyan");
        servletContext.setAttribute("color", "pink");

        servletContext.removeAttribute("color");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                Resultados de ejecución: (GIF)


4. HttpSessionListener

        1. Función: 

        Monitorear la creación o destrucción de objetos de sesión, es decir, monitorear el ciclo de vida de la sesión.

        2. Métodos relacionados: 

        (1) se llama a void sessionCreated(HttpSessionEvent se) cuando se crea el objeto de sesión         (2) se llama a void sessionDestroyed(HttpSessionEvent se) cuando se destruye el objeto de sesión

        3. Ejemplos de aplicación: 

                El código de la clase HttpSessionListener_Demo es el siguiente: 

package listener;

import jakarta.servlet.http.HttpSession;
import jakarta.servlet.http.HttpSessionEvent;
import jakarta.servlet.http.HttpSessionListener;

public class HttpSessionListener_Demo implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        HttpSession session = se.getSession();
        String sessionId = session.getId();
        System.out.println("Session" + sessionId + "被创建.");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        HttpSession session = se.getSession();
        String sessionId = session.getId();
        System.out.println("Session" + sessionId + "被销毁.");
    }
}

                Configure el oyente en el archivo de configuración web.xml, como se muestra en la siguiente figura: 

                El código de la clase TestServlet2 es el siguiente: 

package listener;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;

@WebServlet(urlPatterns = {"/test2"})
public class TestServlet2 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        System.out.println("session = " + session);

        String threadName = Thread.currentThread().getName();
        System.out.println("令" + threadName + "线程休眠10秒钟~");
        try {
            Thread.sleep(1000 * 10);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        session.invalidate();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

                Resultados de ejecución: (GIF a continuación)


5. Otros monitores

        1.HttpSessionAttributeListener: 

            1.1 Función 

        Monitorear cambios en las propiedades de la sesión

            1.2 Métodos relacionados

        (1) atributo nulo agregado (ServletRequestAttributeEvent srae) al agregar atributos al objeto de sesión
        (2) atributo nuloReplaced(ServletRequestAttributeEvent srae) al reemplazar atributos en el objeto Sesión
        (3) atributo nuloRemoved(ServletRequestAttributeEvent srae) al eliminar atributos en el objeto Sesión

        2.ServletRequestListener: 

            2.1 Función

        Monitorear la creación o destrucción de objetos Req , es decir, solicitar monitoreo del ciclo de vida .

            2.2 Métodos relacionados

        (1) Al crear un objeto de solicitud, se llama a void requestInitialized (ServletRequestEvent sre) ; el objeto ServletRequest se puede obtener a través del objeto ServletRequestEvent y luego, mediante una transformación polimórfica descendente, se puede obtener el objeto de clase de implementación de la interfaz HttpServletRequest .
        (2) Se llama a void requestDestroyed (ServletRequestEvent sre) al destruir el objeto de solicitud .

        3.ServletRequestAttributeListener: 

            3.1 Función

        Monitorear los cambios de propiedad de Req ( primero llamado ; combinado con el mecanismo subyacente de Tomcat, Tomcat procesará las solicitudes HTTP a través del objeto HttpServletRequest )

            3.2 Métodos relacionados

        (1) atributo nulo agregado (ServletRequestAttributeEvent srae) al agregar atributos
        (2) atributo nuloReplaced(ServletRequestAttributeEvent srae) al reemplazar atributos
        (3)  atributo nuloRemoved(ServletRequestAttributeEvent srae) al eliminar atributos  

        System.out.println("FIN------------------------------------------ -------------------------------------------------- --------------------------------------");

Supongo que te gusta

Origin blog.csdn.net/TYRA9/article/details/132348975
Recomendado
Clasificación