呵呵 有趣 说一下我的想法吧!!    用DWR来实现,在客户端用setTimeout()设置每隔5秒请求一次服务端,看服务端是否提交了数据(是否提交了数据很多方式可以判定),如果有返回一个message,如果没有也返回一个message!!!!    客户端用js实现 判断返回的message是有数据提交还是没有数据提交(如果有,open一个网页对话框,如果没有不干事)    dwr如果知道的话 很好实现的!

解决方案 »

  1.   

    谢谢,这种方法我已经实现了,现在想从http协议入手,众所周知http是请求-断开式的,那么我们能不能实现http的长连接,有人说写个监听,模拟http,
    但具体怎么做就不知道了,望高人来指点迷津
      

  2.   

    不刷新却要有内容更新,我想应该用Ajax来实现吧,它就是用来干这个事的。
      

  3.   

    谢谢,这种方法我已经实现了,现在想从http协议入手,众所周知http是请求-断开式的,那么我们能不能实现http的长连接,有人说写个监听,模拟http, 
    但具体怎么做就不知道了,望高人来指点迷津
    这里面的(http的长连接)协议是怎摸回事????
      

  4.   

    不知道你的应用中有没有中到框架,
    我简单说一下思路,并加点代码?
    这里用到AJAX+STRUTS在数据库中应该有一个表记录用车申请信息的,比如是申请表(id,申请内容,申请时间)在你的carAdmin.jsp中
    <script type="text/javascript">
    clearTimeout("readInf",10*1000);//这里10表示10秒,根据需求来设置时间的长短function readInf(){
     var oXmlHttp=zXmlHttp.createRequest();
     var sendbody="";//不知道你有没有其它要提交的信息,有的话放在这里,我是想不到,格式:name=****&id=****
     oXmlHttp.open("post","/testR.do",true);//提交到testR.do去查询是否有新的申请单
     oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    oXmlHttp.onreadystatechange=function(){
        if(oXmlHttp.readyState==4){
    if(oXmlHttp.status==200){
                        var numbuer=oXmlHttp.responseText;
                        if(parseInt(number,10)>0)
             alert("你有新的"+numbuer+"份用车申请");
                    }else{
                         return;
                    }
        }
    };
    oXmlHttp.send(sendbody);
    }
    var zXml={useActiveX:(typeof ActiveXObject!="undefined"),useDom:document.implementation&&document.implementation.createDocument,useXmlHttp:(typeof XMLHttpRequest!="undefined")};zXml.ARR_XMLHTTP_VERS=["MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","Microsoft.XmlHttp"];zXml.ARR_DOM_VERS=["MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Microsoft.XmlDom"];;function zXmlHttp(){
    }
    zXmlHttp.createRequest=function(){
    if(zXml.useXmlHttp){
    return new XMLHttpRequest();
    }else if(zXml.useActiveX){
    if(!zXml.XMLHTTP_VER){
    for(var i=0;i<zXml.ARR_XMLHTTP_VERS.length;i++){
    try{
    new ActiveXObject(zXml.ARR_XMLHTTP_VERS[i]);
    zXml.XMLHTTP_VER=zXml.ARR_XMLHTTP_VERS[i];
    break;
    }catch(oError){
    ;
    }
    }
    }
    if(zXml.XMLHTTP_VER){
    return new ActiveXObject(zXml.XMLHTTP_VER);
    }else{
    throw new Error("Could not create XML HTTP Request.");}
    }else{
    throw new Error("Your browser doesn't support an XML HTTP Request.");
    }
    };
    </script>
    以上是AJAX代码;现在是ACTION的思路
    我以伪代码的行式表示给你看
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
       TestForm testForm = (TestForm) form from;
       获得当前时间的前10秒时间(10是刷新的秒数)
       是datetime赋于nowtime变量如:2008-04-05 10:10:10
       组织HQL语句
       hql="select count(id) from 申请表 where 申请时间>'nowtime';
       执行数据库的操作获得个数赋于number变量
       number统计nowtime时间之后里有多少个申请单
       response.setContentType("text/xml; charset=UTF-8");
       response.setHeader("Cache-Control","no-cache");
       
       response.getWriter().print(number);//把申请单个数返回给客户
       response.getWriter().flush();
       response.getWriter().close();
       return null;
    }
      

  5.   

    十分感谢,和2楼的思路一样,只是我想用 "服务器推送"技术实现,网上有解说,只是没有具体的实现,小弟才疏学浅,领悟不了太高深的东西,所以想请大家
    帮忙理清思路,最好能提供实现以供学习详细的介绍请大家google "服务器推技术 java"这两个关键字,我先贴一点出来很多应用譬如监控、即时通信、即时报价系统都需要将后台发生的变化实时传送到客户端而无须客户端不停地刷新、发送请求。本文首先介绍、比较了常用的“服务器推”方案,着重介绍了 Comet - 使用 HTTP 长连接、无须浏览器安装插件的两种“服务器推”方案:基于 AJAX 的长轮询方式;基于 iframe 及 htmlfile 的流方式。最后分析了开发 Comet 应用需要注意的一些问题,以及如何借助开源的 Comet 框架-pushlet 构建自己的“服务器推”应用。
    “服务器推”技术的应用传统模式的 Web 系统以客户端发出请求、服务器端响应的方式工作。这种方式并不能满足很多现实应用的需求,譬如:监控系统:后台硬件热插拔、LED、温度、电压发生变化; 
    即时通信系统:其它用户登录、发送信息; 
    即时报价系统:后台数据库内容发生变化; 
    这些应用都需要服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求。“服务器推”技术在现实应用中有一些解决方案,本文将这些解决方案分为两类:一类需要在浏览器端安装插件,基于套接口传送信息,或是使用 RMI、CORBA 进行远程调用;而另一类则无须浏览器安装任何插件、基于 HTTP 长连接。将“服务器推”应用在 Web 程序中,首先考虑的是如何在功能有限的浏览器端接收、处理信息:客户端如何接收、处理信息,是否需要使用套接口或是使用远程调用。客户端呈现给用户的是 HTML 页面还是 Java applet 或 Flash 窗口。如果使用套接口和远程调用,怎么和 JavaScript 结合修改 HTML 的显示。 
    客户与服务器端通信的信息格式,采取怎样的出错处理机制。 
    客户端是否需要支持不同类型的浏览器如 IE、Firefox,是否需要同时支持 Windows 和 Linux 平台。 
    基于客户端套接口的“服务器推”技术Flash XMLSocket如果 Web 应用的用户接受应用只有在安装了 Flash 播放器才能正常运行, 那么使用 Flash 的 XMLSocket 也是一个可行的方案。这种方案实现的基础是:Flash 提供了 XMLSocket 类。 
    JavaScript 和 Flash 的紧密结合:在 JavaScript 可以直接调用 Flash 程序提供的接口。 
    具体实现方法:在 HTML 页面中内嵌入一个使用了 XMLSocket 类的 Flash 程序。JavaScript 通过调用此 Flash 程序提供的套接口接口与服务器端的套接口进行通信。JavaScript 在收到服务器端以 XML 格式传送的信息后可以很容易地控制 HTML 页面的内容显示。关于如何去构建充当了 JavaScript 与 Flash XMLSocket 桥梁的 Flash 程序,以及如何在 JavaScript 里调用 Flash 提供的接口,我们可以参考 AFLAX(Asynchronous Flash and XML)项目提供的 Socket Demo 以及 SocketJS。Javascript 与 Flash 的紧密结合,极大增强了客户端的处理能力。从 Flash 播放器 V7.0.19 开始,已经取消了 XMLSocket 的端口必须大于 1023 的限制。Linux 平台也支持 Flash XMLSocket 方案。但此方案的缺点在于:客户端必须安装 Flash 播放器; 
    因为 XMLSocket 没有 HTTP 隧道功能,XMLSocket 类不能自动穿过防火墙; 
    因为是使用套接口,需要设置一个通信端口,防火墙、代理服务器也可能对非 HTTP 通道端口进行限制; 
    不过这种方案在一些网络聊天室,网络互动游戏中已得到广泛使用。Java Applet 套接口 在客户端使用 Java Applet,通过 java.net.Socket 或 java.net.DatagramSocket 或 java.net.MulticastSocket 建立与服务器端的套接口连接,从而实现“服务器推”。这种方案最大的不足在于 Java applet 在收到服务器端返回的信息后,无法通过 JavaScript 去更新 HTML 页面的内容。基于 HTTP 长连接的“服务器推”技术Comet 简介浏览器作为 Web 应用的前台,自身的处理功能比较有限。浏览器的发展需要客户端升级软件,同时由于客户端浏览器软件的多样性,在某种意义上,也影响了浏览器新技术的推广。在 Web 应用中,浏览器的主要工作是发送请求、解析服务器返回的信息以不同的风格显示。AJAX 是浏览器技术发展的成果,通过在浏览器端发送异步请求,提高了单用户操作的响应性。但 Web 本质上是一个多用户的系统,对任何用户来说,可以认为服务器是另外一个用户。现有 AJAX 技术的发展并不能解决在一个多用户的 Web 应用中,将更新的信息实时传送给客户端,从而用户可能在“过时”的信息下进行操作。而 AJAX 的应用又使后台数据更新更加频繁成为可能。
      

  6.   

    1。js轮询
    2。applet连接 socket,然后和js交互。
    3。开发浏览器插件。
    4。服务器端开长连接模式。不过这种情况下,客户端一般只能打开长连接的那一个页面。浏览器会限制对同一个服务器的连接数。
      

  7.   

    struts框架有专门的类timer 来实现这方面的操作