Servlet监听器的简单应用

Servlet页面显示在线人数

我们平时看直播的时候,有时候会显示当前页面的在线人数,看B站的时候,视频下方会有当前看这个视频的人数。我们这次通过Servlet的监听器,来实现这个功能。代码效果如图
Servlet监听器的简单应用_第1张图片

  1. 创建一个实现HttpSessionListener接口的Class类
package web;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
 * 
 * @author 悦酱IKA
 *监听session的创建过程的监听事件类
 */
public class CountListener implements HttpSessionListener{
	//在类里面定义在线人数的count属性
	private int count =0;
	@Override
	public void sessionCreated(HttpSessionEvent se) {
		// TODO Auto-generated method stub
		count++;
		//获取session对象
		HttpSession  session = se.getSession();
		//这里通过上下文的方式,将count绑定,原因是:只有ServletContext的作用范围是整个应用,
		//而如果用session.setAttribute的方式,每当我们关闭页面的时候,就自然消失。
		//session与页面想对应
		ServletContext sc = session.getServletContext();
		sc.setAttribute("count", count);
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		// TODO Auto-generated method stub
		//当关闭页面的时候,或者调用session.invalidate()时,自动调用该方法。
		//销毁session
		count--;
		//获取当前session
		HttpSession session = se.getSession();
		//必须把这个放在上下文中,才可以实现更新绑定
		ServletContext sc = session.getServletContext();
		sc.setAttribute("count", count);
	}

}

  1. 创建显示在线人数的JSP页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 从上下文中获取count的值,从而实现在线人数 -->
<h3>当前共有<%=
	application.getAttribute("count").toString()
%>人在线</h3>
<a href="logout">登出</a>
</body>
</html>
  1. 创建登出操作的Class的界面
package web;

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;
import javax.servlet.http.HttpSession;
/**
 * 
 * @author 悦酱IKA
 *
 * 2020年3月23日-下午2:16:12
 */

public class LogoutServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter out = resp.getWriter();
		HttpSession session = req.getSession();
		//这个步骤关键时调用这个方法,实现主动的删除session方法。
		session.invalidate();
		out.close();
	}

}

  1. 配置web.XML文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ListenerWeb</display-name>
  <!-- 配置监听器
  监听器的配置一定要在过滤器之前 -->
  <listener>
  	<listener-class>web.CountListener</listener-class>
  </listener>
  <servlet>
  <servlet-name>logout</servlet-name>
  <servlet-class>web.LogoutServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>logout</servlet-name>
  <url-pattern>/logout</url-pattern>
  </servlet-mapping>
</web-app>

到这里,我们简单的监听器应用就结束了。其实监听器可以应用很多方面,这里作者也是小白,就不多装了。
总结时间

  1. 监听器的XML要放在过滤器前面
  2. 要实现HttpSessionListener接口
  3. 要通过上下文进行绑定
    多写代码,多多提高自己才是王道,不要总想着装X,不然就和我一样,大三了什么都不会。

你可能感兴趣的:(Servlet监听器的简单应用)