package com.turing.manage.listeners;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
-
@desc session监听器其目的是为了实现统计在线人数
-
@author Li Ya Hui
-
@time 2021年6月16日 下午9:59:18
*/
public class SessionListener implements HttpSessionListener {
//构建无参,
public SessionListener() {
System.out.println("session监听器初始化......");
// TODO Auto-generated constructor stub
}
/**
-
@desc 1. session创建的时候
*/
@Override
public void sessionCreated(HttpSessionEvent se) {
//1.根据传入的事件对象(HttpSessionEvent)获取Session对象 (事件源对象 (被监听对象))
System.out.println("session创建的开始------------------------------");
HttpSession session = se.getSession();
System.out.println("sessionid:"+session.getId());
System.out.println("sessionuser"+session.getAttribute("user"));
//2.通过session获取ServletContext对象(application对象 : 全局都起作用的,所以可以将统计的在线总人数的这个变量存放于在这个作用域中)
ServletContext sc = session.getServletContext();
//3.判断application对象中是否有(已经有人登录上的)值 通过session的数量,在页面上显示人数
Integer numSession = (Integer) sc.getAttribute("numSession");
//如果数量为0
if(numSession==null)
{
//session赋值为1
numSession=new Integer( 1 );
}
else {
//获取登陆前的session 数量值
int temp = numSession.intValue();
//将上一次的session数量 + 1 返回给总数量
numSession = new Integer(temp + 1);
}
//4.将数据放入 application 作用域里
sc.setAttribute("numSession", numSession);
}
/**
-
@desc 2. session销毁的时候
*/
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session销毁的开始");
//1.根据传入的事件对象(HttpSessionEvent)获取Session对象 (事件源对象 (被监听对象))
HttpSession session = se.getSession();
System.out.println("sessionid:"+session.getId());
System.out.println("sessionuser"+session.getAttribute("user"));
//2.通过session获取ServletContext对象(application对象 : 全局都起作用的,所以可以将统计的在线总人数的这个变量存放于在这个作用域中)
ServletContext sc = session.getServletContext();
//3.判断application对象中是否有(已经有人登录上的)值 通过session的数量,在页面上显示人数
Integer numSession = (Integer) sc.getAttribute("numSession");
//如果数量为0
if(numSession==null)
{
//session赋值为1
numSession=new Integer( 0 );
}
else {
//获取登陆前的session 数量值
int temp = numSession.intValue();
//将上一次的session数量 + 1 返回给总数量
numSession = new Integer(temp - 2);
}
//4.将数据放入 application 作用域里
sc.setAttribute("numSession", numSession);
}
}
package com.turing.manage.listeners;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
- @desc 上下文内容监听器其目的 预加载初始化一些数据信息
- @author Li Ya Hui
- @time 2021年6月17日 上午10:55:23
/
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("===============servlet服务初始化(也就是tomcat正式启动成功)==================");
System.out.println("1.可以开始预加载一些信息了");
ServletContext context = sce.getServletContext();
/**
* 1.可以预先加载连库4要素
/
Map<String, Object> map=new HashMap<String, Object>();
map.put("username", "root");
map.put("password", "root");
map.put("drivername", "com.mysql.jdbc.Driver");
map.put("url", "jdbc://..........");
context.setAttribute("map", map);
/*
* 2.也可以在这里实现注入....其实也就是Spring框架核心的注入的原理所在。。。。。(后续讲)
*/
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("===============servlet服务销毁(也就是tomcat重新部署)==================");
}
}
package com.turing.manage.listeners;
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
/**
- @desc 监听器应用举例之-Request请求监听器
- @author Li Ya Hui
- @time 2021年6月17日 上午11:35:11
/
public class MyServletRequestListener implements ServletRequestListener {
/*
- @desc 1.请求的初始化
- @param sre
/
public void requestDestroyed(ServletRequestEvent sre) {
//1.通过sre事件获取到事件源
ServletRequest request = sre.getServletRequest();
System.out.println("ip:"+request.getRemoteHost()+"开始请求!");
}
/*
- @desc 2.请求的销毁/结束
*/
@Override
public void requestInitialized(ServletRequestEvent sre) {
//1.通过sre事件获取到事件源
ServletRequest request = sre.getServletRequest();
System.out.println("ip:"+request.getRemoteHost()+"结束请求!");
}
}
评论区