JavaのPushBuilderクラスpushメソッドを完全ガイド!初心者でもわかるサーバープッシュの開始方法
生徒
「先生、PushBuilderでCSSやJavaScriptを設定したあとって、実際にどうやってプッシュするんですか?」
先生
「いい質問ですね。リソースのパスやヘッダーなどの設定が済んだら、最後にpushメソッドを呼び出すことでサーバープッシュが実行されます。」
生徒
「つまり、pushを呼ばないと送られないんですね!」
先生
「そのとおりです。さっそく基本的な使い方を確認していきましょう。」
1. pushメソッドとは?
javax.servlet.http.PushBuilderインターフェースのpush()メソッドは、設定されたリソースをHTTP/2のサーバープッシュとして実際にクライアントへ送信するメソッドです。このメソッドを呼び出すことで、プッシュ処理が開始されます。
2. pushメソッドの使い方
push()メソッドは、リソースのpath、method、queryString、headersなどの設定をすべて終えたあとに呼び出します。
PushBuilder pushBuilder = request.newPushBuilder();
if (pushBuilder != null) {
pushBuilder.path("styles/main.css")
.addHeader("Accept", "text/css")
.push();
}
3. pushを呼び出さないと何が起こる?
push()を呼び出さなければ、いくらリソースの設定をしても実際のプッシュは行われません。これは、PushBuilderが設定用のビルダーパターンの役割を果たしているからです。明示的にpushを呼ぶことが必要です。
4. 複数回のpush呼び出し
同じPushBuilderオブジェクトで複数のリソースを順番にプッシュすることができます。たとえばCSSとJavaScriptの両方をプッシュするには次のように記述します。
if (pushBuilder != null) {
pushBuilder.path("styles/site.css").push();
pushBuilder.path("scripts/site.js").push();
}
5. pushのタイミングに注意
push()は、HTTPレスポンスの出力が始まる前に呼び出す必要があります。つまり、response.getWriter()でHTMLなどの出力を始める前に実行するのが推奨です。そうしないと、プッシュが無効になる可能性があります。
6. 実行結果のHTMLとの連携
pushで送ったリソースは、クライアント側で明示的にHTMLの中で参照されていないと使われません。以下のようにHTML側でも<link>や<script>を記述しておきましょう。
<head>
<link rel="stylesheet" href="styles/site.css">
<script src="scripts/site.js"></script>
</head>
7. pushメソッドの失敗時の挙動
プッシュ処理に失敗した場合でも例外がスローされるわけではありません。ただし、クライアントに送信されない、またはブラウザが受け取らない場合もあります。HTTP/2非対応のブラウザやプロキシが原因になることもあります。
8. 他のメソッドと併用する例
push()メソッドは、次のような他の設定メソッドと併用できます。
pushBuilder.path("api/info")
.method("GET")
.queryString("id=100")
.setHeader("Accept", "application/json")
.sessionId(request.getSession().getId())
.push();