<body onLoad="
<%
String temp = "";
String temp1 = "";
String temp2 = "";
boolean needbreak = false;
String username;
while(true){//循环等待消息
Thread.sleep(1000);//线程暂停1秒
try{
MessageListener ml = (MessageListener)application.getAttribute("messagelistener");
User user = (User)session.getAttribute("user");//获得此用户
if(user.getUmessagenumber() > 0){
temp2 = "RefreshMiddle();";
user.setUmessagenumber(0);
session.setAttribute("user",user);
needbreak = true;
}
if(ml != null){
if(ml.hasNewMarqueeMessage()){
ml.NoNewMarqueeMessage();
temp1 = "RefreshRight();";
needbreak = true;
}
}
if(needbreak) {
temp = temp1 temp2 "RefreshSelf();";
application.setAttribute("messagelistener", ml);
GuardUtil.debug("刷新页面,显示消息");
break;
}
}
catch(Exception e){
Thread.currentThread().destroy();
}
System.out.println("listening ... ...");
}//end while
out.println(temp);
%>"> <!-- end body tag -->
</body>
</html>
这种方法实际上是发送一个请求,如果没有新消息,服务器不予返回,直到出现新消息,才给予返回,这就导致一个问题,在发送和接受之间这段时间,页面一直为白板,显示页面读取未完成状态,所以必须把这个页面放到一个框架中让其大小为0。并且,必须在用户退出,或者用户的session超时时,将此线程销毁,防止一直连接服务器,占用资源。
采用这种方式之后,由于涉及到线程,而通常Web服务器如tomcat等不推荐自己操作线程,可能因为采用这种方式的原因,服务器此线程总是无端停止,没有响应,于是,我接着查找,又有所发现,见参考文章(1),参考文章写的比较简略,下面我给出详细的实现方法。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



