Spring Boot: статический контент

По умолчанию Spring Boot предоставляет статическое содержимое из каталога /static (или /public или /resources или /META-INF/resources) в classpath или из корня ServletContext. Он использует ResourceHttpRequestHandler из Spring MVC, чтобы вы могли изменить это поведение, добавив свой собственный WebMvcConfigurer и переопределив метод addResourceHandlers.

В автономном веб-приложении сервлет по умолчанию из контейнера также включен и действует как запасной вариант, обслуживая содержимое из корня ServletContext, если Spring решит не обрабатывать его. В большинстве случаев этого не происходит (если вы не измените конфигурацию MVC по умолчанию), потому что Spring всегда может обрабатывать запросы через DispatcherServlet.

По умолчанию ресурсы отображаются в /**, но вы можете настроить это с помощью свойства spring.mvc.static-path-pattern. Например, перемещение всех ресурсов в /resources/** может быть достигнуто следующим образом:

spring.mvc.static-path-pattern=/resources/**

Вы также можете настроить расположение статических ресурсов с помощью свойства spring.resources.static-location (заменив значения по умолчанию списком расположений каталогов). Путь контекста корневого сервлета, "/", также автоматически добавляется как местоположение.

В дополнение к «стандартным» местоположениям статических ресурсов, упомянутым ранее, для контента Webjars сделан особый случай. Любые ресурсы с путем в /webjars/** обслуживаются из файлов jar, если они упакованы в формате Webjars.

Не используйте каталог src/main/webapp, если ваше приложение упаковано в jar-файл. Хотя этот каталог является общепринятым стандартом, он работает только с war пакетами и в большинстве инструментов сборки игнорируется, если вы генерируете jar.

Spring Boot также поддерживает расширенные функции обработки ресурсов, предоставляемые Spring MVC, что позволяет использовать такие случаи, как статические ресурсы, уничтожающие кэш, или использовать независимые от версии URL-адреса для веб-файлов.

Чтобы использовать независимые от версии URL-адреса для Webjars, добавьте зависимость webjars-locator-core. Тогда объявите свой Webjar. Используя jQuery в качестве примера, добавление "/webjars/jquery/jquery.min.js" приводит к "/webjars/jquery/x.y.z/jquery.min.js", где x.y.z - версия Webjar.

Если вы используете JBoss, вам нужно объявить зависимость webjars-locator-jboss-vfs вместо webjars-locator-core. В противном случае все веб-файлы разрешаются как 404.

Чтобы использовать очистку кэша, следующая конфигурация настраивает решение очистки кэша для всех статических ресурсов, эффективно добавляя хэш контента, такой как <link href="/css/spring-2a2d595e6ed9a0b24f027f2b63b134d6.css"/>, в URL:

spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**

Ссылки на ресурсы переписываются в шаблонах во время выполнения благодаря ResourceUrlEncodingFilter, который автоматически настраивается для Thymeleaf и FreeMarker. Вы должны вручную объявить этот фильтр при использовании JSP. Другие механизмы шаблонов в настоящее время не поддерживаются автоматически, но могут быть с пользовательскими макросами/хелперами шаблонов и использованием ResourceUrlProvider.

При динамической загрузке ресурсов, например, с помощью загрузчика модулей JavaScript, переименование файлов не вариант. Вот почему другие стратегии также поддерживаются и могут быть объединены. "fixed" стратегия добавляет строку статической версии в URL без изменения имени файла, как показано в следующем примере:

spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**
spring.resources.chain.strategy.fixed.enabled=true
spring.resources.chain.strategy.fixed.paths=/js/lib/
spring.resources.chain.strategy.fixed.version=v12

В этой конфигурации модули JavaScript, расположенные в "/js/lib/", используют фиксированную стратегию управления версиями ("/v12/js/lib/mymodule.js"), в то время как другие ресурсы по-прежнему используют контентную (<link href="/css/spring-2a2d595e6ed9a0b24f027f2b63b134d6.css"/>).

Страница приветствия

Spring Boot поддерживает как статические, так и шаблонные страницы приветствия. Сначала он ищет файл index.html в настроенных местоположениях статического содержимого. Если он не найден, он ищет index шаблон. Если какой-либо из них найден, он автоматически используется в качестве страницы приветствия приложения.

Пользовательский Favicon

Как и в случае других статических ресурсов, Spring Boot ищет файл favicon.ico в настроенных местоположениях статического содержимого. Если такой файл присутствует, он автоматически используется в качестве значка (favicon) приложения.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки