"B頁面不需要刷新就可以接收到該信息"
是不可能实现的,问题是怎样使b浏览器刷新,目前好像只能用时间间隔控制。
当然你也可以为这个应用单独开发个浏览器用点对点通讯(socket)发送信息

解决方案 »

  1.   

    写一个servlet,再service方法中写一个while(true)可以实现server push
    我很久以前试过,好像是可以的
      

  2.   

    写个程序监听80断口,解析提交的信息,处理以后以http协议的方式发回去。就是简单实现一个web server。
      

  3.   

    web server 的方式我考慮過,但現在客戶要求用weblogic6.1
    下面我把我的想法簡單的說以下;
    A頁面(是個Servlet) 
    簡單的向一個JMS的消息對列Queue發送信息
    B頁面(是個Servlet)負責從Queue中接收信息 如下:
    package examples.jms.sender;import java.io.*;
    import javax.naming.*;
    import javax.jms.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;public class Receiver extends HttpServlet implements MessageListener
    {  String msgText;  public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";  public final static String JMS_FACTORY="weblogic.examples.jms.QueueConnectionFactory";
     
      public final static String QUEUE="weblogic.examples.jms.exampleQueue"; 
      HttpServletRequest thisReq=null;
      HttpServletResponse thisRes=null;
      private QueueConnectionFactory qconFactory;
     
      private QueueConnection qcon;
     
      private QueueSession qsession;
      
      private QueueReceiver qreceiver;
      
      private Queue queue;
      private boolean quit = false;
      private PrintWriter out=null;  public void init(ServletConfig config) throws ServletException
      {
        super.init(config);
        System.out.println("init has been Called");
         try{
         Hashtable env = new Hashtable();
         env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
         env.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");     InitialContext ctx = new InitialContext(env);
         qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
        
         qcon = qconFactory.createQueueConnection();
        
         qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
        
         queue = (Queue) ctx.lookup(QUEUE);
        
         qreceiver = qsession.createReceiver(queue);
     
         qreceiver.setMessageListener(this);   
         qcon.start();   
        }catch(Exception e){
          System.out.println(e.getMessage());
        }
        
       }   public void service(HttpServletRequest req, HttpServletResponse res)
           throws IOException, ServletException
      {
          System.out.println("service has been called");
          res.setContentType("text/html");
          if(out == null)
           out = res.getWriter();  
             
           out.println(msgText);
      }
      public void onMessage(Message msg){
        try{
            System.out.println("Has Message Arrive");
            if(msg instanceof TextMessage){
              msgText = ((TextMessage)msg).getText();
            }else{
              msgText = msg.toString();
            }
            if(out != null){
              System.out.println("Message has push to anthor Servlet!");
              out.println(msgText);
            }else{
              System.out.println("Can not find outputStream For anotherServlet");
            }
           }catch(JMSException jmse){
             jmse.printStackTrace();
           }catch(Exception e){
             System.out.println("Note Exception:"+e.getMessage());
           }
        }
     
    }在WebLogic發布後A B 都可以運行,而且當A頁面發送一個信息後在weblogic的服務器窗口中,也可看到
    有;Message has push to anthor Servlet!輸出(B Servlet輸出),但就是B頁面的內容不會改變
      

  4.   

    "B頁面不需要刷新就可以接收到該信息"
    是不可能实现的,问题是怎样使b浏览器刷新,目前好像只能用时间间隔控制。
    当然你也可以为这个应用单独开发个浏览器用点对点通讯(socket)发送信息
      

  5.   

    wangzheng1978 說的方法是應該是可行的,但這樣會浪費很多CPU資源,
    當然可以在while中採用sleep 可以有所改善但大家有沒有更好的想法謝謝!!!