本次实训并不是很难弄,就是知识点需要学习,
补充一点,在编写监听器的时候,需要给监听器这个类进行注解,告诉这个监听器这个类自己是谁:
@WebListener
小技巧!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
线上第一部分的代码:
package listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @Author 陈平安
* @Date 2022/6/1 14:59
* @PackageName:com.xxx.seervlet
* @ClassName: listener01
* @Description: TODO
* @Version 1.0
*/
@WebListener
public class listener02 implements HttpSessionListener{
Integer nunpeople = 0;//在线统计人数
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
System.out.println("listener has created~~~~~~~");
nunpeople++;
httpSessionEvent.getSession().getServletContext().setAttribute("onlineunmber",nunpeople);
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
System.out.println("listener has destroyed1~~~~~~~~~~");
nunpeople--;
httpSessionEvent.getSession().getServletContext().setAttribute("onlineunmber",nunpeople);
}
}
package com.xxx.seervlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* @Author 陈平安
* @Date 2022/6/1 15:01
* @PackageName:com.xxx.seervlet
* @ClassName: Servlet
* @Description: TODO
* @Version 1.0
*/
@WebServlet("/s03")
public class Servlet02 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();//得到 session
String key01 = request.getParameter("key");
if (key01 !=null && key01.equals("login")){
session.invalidate();
return;
}
Integer num = (Integer) session.getServletContext().getAttribute("onlineunmber");//从session中获取数值
response.setContentType("text/html;charset=UTF-8");//设置编码
response.getWriter().write("<h2>在线人数:"+num+"</h2><h4><a href='s03?key=login'>退出</a><h4>");
}
}
这个application这个类作为范围类。因为只有这样,才可以实现不同浏览器访问的时候实现人数的共享。不然其他的类都只能实现本次浏览器的人数共享!
这里有一个安排,就是当你的浏览器的url栏输入key=login的时候就是模拟人数的减少1.就是为了模拟,实现一下。
下面都是截图。