2014-11-02 33 views
0

這就是我的Servlet定期在瀏覽器上顯示消息

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 
    System.out.println("Initializing..."); 

    ExecutorService executorService = Executors.newFixedThreadPool(1); 

    executorService.execute(new Runnable() { 
     public void run() { 
      System.out.println("Inside Thread!!!"); 
      for(int i=1; i<5; i++){ 
       System.out.println("Date: " + new Date()); 
       try { 
        Thread.sleep(5000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    });  
    executorService.shutdown(); 
    // Some more piece of code is there 
} 

我在這裏做什麼:

我創建了一個單獨的線程在日期越來越控制檯5 sec後打印。

我想要做什麼:

當我運行這段代碼,我得到這個輸出打印到控制檯上:

Initializing... 
Inside Thread!!! 
Date : Sat Nov 01 15:57:57 GMT 2014 
Date : Sat Nov 01 15:58:02 GMT 2014 
Date : Sat Nov 01 15:58:07 GMT 2014 
Date : Sat Nov 01 15:58:12 GMT 2014 

我想相同的一組消息中要打印jsp頁面,以便在5 sec(通過在上述代碼中執行Syetem.out.println()方法時執行的方法向瀏覽器發送多個響應)的間隔打印日期。

原因從服務器推送消息:

在上面的例子中,我在一個循環中進行打印簡單的消息。但在實際情況下,有一些計算,因此消息將在不同的時間範圍內可用(即不是每5秒鐘後,一些消息將在快速時間內可用,而其他消息可能需要更多時間)。因此,如果我從服務器推送,那麼只要有消息,我就可以推送消息。

無法理解:

我不知道如何將多個響應來自一個單獨的線程(即在上面的代碼ExecutorService)發送到瀏覽器。我正在調查javascript中存在的setInterval方法,但並不是要如何使用它來構建此代碼。

我可以自由使用jQueryjavascript來完成這項工作。請指教。

回答

1

而不是嘗試從服務器推送,您應該讓客戶端每五秒發出一次AJAX請求,並且您應該返回您要從該端點打印的代碼段。

+0

在上面的例子中,我在循環中打印簡單的消息。但在實際情況下,有一些計算,因此消息將在不同的時間範圍內可用(即不是每5秒鐘後,一些消息將在快速時間內可用,而其他消息可能需要更多時間)。因此,如果我從服務器推送,那麼只要有消息,我就可以推送消息。請建議。 – user182944 2014-11-02 12:03:36

相關問題