在浏览器上定期显示消息

时间:2014-11-02 10:47:56

标签: java javascript jquery jsp servlets

这就是我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()时向浏览器发送多个响应在上面的代码中执行{1}}方法)。

从服务器推送消息的原因:

在上面的例子中,我在循环中打印简单消息。但在实际情况中,存在一些计算,因此消息将在不同的时间帧可用(即,不是每5秒之后,一些消息将在快速时间内可用而其他消息可能需要更多时间)。因此,如果我从服务器推送,那么我可以在消息可用时推送消息。

无法理解:

我不确定如何从单独的线程(即上述代码中的ExecutorService)向浏览器发送多个响应。我正在研究setInterval中出现的javascript方法,但我不会起诉如何使用它构建此代码。

我可以使用jQueryjavascript来完成这项工作。请指教。

1 个答案:

答案 0 :(得分:1)

您应该让客户端每隔五秒钟发出一次AJAX请求,而不是尝试从服务器推送,您应该返回要从该端点打印的代码段。