Servlet: evento de contexto y escucha de contexto

La clase ServletContextEvent proporciona alertas/notificaciones de cambios en el contexto del servlet de una aplicación web. ServletContextListener es una clase que recibe alertas/notificaciones sobre cambios en el contexto del servlet y actúa sobre ellos. Cuando el contexto se inicializa y elimina, el ServletContextListener se utiliza para realizar tareas cruciales. En pocas palabras, ServletContextEvent y ServletContextListener funcionan en tándem; cada vez que cambia el ServletContext, ServletContextEvent transmite un aviso, que es recibido por ServletContextListener, que luego realiza varias tareas basadas en el mensaje.

Constructor de la clase ServletContextEvent

ServletContextEvent(ServletContext e)

En la clase ServletContextEvent, solo hay un constructor. Después de la instanciación de ServletContext, el contenedor web produce una instancia de ServletContextEvent.

Métodos de ServletContextEvent

public ServletContext getServletContext()

Nota: Devuelve la instancia de ServletContext.

Métodos de la interfaz ServletContextListener

Método

Acción realizada 

contexto vacío Inicializado (ServletContextEvent e) Cuando la aplicación se inicializa por primera vez, se llama a este método.
contexto vacío destruido (ServletContextEvent e) Cuando se destruye la aplicación, se llama a este método.

Ejemplo: ServletContextEvent y ServletContextListener

En este ejemplo, tendremos que crear una tabla llamada contador con una columna llamada página vista para guardar el número de páginas vistas. al utilizar este registro de la base de datos, averiguaremos el número total de visitas a la página.

A. Archivo: index.html

HTML

<a href="CounterGfg">Total Page views GeeksforGeeks</a>

B. Archivo: web.xml

XML

<web-app>
 
<listener>
<listener-class>MyListenerGfg</listener-class>
</listener>
 
<servlet>
<servlet-name>CounterGfg</servlet-name>
<servlet-class>CounterGfg</servlet-class>
</servlet>
 
<servlet-mapping>
<servlet-name>CounterGfg</servlet-name>
<url-pattern>/CounterGfg</url-pattern>
</servlet-mapping>
 
</web-app>

C. Archivo: MyListenerGfg.java

Java

// Java Program to Illustrate MyListener Class
 
// Importing required classes
import java.sql.*;
import javax.servlet.*;
 
// Class
public class MyListenerGfg implements ServletContextListener {
    // Class data members
    ServletContext ctx;
    Connection con;
    Statement s;
    PreparedStatement ps;
    ResultSet rs;
    int count;
 
    // Method 1
    public void contextInitialized(ServletContextEvent sce) {
 
        // Try block to check for exceptions
        try {
 
            // Loading drivers using forName() method
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/geeksforgeeks", "root", "root");
 
            s = con.createStatement();
 
            // Fetching pageviews value from table counter
            rs = s.executeQuery("select pageview from counter");
 
            // Iterating using next() method
            while (rs.next()) {
                count = rs.getInt(1);
            }
 
            ctx = sce.getServletContext();
            ctx.setAttribute("pcount", count);
        }
 
        // Catch block to handle exceptions
        catch (Exception e) {
 
            // Display exception with line number
            // using printStackTrace() method
            e.printStackTrace();
        }
    }
 
    // Method 2
    public void contextDestroyed(ServletContextEvent sce) {
 
        try {
 
            ctx = sce.getServletContext();
            count = (Integer)ctx.getAttribute("pcount");
            ps = con.prepareStatement("update counter set pcount='" + count + "'");
            ps.executeUpdate();
        }
        catch (Exception e) {
             
            e.printStackTrace();
        }
    }
}

D. Archivo: CounterGfg.java

Java

// Java Program to Illustrate Counter Class
 
// Importing required classes
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Class
// Extending HttpServlet class
public class CounterGfg extends HttpServlet {
    // Method
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
        throws ServletException, IOException
    {
        response.setContentType("text/html;charset=UTF-8");
 
        PrintWriter out = response.getWriter();
        ServletContext ctx = getServletContext();
 
        Integer count = (Integer)ctx.getAttribute("pcount");
 
        out.println(count + ": pageview");
        ctx.setAttribute("pcount", ++count);
    }
}

Ahora, ejecute el archivo ‘index.html’ en el servidor y esto mostrará el siguiente resultado

Producción:

Después de hacer clic en ese enlace, se cargará la siguiente página que muestra el recuento de visitas a la página, es decir, cuántas veces visitó la página el usuario. El recuento de páginas aumentará cada vez que actualice o vuelva a visitar la página.

Publicación traducida automáticamente

Artículo escrito por sanketnagare y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *