这就是我的 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 秒
后在控制台中打印日期。
我想做的事情:
当我运行此代码时,我会在控制台中打印以下输出:
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 秒
的间隔打印日期(通过发送多个每当在上面的代码中执行 Syetem.out.println()
方法时都会响应浏览器)。
从服务器推送消息的原因:
在上面的示例中,我循环打印简单的消息。但在实际场景中,存在一些计算,因此消息将在不同的时间范围内可用(即不是每 5 秒之后,某些消息将很快可用,而其他消息可能需要更多时间)。因此,如果我从服务器推送,那么只要消息可用,我就可以推送消息。
无法理解:
我不确定如何从单独的线程(即从上面代码中的 ExecutorService
)向浏览器发送多个响应。我正在研究 javascript
中存在的 setInterval
方法,但我不知道如何使用它来构建此代码。
我可以自由地使用 jQuery
或 javascript
来完成这项工作。请指教。
最佳答案
您应该让客户端每五秒发出一次 AJAX 请求,而不是尝试从服务器推送,并且您应该返回要从该端点打印的代码段。
关于java - 在浏览器上定期显示消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26698454/