java模拟浏览器长连接,简单模拟tomcat环境测试HttpSessionBindingListener实现效果

HttpSessionBindingListener接口在很多情况下用于在线用户人数的统计与管理。不言而喻,session是必须的,但又不想专门启动tomcat运行一个web程序来测试它的效果。那么有没有办法直接调用tomcat自己的jar包来构造一个session来实现我的目的。比如:

1.调用tomcat的某个jar,这个包就是在tomcat运行时接收远程客户端的http请求时,用来构造HttpServletRequest、HttpServletResponse、HttpSession等我们熟知的servlet API中的实现类,现在我只需要HttpSession接口的实现。

2.获得了HttpSession实例之后,我就可以用session.setAttribute()方法将HttpSessionBindingListener的实例放入session,然后又调用session.removeAttribute()删除这个属性,看看HttpSessionBindingListener的实例中相应方法是否被触发,从而实现测试目的。

通过多番测试,证明上面的步骤是完全能实现的。

一、首先将tomcat安装目录下面的所有jar包引入工程(其实并非全部需要,只是为了操作简单),包括lib及bin目录下的。

二、自定义HttpSessionBindingListener的实现类

import javax.servlet.http.HttpSessionBindingEvent;

import javax.servlet.http.HttpSessionBindingListener;

public class MyBindingListener implements HttpSessionBindingListener {

// 绑定与解绑定时需要操作的业务数据

private Object obj;

public MyBindingListener(Object obj) {

this.user = obj;

}

@Override

public void valueBound(HttpSessionBindingEvent event) {

System.out.println("hi...valueBound");

// process obj

}

@Override

public void valueUnbound(HttpSessionBindingEvent event) {

System.out.println("hi...valueUnbound");

// process obj

}

}

三、寻找Tomcat中的HttpSession实现类

其实也比较简单,首先查看一下tomcat源码对应的API文档

http://tomcat.apache.org/tomcat-7.0-doc/api/index.html

,找到后缀为session的包名:org.apache.catalina.session,经查看,HttpSession的实现类为StandardSession和StandardSessionFacade,事后测试,这两个都可以用来检查HttpSessionBindingListener的监听效果。不过为满足好奇,我还是启动了tomcat,在随便一个demo的页面中写上,看看tomcat默认是使用的哪个实现,结果输出 org.apache.catalina.session.StandardSessionFacade@1f6df4c 那就用它吧。

然后,就是写测试类,如下:

import org.apache.catalina.core.StandardContext;

import org.apache.catalina.session.StandardManager;

import org.apache.catalina.session.StandardSession;

import org.apache.catalina.session.StandardSessionFacade;

import org.junit.Test;

public class HttpSessionBindingListenerTest {

@Test

public void test() {

StandardManager sm=new StandardManager();

sm.setContainer(new StandardContext());//添加容器

StandardSession ss=new StandardSession(sm);//构造一个session

System.out.println(ss.isValid());

ss.setValid(true);

System.out.println(ss.isValid());

//利用上面的session构造出我们需要的那个session,

//其实也可直接用上面的session测试

StandardSessionFacade session=new StandardSessionFacade(ss);

//StandardSession session=new StandardSession(sm);

//session.setValid(true);

System.out.println(session);

MyBindingListener my=new MyBindingListener(new Object());

session.setAttribute("my", my);

try {

Thread.currentThread().sleep(3000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

session.removeAttribute("my");

}

}

运行结果:

false

true

org.apache.catalina.session.StandardSessionFacade@1f6df4c

hi...valueBound

hi...valueUnbound

说明,为求简便,MyBindingListener类中的属性只是简单使用了Object类型,具体可依个人实现业务需要进行相应修改,然后在对应的触发方法中对其进行相应处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值