Servlet (6)

1. Listener
Servlet event listener es un programa Java que implementa una interfaz específica. Este programa se utiliza específicamente para monitorear el proceso de creación y destrucción de objetos como ServletContext, HttpSession y ServletRequest en aplicaciones Web, monitorear la modificación de los atributos de estos dominios objetos y enlace de sentido Establecido en el estado de un objeto en el dominio HttpSession.
Se definen ocho tipos de oyentes en la especificación de Servlet, y sus tipos y funciones.
Inserte la descripción de la imagen aquí

La descripción de HttpSessionActivationListener involucra los conceptos de activación y pasivación.
El proceso de transferir objetos HttpSession de la memoria al disco duro se llama pasivación. El proceso de los
objetos HttpSession que cambian de un estado persistente a un estado de ejecución se llama activación.

De acuerdo con los diferentes eventos de monitoreo, los oyentes de la tabla se pueden dividir en las siguientes tres categorías:
1. Oyentes de eventos (interfaz ServletContextListener, interfaz HttpSessionListener, interfaz ServletRequestListener) para la creación y destrucción de objetos de dominio.
2. Detectores de eventos utilizados para monitorear la adición y eliminación de atributos de objeto de dominio (interfaz ServletContextAttributeListener, interfaz HttpSessionAttributeListener, interfaz ServletRequestAttributeListener).
3. El detector de eventos (interfaz HttpSessionBindingListener, interfaz HttpSessionActivationListener) que se utiliza para monitorear el estado de un objeto vinculado al dominio HttpSession.
En la especificación de Servlet, estos tres tipos de detectores de eventos han definido las interfaces correspondientes. Al escribir el programa detector de eventos Solo es necesario implementar la interfaz correspondiente. Cuando se usa el oyente, el servidor web lo registrará en el objeto monitoreado de acuerdo con la interfaz implementada por el oyente. Cuando se activa el evento de oyente de un objeto, el contenedor web llamará al oyente de Servlet relacionado con él. El método maneja el evento.
2. El oyente HttpSessionListener cuenta la cantidad de personas en línea
Muchos sitios web o aplicaciones de software tienen la función de contar el número de personas actualmente en línea. En circunstancias normales, cuando un usuario ingresa a un sitio web, se crea un objeto HttpSession y cuando el usuario abandona el sitio web, el objeto HttpSession se destruye. Entre los ocho oyentes de Servlet, el oyente HttpSessionListener puede monitorear la creación y destrucción del objeto HttpSession en la aplicación web. Por lo tanto, se puede usar un oyente que implemente la interfaz HttpSessionListener para contar la cantidad de personas que están actualmente en línea en el sitio web.
1. Cree un oyente [cree una nueva clase Java para implementar la interfaz HttpSessionListener, vuelva a escribir el método]

package com.wangxing.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
 * HttpSessionListener接口用来监听HttpSession对象的创建和销毁
 * @author Administrator
 *
 */
public class OnlineListener implements HttpSessionListener{
	private int count = 0; // 用于统计在线人数变量
    //监听HttpSession对象的创建
	@Override
	public void sessionCreated(HttpSessionEvent hse) {
		count++; // Session对象创建时count变量加1
		ServletContext context = hse.getSession().getServletContext();
        context.setAttribute("count", new Integer(count));
	}
    //监听HttpSession对象的销毁
	@Override
	public void sessionDestroyed(HttpSessionEvent  hse) {
		count++; // Session对象创建时count变量加1
		ServletContext context = hse.getSession().getServletContext();
        context.setAttribute("count", new Integer(count));
	}
}

En OnlineListener.java, primero se define un recuento de variables de miembro para contar el número de personas en línea. Cada vez que se supervisa la creación de un objeto HttpSession, la variable de miembro de recuento aumentará en 1. Cada vez que se monitorea la destrucción del objeto HttpSession, la variable de miembro de recuento se reducirá en 1. Después de cada modificación de la variable de miembro de recuento, el valor de la variable de miembro de recuento también debe guardarse en el objeto ServletContext para que otros programas de Servlet puede recuperar el recuento de la variable de miembro del objeto ServletContext para mostrar el número actual de usuarios en línea en la página.
2. En el archivo web.xml, configure el detector de eventos OnlineListener

 <listener>
  	<listener-class>com.wangxing.listener.OnlineListener</listener-class>
 </listener>
  1. Crear una página de inicio y una página de cierre de sesión
package com.wangxing.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HomeServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		PrintWriter out=resp.getWriter();
		out.println("<html>");
		out.println("<head><meta charset=\"utf-8\"><title>HomeServlet</title></head>");
		out.println("<body><center>");
		Object  countobj=req.getSession().getServletContext().getAttribute("count");
		int count=(int)countobj;
		out.println("<h1>当前在线人数:"+count+"</h1>");
		out.println("<h2><a  href=\"logout\">安全退出</a></h2>");
		out.println("</center></body>");
		out.println("</html>");
		out.close();
	}
}
package com.wangxing.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LogOutServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//销毁session对象
		req.getSession().invalidate();
		PrintWriter out=resp.getWriter();
		out.println("<html>");
		out.println("<head><meta charset=\"utf-8\"><title>LogOutServlet</title></head>");
		out.println("<body><center>");
		out.println("<h1>你已经退出本系统!</h1>");
		out.println("</center></body>");
		out.println("</html>");
		out.close();
	}
}
 <filter>
  	<filter-name>encodingfilter</filter-name>
  	<filter-class>com.wangxing.filter.EncodingFilter</filter-class>
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>utf-8</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingfilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <listener>
  	<listener-class>com.wangxing.listener.OnlineListener</listener-class>
  </listener>
  <servlet>
  	<servlet-name>home</servlet-name>
  	<servlet-class>com.wangxing.servlet.HomeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>home</servlet-name>
  	<url-pattern>/home</url-pattern>
  </servlet-mapping>
  <servlet>
  	<servlet-name>logout</servlet-name>
  	<servlet-class>com.wangxing.servlet.LogOutServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>logout</servlet-name>
  	<url-pattern>/logout</url-pattern>
  </servlet-mapping>

Inserte la descripción de la imagen aquí

测试http: // localhost: 8080 / TestListener / home

Efecto después de una salida segura

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/guoguo0717/article/details/109209534
Recomendado
Clasificación