利用监听器设置在线人数以及文件上传

监听器

功能
Servlet中的监听器功能是负责监听WEB的各种操作,当相关的事件触发之后将产生事件,并对此事件进行处理,在WEB中可以对application、session、request三种操作进行监听。
分类
分别对application,session,request事件的监听
实现
实现监听功能,主要是由一个普通类,实现监听器的接口,在web.xml中配置监听器或者添加注解

以下是主要使用的六个监听器接口

接口 作用
ServletRequestListener 监听request的生命周期
ServletRequestAttributeListener 监听request域里面attribute参数的添加、删除或是修改
HttpSessionListener 监听session的 生命周期(创建以及销毁)
HttpSessionAttributeListener session域中的Attribute参数的添加、删除或是修改
ServletContextListener 监听application生命周期
ServletContextAttributeListener 全局域application域里面attribute参数的添加修改或是删除

监听器监听在线人数

思路
首先,需要利用session的有关参数的监听器。在登录时使用session域存储登录的用户信息user。当监听到参数的改变之后,在监听器里面实现记录当前在线人数操作。其次,记录的人数需存储于application域里面。使用application的生命周期监听器ServletContextListener来存储在Attribute中。
代码
CountOnLineListener.java文件
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

import priv.zs.upload.beans.User;

/**
 * Application Lifecycle Listener implementation class CountOnLine
 *
 */
@WebListener
public class CountOnLine implements ServletContextListener, HttpSessionAttributeListener {
   

	private ServletContext app ;
	
	/**
     * Default constructor. 
     */
    public CountOnLine() {
   
    }

	/**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    public void contextDestroyed(ServletContextEvent sce)  {
    
    }

	/**
     * @see HttpSessionAttributeListener#attributeAdded(HttpSessionBindingEvent)
     */
    //session参数添加  在线人数
    public void attributeAdded(HttpSessionBindingEvent se)  {
    
//    	System.out.println("session添加一个参数");
//    	System.out.println("监听到的添加属性名:" + se.getName());
		//设置参数,若是添加的参数名不是"user",证明不是用户添加,而是session域中存储量其他的参数
    	if(se.getName().equals("user")) {
   
    		/*
    		 * 添加注解消除掉警告  此警告是由于app.getAttribute()方法所获得的的 参数为Object类型,
    		 * 若不是User对象则会出现异常,无法将参数值转换为List<User>类型
    		 */
			@SuppressWarnings("unchecked")
			List<User> users = (List<User>) app.getAttribute("users");
	    	User user = (User) se.getValue();
	    	users.add(user);
	    	int count = (int) app.getAttribute("count");
	    	count++;
	    	app.setAttribute("count", count);
	    	/*
	    	 * count为基本数据类型,若是不存储进参数里面,则会无法修改在线人数
	    	 * 而List<User>为引用数据类型,不需要存储回去亦可改变参数
	    	 */
    	}
//    	System.out.println("count数目:" + count);
    }

	/**
     * @see HttpSessionAttributeListener#attributeRemoved(HttpSessionBindingEvent)
     */
    //session参数减少  离线人数
    public void attributeRemoved(HttpSessionBindingEvent se)  {
    
//    	System.out.println("有人注销.....");
    	@SuppressWarnings("unchecked")
    	List<User> users = (List<User>) app.getAttribute("users");
    	User user = (User) se.getValue();
    	users.remove(user);
    	int count = (int) app.getAttribute("count"</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值