我學習在Java服務器發送事件和我使用一個簡單的例子。我使用Windows 7,Java 1.7,Tomcat 7,Eclipse Indigo。我已經創建一個servlet(SseServer.java),此Servlet的代碼如下:服務器發送事件代碼不工作jelastic
package sse;
import java.io.IOException; <br/>
import java.io.PrintWriter;<br/>
import java.util.Date;<br/>
import javax.servlet.ServletException;<br/>
import javax.servlet.annotation.WebServlet;<br/>
import javax.servlet.http.HttpServlet;<br/>
import javax.servlet.http.HttpServletRequest;<br/>
import javax.servlet.http.HttpServletResponse;<br/>
@WebServlet("/SseServer")<br/>
public class SseServer extends HttpServlet {<br/>
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Besides "text/event-stream;", Chrome also needs charset, otherwise
// does not work
// "text/event-stream;charset=UTF-8"
response.setContentType("text/event-stream;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Connection", "keep-alive");
PrintWriter out = response.getWriter();
while (true) {
out.print("id: " + "ServerTime" + "\n");
out.print("data: " + new Date().toLocaleString() + "\n\n");
out.flush();
// out.close(); //Do not close the writer!
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
而且我顯示在一個HTML的結果,如下圖所示SSE.html,對於這個代碼:
<!DOCTYPE html>
<html>
<body>
<h1>Current Server Time : </h1>
<div id="ServerTime"></div>
<script>
if (typeof (EventSource) !== "undefined") {
var source = new EventSource("http://localhost:8080/SSE/SseServer");
// http://eastern1.j.layershift.co.uk
//var source = new EventSource("http://eastern1.j.layershift.co.uk/SSE/SseServer");
source.onmessage = function(event) {
document.getElementById("ServerTime").innerHTML += event.data
+ "<br><br>";
};
} else {
document.getElementById("ServerTime").innerHTML = "Sorry, your browser does not support server-sent events...";
}
</script>
</body>
</html>
當我每隔一秒後在本地運行這段代碼,我能看到當前的時間。我還檢查了幾個瀏覽器如Chrome,Firefox等
由於這個代碼是工作的罰款,我決定在雲中部署這一所以我選擇了Jelastic.com。我創建了一個war文件並將其部署在Jelastic上,並嘗試運行我的示例應用程序。但是,當我從運行雲應用程序,我只能看到
當前服務器時間:
我看不到的時間。有人可以告訴我爲什麼會發生這種情況嗎?有什麼我需要改變我的代碼?如果是,那麼有人可以請建議它應該是什麼?或者我應該在創建戰爭文件時更改eclipse中的其他文件/設置?
任何幫助,非常感謝。
這eastern1.j.layershift.co.uk頁面無法找到。請檢查你的環境。 – Jelastic
@Jelastic我第一次使用Jelastic。你能告訴我我該檢查什麼嗎? – Abb