package servlet;
import java.util.*;
import java.util.concurrent.ConcurrentLinkedQueue;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;
import entity.Message;
/**
* 服务器启动时执行的Servlet
* @author Admin
*
*/
public class Global extends HttpServlet implements ServletContextListener {
private static final long serialVersionUID = -8680344467984908901L;
private Timer clearTimer =null; //清空聊天记录用Timer
/**
* 服务器停止时执行该事件
*/
public void contextDestroyed(ServletContextEvent sce) {
clearTimer.cancel();
}
/**
* 服务器启动时进行初始化
*/
public void contextInitialized(ServletContextEvent sce) {
//获取XML配置文件中是否使用线程安全的容器保存消息记录
boolean isSynch = sce.getServletContext().getInitParameter("isSynch").equals("1")?true:false; //获取是否线程同步的设置
//在Application中创建出消息集合
Map<String, ConcurrentLinkedQueue<Message>> msglist = null;
if(isSynch){
msglist = new Hashtable<String, ConcurrentLinkedQueue<Message>>();
}else {
msglist = new HashMap<String, ConcurrentLinkedQueue<Message>>();
}
sce.getServletContext().setAttribute("totalmsglist", msglist);
//在Application中创建出在线用户集合
List<String> userlist = null;
if(isSynch){
userlist = new Vector<String>();
}else {
userlist = new ArrayList<String>();
}
sce.getServletContext().setAttribute("userlist", userlist);
//获取XML配置文件中每隔多久清空一次聊天记录(毫秒为单位),并启动自动清除器
int task = Integer.parseInt(sce.getServletContext().getInitParameter("clearUserInterval"));
if(task > 0){
clearTimer = new Timer();
clearTimer.schedule(ClearMessageTask.getInstance(msglist), new Date(), task);
}
}
/**
* 消息记录自动清除器
* @author Admin
*
*/
static class ClearMessageTask extends TimerTask{
private ClearMessageTask(Map<String, ConcurrentLinkedQueue<Message>> msgList){
this.msgList = msgList;
}
private Map<String, ConcurrentLinkedQueue<Message>> msgList;
private static ClearMessageTask clear = null;
public static TimerTask getInstance(Map<String, ConcurrentLinkedQueue<Message>> msgList){
if(clear == null){
clear = new ClearMessageTask(msgList);
}
return clear;
}
@Override
public void run() {
System.out.print("正在清空服务器的消息记录:当前记录["+msgList.size()+"条]");
//msgList.clear();
System.out.println("清空完毕,还剩下["+msgList.size()+"]条");
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
WebMessageAjax.rar (31个子文件)
WebMessageAjax
.settings
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.project.facet.core.xml 252B
org.eclipse.core.resources.prefs 140B
org.eclipse.wst.common.component 480B
org.eclipse.wst.jsdt.ui.superType.container 49B
.jsdtscope 500B
org.eclipse.jdt.core.prefs 364B
src
servlet
SendMessageServlet.java 2KB
GetMessageLongServlet.java 3KB
Global.java 3KB
GetMessageServlet.java 2KB
LoginServlet.java 1KB
entity
Message.java 1KB
.project 2KB
WebRoot
css
talk.css 764B
META-INF
MANIFEST.MF 36B
WEB-INF
web.xml 3KB
classes
servlet
LoginServlet.class 2KB
GetMessageLongServlet.class 4KB
Global$ClearMessageTask.class 2KB
GetMessageServlet.class 3KB
Global.class 2KB
SendMessageServlet.class 3KB
entity
Message.class 1KB
lib
talk.jsp 1KB
login.html 604B
js
talk.js 3KB
long.js 818B
short.js 756B
.mymetadata 315B
.classpath 529B
.myeclipse
共 31 条
- 1
资源评论
- 破航衰败记2016-04-19不能用,是我没配置好么?
RenYueHD
- 粉丝: 10
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功