监听器(listener)
监听器:监听一个事务的动作和存在的状态,监听器是很多的,但是在的现在的技术中的这种监听器,在java编写的GUI软件比较多。
案例:在前端显示在线的人数
在线人数的统计可以通过浏览器与服务器建立起来的连接的个数,这个时候就会想到session
代码实现使用注解:
-
创建一个类实现listener接口
public class LinsterDemo implements HttpSessionListener { //监听session @Override //当session被创建的时候就会进入这个方法 public void sessionCreated(HttpSessionEvent httpSessionEvent) { //获取全局域对象 HttpSession session = httpSessionEvent.getSession(); ServletContext servletContext = session.getServletContext(); //获取全局域对象中的值 Integer integer = (Integer) servletContext.getAttribute("onlinecount"); //判断全局域对象中是否为空,使用了包装类的手动拆箱和手动装箱 if (integer==null){ //创建一个Integer的对象将int的值放在里面,可以实现数字的装箱 //当全局域中的数据为空时,说明还没有用户登录,然后自己在全局域中设置值为1 integer = new Integer(1); }else { //使用Integer的invalue方法可以实现包装类向基本类型的装换,成为拆箱 //当全局域中的不为空时,将全局域中int值加一 int count=integer.intValue(); integer=new Integer(count+1); } servletContext.setAttribute("onlinecount",integer); } @Override //当session被注销的时候,就会进入下面的方法 public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { HttpSession session = httpSessionEvent.getSession(); ServletContext servletContext = session.getServletContext(); Integer integer = (Integer) servletContext.getAttribute("onlinecount"); //当session结束时,会判断session中是否还有数据,如果没所有数据,说明没有建立连接 if (integer==null){ integer = new Integer(0); }else { int count=integer.intValue(); integer=new Integer(count-1); } servletContext.setAttribute("onlinecount",integer); } }
-
在web.xml文件中设置映射的文件的class文件
<listener> <listener-class>com.g.Demo1.LinsterDemo</listener-class> </listener>
注意映射的class文件的路径时建立的linsterDemo自己