Рубрики
Без рубрики

Пружина 5 и Сервлет 4 – PushBuilder

Узнайте, как использовать Push Builder в Spring MVC, чтобы воспользоваться преимуществами технологии push сервера HTTP/2.

Автор оригинала: baeldung.

1. введение

Технология Server Push — часть HTTP/2 ( RFC 7540 ) — позволяет нам активно отправлять ресурсы клиенту со стороны сервера. Это серьезное изменение по сравнению с подходом, основанным на вытягивании HTTP/1.X.

Одна из новых функций, которую приносит Spring 5, – это поддержка push-сервера, которая поставляется с Jakarta EE 8 Servlet 4.0 API. В этой статье мы рассмотрим как использовать server push и интегрировать его с контроллерами Spring MVC .

2. Зависимость Maven

Давайте начнем с определения зависимостей, которые мы будем использовать:


    org.springframework
    spring-webmvc
    5.2.8.RELEASE


    javax.servlet
    javax.servlet-api
    4.0.0
    provided

Самые последние версии spring-mvc и servlet-api можно найти на Maven Central.

3. Требования к HTTP/2

Чтобы использовать server push, нам нужно запустить наше приложение в контейнере, поддерживающем HTTP/2 и API Servlet 4.0 . Требования к конфигурации различных контейнеров можно найти здесь, в Spring wiki .

Кроме того, нам понадобится поддержка HTTP/2 на стороне клиента ; конечно, большинство текущих браузеров имеют эту поддержку.

4. Функции Push Builder

Интерфейс Push Builder отвечает за реализацию push сервера. В Spring MVC мы можем ввести Push Builder в качестве аргумента методов, аннотированных @RequestMapping .

На этом этапе важно учитывать, что – если клиент не имеет поддержки HTTP/2 – ссылка будет отправлена как null .

Вот основной API, предлагаемый интерфейсом Push Builder :

  • path (String path) – указывает ресурс, который мы собираемся отправить
  • push() – отправляет ресурс клиенту
  • AddHeader (String name, String value) – указывает заголовок, который мы будем использовать для выталкиваемого ресурса

5. Быстрый Пример

Чтобы продемонстрировать интеграцию, мы создадим страницу demo.jsp с одним ресурсом — logo.png :

<%@ 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 controller — одну, которая использует серверный push, а другую-нет:

@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, мы можем увидеть различия, вызвав обе конечные точки.

Когда мы вызываем метод demo Без Push , представление и ресурс публикуются и потребляются клиентом с использованием технологии pull:

Когда мы называем демо С Push метод, мы можем видеть использование push-сервера и то, как ресурс заранее доставляется сервером, что приводит к снижению времени загрузки:

Технология server push может улучшить время загрузки страниц наших приложений во многих сценариях. Тем не менее, мы должны учитывать, что, хотя мы уменьшаем задержку, мы можем увеличить пропускную способность – в зависимости от количества ресурсов, которые мы обслуживаем.

Также неплохо объединить эту технологию с другими стратегиями , такими как кэширование , Минимизация ресурсов и CDN, а также запустить тесты производительности нашего приложения, чтобы определить идеальные конечные точки для использования server push.

6. Заключение

В этом кратком руководстве мы увидели пример использования технологии server push с Spring MVC с использованием интерфейса Push Builder и сравнили время загрузки при ее использовании со стандартной технологией pull.

Как всегда, исходный код доступен на GitHub .