、クライアントが使用して更新を受信できるように、Javaサーブレットを使用して、サーバー送信されたイベントを作成することは可能ですJavaのHTTPサーブレットを使用して動作するはずです。Javaサーブレットとサーバー送信されたイベント
答えて
これはトリックです。
HTML
<!DOCTYPE html>
<html>
<body onload ="registerSSE()" >
<script>
function registerSSE()
{
alert('test 1');
var source = new EventSource('http://frewper:8080/hello/sse');
alert('Test2');
source.onmessage=function(event)
{
document.getElementById("result").innerHTML+=event.data + "<br />";
};
/*source.addEventListener('server-time',function (e){
alert('ea');
},true);*/
}
</script>
<output id ="result"></output>
</body>
</html>
サーブレット:
import java.io.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class sse extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response)
{
try
{
System.out.println("SSE Demo");
response.setContentType("text/event-stream");
PrintWriter pw = response.getWriter();
int i=0;
while(true)
{
i++;
pw.write("event: server-time\n\n"); //take note of the 2 \n 's, also on the next line.
pw.write("data: "+ i + "\n\n");
System.out.println("Data Sent!!!"+i);
if(i>10)
break;
}
pw.close();
}catch(Exception e){
e.printStackTrace();
}
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
{
doPost(request,response);
}
}
Jettyを使ってJDK 1.6.0_25とChromeブラウザで試しましたが、うまくいきません。サーブレットが要求を取得し、「データ送信済み」というメッセージがコンソールに表示されますが、Webページには応答が表示されません。どのようなJDKのバージョンとブラウザを使用しましたか?私はこのすべてに新しい。 – DPD
jdk 1.6.0_24を使用しました。これはTomcatを使用していました。また、ブラウザが「sse」をサポートしているかどうかを確認してください。好ましくはchromeまたはfirefoxの最新バージョンを使用してください。 – frewper
"EventSourceの応答にUTF-8ではない文字セット(" iso-8859-1 ")があります。接続を中断しています。私はデフォルトのエンコーディングだと思います。 'response.setCharacterEncoding(" UTF-8 ");' – Bakudan
サーバー送信されたイベントは、HTML5の機能です。私たちは "HTML5"と言います。したがって、クライアント側の機能です。 長いサーバーはhttps respnseヘッダー「text/event-stream; charset = UTF-8」、「接続」、「キープアライブ」を設定でき、サーバーによってサポートされています。このようなヘッダーはJava Servletで設定できます。 Here you can find a step for step guide on SSE with servlet
私は非同期モードでプレーンなJavaサーブレット内に統合することができ、非常に簡単なライブラリを作成しているので、余分なサーバスレッドは、各クライアントのために必要ありません:https://github.com/mariomac/jeasse
それはのためのポイント・ツー(SseDispatcherを統合ポイントSSE)とSseBroadcaster(イベント放送用)。使用例:
public class TestServlet extends HttpServlet {
SseBroadcaster broadcaster = new SseBroadcaster();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Scanner scanner = new Scanner(req.getInputStream());
StringBuilder sb = new StringBuilder();
while(scanner.hasNextLine()) {
sb.append(scanner.nextLine());
}
System.out.println("sb = " + sb);
broadcaster.broadcast("message",sb.toString());
}
//http://cjihrig.com/blog/the-server-side-of-server-sent-events/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
broadcaster.addListener(req);
}
}
興味深いですね。しかし、なぜそれをLGPL(Apache 2の代わりに)ライセンスしましたか? –
@TomFennelly私は基本的に、派生コードに制限なしに自由に使用できるライセンスを「ランダムに」選択しました。あなたは別のものを使うように私に勧めますか? LGPLに不利な点はありますか? – Mario
ビジネスに優しいという点では、Apache 2は、製品の中でそれを使用する人々の所在地が制限されているという点でウィルスではありません。 –
- 1. サーブレットをサーバー送信イベント(SSE)のサーバーとして使用する
- 2. サーバーがサーブレットを使用してイベントを送信しました
- 3. jQueryとAJAXまたはサーバーから送信されたイベント
- 4. サーバー送信イベント対ポーリング
- 5. TCPハンドシェイク:サーバー送信イベントとWebSocket?
- 6. JavaサーブレットがJSPページにデータを送信
- 7. サーブレットのGET/POSTに送信されたJSP URIの取得
- 8. サーバー送信イベントがクラッシュするマイ・ブラウザ
- 9. サーバー送信イベントを閉じる方法
- 10. AFNetworkingによるサーバー送信イベント
- 11. javaサーブレット転送クッキー
- 12. サーブレットにシリアル化されたデータを送信するときのjava.io.EOFException
- 13. SMTPサーバーは1つのサーバーでは送信されませんが、別のサーバーで送信されます
- 14. サーバーはハイブリッドアプリケーションでイベントを送信しました
- 15. サーバ送信イベントとRailsストリーミング
- 16. フォームの値がサーブレットに送信されない
- 17. UITextFieldから送信されたイベントを集める
- 18. Javascript HMTL、onclickイベントは、ボタンをクリックしたときに送信されますが、キーボードで入力が押されたときは送信されませんか?
- 19. Kurento Custom Plugin:非同期にJavaサーバーにイベントを送信する方法
- 20. サーバーに送信されたパスワードを暗号化する方法
- 21. サーバーに送信されたURLのエンコーディング(クエリではない)
- 22. Exchange ActiveSyncサーバーに送信されたデバイスIDを取得する
- 23. アプレットからサーブレットへのJava Beansの送信
- 24. サーバーに送信されるHTTPリクエストパラメータとヘッダーを表示する
- 25. Flash 4で送信されたデータを取得する方法サーブレット側のHttpService
- 26. Exchangeサーバー:送信SMTPサーバー名?
- 27. サーバー側のサーバー送信イベントコスト
- 28. が送信されたSMS
- 29. UISwitchがプログラムで変更されたときにvalueChangedイベントを送信しない
- 30. SWF Deciderが開始された後にワークフローが送信されないDecisionイベント
「サーバー送信イベント」のHTML5機能を探していますか? http://today.java.net/article/2010/03/31/html5-server-push-technologies-part-1 – Robert
はい..イベントはJavaサーブレットを使用して作成する必要があります – Chris
サーブレットは受信HTTPリクエスト。それらは接続を開いたままにするようには設計されていません。あなたはそれを行うことができますが、あなたがそうした場合、あなたのサーバはワーカースレッドから非常に速く実行されると仮定します。 – Robert