java里面监听在线人数,T用户下线

在 Java 中怎么获取多少用户同时在线,怎么只允许一个用户在线,怎么强行把一个用户T下线?现在常用的几种框架好像没有提供相应API,所以自己使用 ServletListener 做一个

想法

一般有这样的需求时马上会想到下面两点:

  1. HTTP是无状态的,怎么记录在线人数,下线了怎么办?
  2. HTTP只能客户端向服务端发请求,不能服务器推信息给客户端,怎么T用户下线?

理论上肯定是不可行的。好吧,办法目前能想到的只有利用session了。在web.xml里面可以有这样的配置

1
2
3
<session-config>
<session-timeout>5</session-timeout>
</session-config>

这里设置的是Session超过5分钟就会过期。Tomcat默认是30分钟,用来统计用户数的话,越小越精确,但如果是一个需要正常登录才能访问而且信息都在Session里面,也要考虑用户忍耐度-_-!

用户每创建一个Session都会有产生唯一的SessionId,如果没有过期,后续与服务器的交互SessionId是不会变的,就利用SessionId来实现这个需求。

监听器

首先,在web.xml里面加入监听器,监听器的作用是维护一个全局的在线用户列表

阅读更多

HTML5跨域上传

HTML5 规范定义了 File Api,可以和以往 Flash 上传一样,读取选择的文件信息,还可以监听上传进度显示在页面上。

跨域

使用flash实现时,若文件上传到的地址和当前上传的页面不在同一个域下面,则要加入 crossdomain.xml 跨域允许文件,Flash 会先去取上传地址上的文件看当前域是否得到许可,如果可以则执行上传。

HTML5 上传也有安全机制,一般情况下是不允许跨域上传的,上传前会先去使用http options方法探测有没有权限,地址为上传地址,所以要在上传地址里面加入允许。

在 Java 中,上传地址一般是 Servlet,需要在doPost和doOptions加上Header

doPost主要用于上传,doOptions用于上传过程中监听进度。也就是说没有加doOptions跨域允许也是可以上传的,只无法获取上传的进度,和表单上传没有什么区别。

阅读更多