Spring 5とServlet 4 - プッシュビルダー

Spring 5およびServlet 4 – PushBuilder

1. 前書き

サーバープッシュテクノロジー(HTTP / 2(RFC 7540)の一部)を使用すると、サーバー側からクライアントにリソースをプロアクティブに送信できます。 これは、HTTP / 1.Xプルベースのアプローチからの大きな変更です。

Spring 5がもたらす新機能の1つは、Java EE 8 Servlet 4.0 APIに付属するサーバープッシュサポートです。 この記事では、how to use server push and integrate it with Spring MVC controllersについて説明します。

2. メーベン依存

使用する依存関係を定義することから始めましょう。


    org.springframework
    spring-webmvc
    5.0.2.RELEASE


    javax.servlet
    javax.servlet-api
    4.0.0
    provided

spring-mvcおよびservlet-apiの最新バージョンは、MavenCentralにあります。

3. HTTP/2 Requirements

サーバープッシュを使用するには、run our application in a container that supports HTTP/2 and the Servlet 4.0 APIにする必要があります。 さまざまなコンテナの構成要件は、ここのSpring wikiにあります。

さらに、need HTTP/2 support on the client-side;もちろん、ほとんどのcurrent browsersはこのサポートを持っています。

4. PushBuilderの機能

PushBuilderインターフェースは、サーバープッシュの実装を担当します。 Spring MVCでは、@RequestMappingアノテーションが付けられたメソッドの引数としてPushBuilderを挿入できます。

この時点で、次のことを考慮することが重要です–if the client doesn’t have HTTP/2 support – the reference will be sent as null

PushBuilderインターフェースによって提供されるコアAPIは次のとおりです。

  • path (String path) –は、送信するリソースを示します

  • push() –はリソースをクライアントに送信します

  • addHeader (String name, String value) –は、プッシュされたリソースに使用するヘッダーを示します

5. 簡単な例

統合を示すために、1つのリソース(logo.png)を使用してdemo.jspページを作成します。

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>



PushBuilder demo


    PushBuilder demo
    
" alt="Logo" height="126" width="411">

また、PushControllerコントローラーを使用して2つのエンドポイントを公開します。1つはサーバープッシュを使用し、もう1つは使用しません。

@Controller
public class PushController {

    @GetMapping(path = "/demoWithPush")
    public String demoWithPush(PushBuilder pushBuilder) {
        if (null != pushBuilder) {
            pushBuilder.path("resources/logo.png").push();
        }
        return "demo";
    }

    @GetMapping(path = "/demoWithoutPush")
    public String demoWithoutPush() {
        return "demo";
    }
}

Chrome開発ツールを使用すると、両方のエンドポイントを呼び出すことで違いを確認できます。

demoWithoutPushメソッドを呼び出すと、ビューとリソースが公開され、プルテクノロジーを使用してクライアントによって消費されます。

imagedemoWithPushメソッドを呼び出すと、プッシュサーバーの使用状況と、サーバーによってリソースが事前に配信される方法を確認できるため、読み込み時間が短縮されます。

imageサーバープッシュテクノロジーは、多くのシナリオでアプリケーションのページの読み込み時間を改善できます。 そうは言っても、待機時間は短縮しますが、提供するリソースの数に応じて帯域幅を拡大できることを考慮する必要があります。

このテクノロジーをCachingResource Minification、CDNなどの他の戦略と組み合わせ、アプリケーションでパフォーマンステストを実行して、サーバープッシュを使用するための理想的なエンドポイントを決定することもお勧めします。

6. 結論

このクイックチュートリアルでは、PushBuilderインターフェイスを使用してSpring MVCでサーバープッシュテクノロジを使用する方法の例を示し、それを使用した場合のロード時間と標準のプルテクノロジを比較しました。

いつものように、ソースコードはover on GitHubで利用できます。