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

JavaのPushBuilderインターフェースを完全ガイド!初心者でもわかるHTTP/2プッシュの使い方

PushBuilder
PushBuilder

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

生徒

「JavaのServletで、HTMLを返すときに一緒に画像とかCSSも事前に送る方法ってあるんですか?」

先生

「それなら、javax.servlet.http.PushBuilderというインターフェースを使うと、HTTP/2のサーバープッシュ機能でリソースを先に送ることができますよ。」

生徒

「それってどういうときに使うと便利なんですか?」

先生

「例えば、HTMLを表示する前にCSSやJavaScript、画像などの静的ファイルを先に送ることで、ページの表示速度を上げたいときに使います。詳しく説明していきましょう!」

1. PushBuilderとは?

1. PushBuilderとは?
1. PushBuilderとは?

javax.servlet.http.PushBuilderは、Java Servlet 4.0(Java EE 8)から追加されたインターフェースで、HTTP/2のサーバープッシュ機能を利用するためのものです。通常、ブラウザがリクエストしてから必要なリソースがサーバーから送られますが、PushBuilderを使えば、サーバー側から先回りしてリソースを送ることができます。

2. PushBuilderが役立つ場面とは?

2. PushBuilderが役立つ場面とは?
2. PushBuilderが役立つ場面とは?

HTTP/2では、1つの接続で複数のリクエストやレスポンスを並列処理できます。これを活用することで、HTMLだけでなく、そのページに必要なCSSファイルやJavaScriptファイル、画像などをブラウザのリクエストより前に送ることが可能です。これによりページの読み込みが速くなり、ユーザー体験が向上します。

3. PushBuilderの基本的な使い方

3. PushBuilderの基本的な使い方
3. PushBuilderの基本的な使い方

HttpServletRequestからPushBuilderを取得し、pathでプッシュするリソースのパスを設定して、push()メソッドを呼び出すことで、サーバーからクライアントへリソースをプッシュできます。


import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.PushBuilder;

@WebServlet("/homepage")
public class HomePageServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        PushBuilder pushBuilder = request.newPushBuilder();

        if (pushBuilder != null) {
            pushBuilder.path("styles/main.css").push();
            pushBuilder.path("scripts/app.js").push();
            pushBuilder.path("images/logo.png").push();
        }

        response.setContentType("text/html");
        response.getWriter().println("<html><head><link rel='stylesheet' href='styles/main.css'></head><body>ようこそ!</body></html>");
    }
}

4. PushBuilderの主なメソッド

4. PushBuilderの主なメソッド
4. PushBuilderの主なメソッド

PushBuilderには、サーバープッシュの動作をカスタマイズするためのさまざまなメソッドがあります。よく使われるメソッドをいくつか紹介します。

  • path(String path):プッシュするリソースのパスを指定
  • method(String method):使用するHTTPメソッドを指定(通常はGET)
  • addHeader(String name, String value):ヘッダーを追加
  • setHeader(String name, String value):ヘッダーを上書き
  • push():リソースを実際にプッシュ

5. PushBuilderを使うための前提条件

5. PushBuilderを使うための前提条件
5. PushBuilderを使うための前提条件

PushBuilderはHTTP/2に対応している必要があるため、以下の条件を満たす必要があります。

  • Java Servlet 4.0以上を使用している
  • HTTP/2をサポートしているServletコンテナ(例:Tomcat 9+、Undertow、Jettyなど)
  • HTTPS接続でアクセスしている(HTTP/2は基本的にTLSが必要)

これらの条件を満たさない場合、request.newPushBuilder()nullを返すため、nullチェックを必ず行うことが重要です。

6. HTML側のリソースも正しく記述しよう

6. HTML側のリソースも正しく記述しよう
6. HTML側のリソースも正しく記述しよう

サーバーでプッシュしたとしても、HTMLに正しくCSSやJSファイルをリンクしておかないと意味がありません。以下のようにHTMLの中でもリソースを指定しておきましょう。


<head>
    <link rel="stylesheet" href="styles/main.css">
    <script src="scripts/app.js"></script>
</head>

7. サーバープッシュは万能ではない?

7. サーバープッシュは万能ではない?
7. サーバープッシュは万能ではない?

PushBuilderを使うことでパフォーマンスが向上する場面もありますが、常に効果的とは限りません。ブラウザがすでにキャッシュしているリソースを無駄に再送信してしまうと、ネットワーク帯域を浪費してしまうこともあります。そのため、プッシュするリソースの選定や適用場面には注意が必要です。

8. PushBuilderを使ったServletアーキテクチャの改善例

8. PushBuilderを使ったServletアーキテクチャの改善例
8. PushBuilderを使ったServletアーキテクチャの改善例

Webアプリケーションの初期表示に必要な静的リソース(CSSやJSなど)をPushBuilderで事前にプッシュしておくことで、サーバーとクライアントの間のやり取りを減らし、表示速度を高速化できます。とくにモバイル回線や通信速度が遅い環境では、サーバープッシュによる体感速度の改善効果が大きくなります。

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

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

※ Amazon広告リンク

カテゴリの一覧へ
新着記事
New1
Spring
SpringDataJPAのJPAクエリメソッド「NotLike」の使い方を完全ガイド!初心者向け解説
更新記事
New2
Spring
SpringDataJPAのJPAクエリメソッド「Like」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Java
JavaのLocalDateTimeクラスとplusMinutesメソッドを完全ガイド!初心者でもわかる分単位の時間操作
新規投稿
New4
Spring
SpringDataJPAのJPAクエリメソッド「IsNotNull」と「NotNull」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
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」の使い方を完全ガイド!初心者向け解説