手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

无进度条刷新获得服务器端数据并相应处理

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

<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
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!