カテゴリ: Servlet 更新日: 2025/09/26

JavaのPushBuilderクラスpushメソッドを完全ガイド!初心者でもわかるサーバープッシュの開始方法

PushBuilderのpushメソッド
PushBuilderのpushメソッド

先生と生徒の会話形式で理解しよう

生徒

「先生、PushBuilderでCSSやJavaScriptを設定したあとって、実際にどうやってプッシュするんですか?」

先生

「いい質問ですね。リソースのパスやヘッダーなどの設定が済んだら、最後にpushメソッドを呼び出すことでサーバープッシュが実行されます。」

生徒

「つまり、pushを呼ばないと送られないんですね!」

先生

「そのとおりです。さっそく基本的な使い方を確認していきましょう。」

1. pushメソッドとは?

1. pushメソッドとは?
1. pushメソッドとは?

javax.servlet.http.PushBuilderインターフェースのpush()メソッドは、設定されたリソースをHTTP/2のサーバープッシュとして実際にクライアントへ送信するメソッドです。このメソッドを呼び出すことで、プッシュ処理が開始されます。

2. pushメソッドの使い方

2. pushメソッドの使い方
2. pushメソッドの使い方

push()メソッドは、リソースのpathmethodqueryStringheadersなどの設定をすべて終えたあとに呼び出します。


PushBuilder pushBuilder = request.newPushBuilder();

if (pushBuilder != null) {
    pushBuilder.path("styles/main.css")
               .addHeader("Accept", "text/css")
               .push();
}

3. pushを呼び出さないと何が起こる?

3. pushを呼び出さないと何が起こる?
3. pushを呼び出さないと何が起こる?

push()を呼び出さなければ、いくらリソースの設定をしても実際のプッシュは行われません。これは、PushBuilderが設定用のビルダーパターンの役割を果たしているからです。明示的にpushを呼ぶことが必要です。

4. 複数回のpush呼び出し

4. 複数回のpush呼び出し
4. 複数回のpush呼び出し

同じPushBuilderオブジェクトで複数のリソースを順番にプッシュすることができます。たとえばCSSとJavaScriptの両方をプッシュするには次のように記述します。


if (pushBuilder != null) {
    pushBuilder.path("styles/site.css").push();
    pushBuilder.path("scripts/site.js").push();
}

5. pushのタイミングに注意

5. pushのタイミングに注意
5. pushのタイミングに注意

push()は、HTTPレスポンスの出力が始まる前に呼び出す必要があります。つまり、response.getWriter()でHTMLなどの出力を始める前に実行するのが推奨です。そうしないと、プッシュが無効になる可能性があります。

6. 実行結果のHTMLとの連携

6. 実行結果の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メソッドの失敗時の挙動

7. pushメソッドの失敗時の挙動
7. pushメソッドの失敗時の挙動

プッシュ処理に失敗した場合でも例外がスローされるわけではありません。ただし、クライアントに送信されない、またはブラウザが受け取らない場合もあります。HTTP/2非対応のブラウザやプロキシが原因になることもあります。

8. 他のメソッドと併用する例

8. 他のメソッドと併用する例
8. 他のメソッドと併用する例

push()メソッドは、次のような他の設定メソッドと併用できます。


pushBuilder.path("api/info")
           .method("GET")
           .queryString("id=100")
           .setHeader("Accept", "application/json")
           .sessionId(request.getSession().getId())
           .push();

サーブレットやJSPの基礎を体系的に理解したい人には、 定番の入門書がこちらです。

スッキリわかるサーブレット&JSP入門をAmazonで見る

※ Amazon広告リンク

カテゴリの一覧へ
新着記事
New1
Spring
Springの@GetMappingアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
更新記事
New2
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「NotLike」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.4
Java&Spring記事人気No4
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.5
Java&Spring記事人気No5
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.6
Java&Spring記事人気No6
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説