java—实现一个监听器HttpServletRequest的创建销毁、在线人数 (56)

在JavaWeb中的监听器分类

在Javaweb中存在三个被监听对象:

HttpServletRequest

HttpSessoin

ServletContext


监听者


被监听者


监听到事件对象


HttpSessionActivationListener


HttpSession – 监听HttpSession活化和顿化。


HttpSessionEvent 


HttpSessionAttributeListener[W1]


HttpSession – 监听session的属性变化的。S.setAttributee();


HttpSessionBindingEvent 


HttpSessionBindingListener


HttpSession - 监听哪一个对象,绑定到了session上。S.setAtrri(name,User);


HttpSessionListener[W2]


HttpSesion – 监听sessioin创建销毁


HttpSessionEvent


ServletContextAttributeListener


ServletContext – 属性变化的


ServletContextListener


servletContext 创建销毁


ServletRequestListener - serlvetRequestAttibuteListner


Rrequest -创建销毁


实现一个监听器HttpServletRequest的创建销毁

第一步:实现一个类:

package cn.hx.listener;

import javax.servlet.ServletRequestEvent;

import javax.servlet.ServletRequestListener;

public class RequestListener implements ServletRequestListener {

public void requestDestroyed(ServletRequestEvent sre) {

System.err.println("request销毁了:");

Object o = sre.getSource();

System.err.println("这个o is :"+o);//[email protected]

}

public void requestInitialized(ServletRequestEvent sre) {

System.err.println("request创建了:");

Object o = sre.getSource();

System.err.println("这个o是 :"+o);//[email protected]

}

}

第二步:必须要配置到web.xml

<listener>

<listener-class>cn.itcast.listener.RequestListener</listener-class>

</listener>

说明:

1:配置一个Listener只要求提供类名就可以了。

2:在tomcat启动时,会自动的初始化这个监听器类。

3:tomcat创建的Listner,Serlvet,Filter都是单列的.

 在线人数

只要有人访问本站点,成功创建一个Session就是一个会话,一个会话就是一个在线人数。

用HttpSSessionListener来监听Session的创建。

第一步:

package cn.hx.listener;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

/**

* 以下实现在线人数的统计

*/

public class MySessionListener implements HttpSessionListener {

private Integer online=1;

//request.getSession();

public void sessionCreated(HttpSessionEvent se) {

System.err.println("有人访问本网点了");

HttpSession hs1 = (HttpSession) se.getSource();

HttpSession hs2 = se.getSession();

System.err.println("hs1:"+hs1.getId()+","+hs2.getId()+",ip:");

//获取整个域的对象

ServletContext sc= se.getSession().getServletContext();

sc.setAttribute("online",online++);

//将所有session放到servletContext

//先从application获取所有已经维护的sesison

List<HttpSession> list = (List<HttpSession>) sc.getAttribute("sessions");

if(list==null){//第一个访问的人

list = new ArrayList<HttpSession>();

sc.setAttribute("sessions", list);

}

list.add(hs2);

}

//过期(30),s.invalidate();

public void sessionDestroyed(HttpSessionEvent se) {

System.err.println("有人退出了..."+se.getSession().getId());

ServletContext sc= se.getSession().getServletContext();

sc.setAttribute("online",online--);

}

}

时间: 2024-11-05 17:28:55

java—实现一个监听器HttpServletRequest的创建销毁、在线人数 (56)的相关文章

java 加入一个线程、创建有响应的用户界面 。 示例代码

javajava 加入一个线程.创建有响应的用户界面 . 示例代码 来自thinking in java 4 21章  部分代码  目录21.2.11 thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155 package org.rui.thread.concurrent; /** * 加入一个线程 * 一个线程可以在其他线程之上调用join()方法,其效果是等待一段时间直到第二个线程结束才继续执行

《用Java写一个通用的服务器程序》02 监听器

在一个服务器程序中,监听器的作用类似于公司前台,起引导作用,因此监听器花在每个新连接上的时间应该尽可能短,这样才能保证最快响应. 回到编程本身来说: 1. 监听器最好由单独的线程运行 2. 监听器在接到新的连接之后,处理连接的方法需要尽快返回 在Java Push Framework中,因为需要同时监听普通客户端和服务器监视服务的客户端,所以定义两种监听器:Acceptor和MonitorAcceptor. 由于两者的关于监听部分的逻辑是相同的,因此首先定义了抽象类Listener来实现了监视器

Java 过滤器、监听器、拦截器的区别

原文:http://www.360doc.com/content/10/0601/09/495229_30616324.shtml 1.过滤器 Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request.Response)统一设置编码,简化操作:同时还可进行逻辑判断,如用户是否

Java三大器之监听器(Listener)的工作原理和代码演示

现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁.主要作用是:做一些初始化的内容添加工作.设置一些基本的内容.比如一些参数或者是一些固定的对象等等.首先来看一下ServletContextListener接口的源代码: public abstract interface ServletContextListener ext

java中一个memcached案例

下面先来一个网络上的案例,这个案例比较简单,直接在类中进行一些参数的配置,具体代码如下: package com.wzpmt; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.danga.MemCached.MemCachedClient; import com.danga.MemCached.SockIOPool; public class MemCachedManager

由“Java中一个字符占两个字节”引起

起因 Java中一个字符占两个字节,这和C/C++稍有区别.在C/C++中我们可以通过sizeof运算符方便地知道某个变量类型或对象的大小,那在Java中又如何? 问题出现 Java为什么没有提供sizeof运算符? 要回答这个问题,我们可以从另一个角度来看,那就是为什么C/C++中提供sizeof运算符.这就让人忍不住想到C/C++和Java在内存管理上的区别. 在C中,内存分配和释放的任务交给了程序员,当我们尝试用malloc为某个对象分配一块堆内存时,一个无法逃避的问题是,这个即将被创建的

ZooKeeper JAVA API 之环境准备和创建会话

Zookeeper是一个开放源代码的分布式协调服务,由雅虎创建,是Google Chubby的开源实现.Zookeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的元语集,并以一系列简单易用的接口提供给用户使用. 单机模式部署与运行(Windows) 确保已经安装了JAVA 1.6及其以上版本的JDK 下载Zookeeper    http://zookeeper.apache.org/releases.html  目前稳定版本即stable版本为3.4.6.

为什么用 Java:一个 Python 程序员告诉你

这篇文章专门给程序员写的,普通读者慎入.原作者:Kevin Sookocheff 译者:Celia Zhen,原文点击文末链接. 每当我告诉别人我一直在用Java工作时,大家的反应都是: “纳尼!Java?为啥是Java?” 说实话,本人刚开始的时候也是同样的反应.但是由于Java的类型安全,执行性能和坚如磐石的工具,我渐渐地开始欣赏Java.同时我注意到,现在的Java已今非昔比——它在过去的10年间稳健地改善着. 缘何是Java? 假 设每天都用Java的想法还没有让君恶心到食不下咽,我在此

用JAVA描述一个车与修车厂两个事物

需求: 使用java描述一个车与修车厂两个事物, 车具备的公共属性:轮子数. 名字. 颜色 ,还具备跑的功能行为.跑之前要检测轮子是否少于了4个,如果少于了4个,那么要送到修车厂修理,修车厂修理之后,车的轮子数要补回来4个. 然后车就继续的跑起来. 修车厂: 具备公共属性: 名字. 地址. 电话. 公共的行为: 修车. class Car{ //公共属性 String name;//名字 String color;//颜色 int num = 4;//Java中是允许定义成员变量,并且初始化值.