servlet如何主动给客户发送response
效果做成QQ那样,一个账号在另一个地方登陆后,原来的马上离线。
要不要用线程啊?注:servlet主动,不是用户先发送request

解决方案 »

  1.   

    如果让servlet主动的话那就要用线程了。如果是QQ的话  可以这么理解。 用户登录以后想服务器发送request 服务器检查一下 该用户是否在其他地方登陆 若登录 则发送信息提示在别的地方登陆了。 最初还是要用户向服务器发送request的。
      

  2.   

    1.BS中服务端无法主动推送到客户端
    2.登陆的话可以用public static HashMap<String,Object>维护一个在线列表,也可以使用application域保存
      

  3.   

    用APACHE的Comet技术.
    http://www.ibm.com/developerworks/cn/web/wa-lo-comet/
    http://www.ibm.com/developerworks/cn/web/wa-lo-w2fpak-comet/index.html
      

  4.   

    一般情况是客户端向web容器发送请求,servlet 主动给客户端发送请求 我还么遇到多 呵呵呵 
      

  5.   

    如果让servlet主动的话那就要用线程了。如果是QQ的话 可以这么理解。 用户登录以后想服务器发送request 服务器检查一下 该用户是否在其他地方登陆 若登录 则发送信息提示在别的地方登陆了。 最初还是要用户向服务器发送request的。
      

  6.   

    用APACHE的Comet技术.
    http://www.ibm.com/developerworks/cn/web/wa-lo-comet/
    http://www.ibm.com/developerworks/cn/web/wa-lo-w2fpak-comet/index.html 
     
      

  7.   

    用线程激发,道理也是一样,先request,只是把request弄成自动发送。
      

  8.   


    BS模式servlet不能主動,還是要客戶端request的請求后服務器處理返回的
      

  9.   

    这个方式有点不太可行,bs结构的系统必须先有requirst然后再有response.
    他们是相对的,怎么能独立出来呢
    如果你非要这样做,可以找一些局部刷新的技术,比如ajax等 wicket也可以的
      

  10.   

    个人认为, QQ那个不是主动
      之所以知道你的QQ的再次登录了, 是因为你登录的时候发送了http请求, 
      在数据库中估计存在这样的字段, online 1代表在线, 0代表离线, 当第一次登录的时候
     就设置为在线状态, 当你再次登录了时候, 会上数据库验证这个字段,如果是为1, 会向你提示已经登录了.
       
      

  11.   

    局部刷新的技术,其实还是不断的在给servlet发送请求
      

  12.   

    刚才做了一个测试,很显然没有达到目的,谁帮忙给完善一下?//a.jsp
    <%@page contentType="text/html;charset=gb2312"%>
    this is a.jsp!
    <%!
    class Task implements Runnable{
        private HttpServletResponse response;
        private HttpSession session;
        private JspWriter out;
        public Task(HttpServletResponse response,HttpSession session,JspWriter out){
            this.response=response;
            this.session=session;
            this.out=out;
        }
        public void run(){
             while(true){   
                  try{
                    out.println("waiting!");
                  if(session.getMaxInactiveInterval()>=1){
                    response.sendRedirect("b.jsp");
                  }
                    Thread.sleep(100);
                  }catch(Exception e){
                 e.printStackTrace();
                  }
             }     
       }
    }
    %>
    <%
    if(session.isNew()){//如果session是新创建的
        out.println("create a new session!");
        new Thread(new Task(response,session,out)).start();//启动一个新线程
    }else out.println("session already exists!");
    %>
    //我本来想,打开a.jsp等着不动,看看能否自动跳转到b.jsp,结果没有,而且还打出一大堆错误信息,
    //可能是resposne已经关闭了,问哪个高手用线程实现一下看看.....
      

  13.   

    我的建议是使用server push技术 就可以搞定
      

  14.   

    服务器推送(Server Push)推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的连接。当服务器需要再次发送一批数据时,浏览器显示数据并保持连接。以后,服务器仍然可以发送批量数据,浏览器继续显示数据,依次类推。
    其实通俗来说就是网站server和浏览器客户端保持长连接,当有事情需要的时候server端给所有保持在长连接的客户发送消息。达到了同时同步,
    你可以去http://www.pushlets.com/去学学,不知道你用什么语言其他没法帮你 但是上面有很多例子可以去看看
      

  15.   

    写一个java小程序 来保持连接