Как добавить статический веб-контент в Spring -boot

Я пытаюсь добавить статический веб-контент на сервер spring -boot, используя info здесь

Я попытался добавить файлы .js и .css, которые мне нужны в нескольких папках, о которых говорила предыдущая ссылка, но она не работает:

/META-INF/resources/
/resources/

Примечание. Я не создавал папки /static/ и /public/, потому что я не знаю абсолютный Путь в моем проекте.

Я также добавил метод addResourceHandlers:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern("/webjars/**")) {
    registry.addResourceHandler("/webjars/**").addResourceLocations(
            "classpath:/META-INF/resources/webjars/");
}
if (!registry.hasMappingForPattern("/**")) {
    registry.addResourceHandler("/**").addResourceLocations(
            RESOURCE_LOCATIONS);
}
}

И ссылка в файле HTML выглядит следующим образом:

<script src="bootstrap-switch.js"></script> Любая идея, как я могу это исправить?

ОБНОВЛЕНО

enter image description here

ОБНОВЛЕНО 2: попытка @jfcorugedo

Не работает. Посмотрите, что вы говорили?

enter image description here

ОБНОВЛЕНО 3: попытка @jfcorugedo, второй совет:

enter image description here

Ответ 1

Я думаю, вам нужно получить доступ к статическому содержимому, используя mydomain/<context>/<resource type>/resource

Например:

http://mydomain/app/js/test.js
http://mydomain/app/img/test.jpg

Вы можете писать свои ресурсы с помощью контекста приложения или просто используя относительный путь:

<script src="js/bootstrap-switch.js"></script>

или

<script src="/<myapp>/js/bootstrap-switch.js"></script>

Но если вы используете bootstrap с webjar, вы должны написать

<script src="/<myapp>/webjars/bootstrap/<version>/js/bootstrap-switch.js"></script>

Существует проект на github для иллюстрации этого https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-static

UPDATE 1

Я создал тестовый проект со следующей структурой:

enter image description here

Я мог бы получить доступ к style.css на http://localhost:8080/css/style.css

Вы можете использовать http://start.spring.io/, чтобы помочь вам создать новые проекты

Другим вариантом является использование Spring Tool Suite или IntelliJ IDEA. Они могут помочь вам создать новый проект с правильными настройками (как в предыдущей ссылке).

Ответ 2

Вам не нужно добавлять метод addResourceHandlers, Spring boot выполняет этот метод в своем собственном коде.

Не помещайте файлы в папку webapp.

Вам нужно только поместить файлы в один из этих каталогов:

/META-INF/resources/ /resources/ /static /public

Например, если вы хотите загрузить файл js/bootstrap-switch.js, этот файл должен находиться в одной из следующих папок:

/META-INF/resources/js/bootstrap-switch.js /resources/js/bootstrap-switch.js ...

Я создал папку META-INF/resources/js внутри моих/src/main/ресурсов, и все работает:

folder hierarchy in my test project

Я поставил файл test.js внутри этой папки, и, когда я набираю URL http://localhost:8080/js/test.js, данное приложение мне JS файл.

Вы уверены, что создаете эту же иерархию папок?

Ответ 4

Глядя на класс org.springframework.boot.autoconfigure.web.ResourceProperties, вы можете увидеть эту строку кода:

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};

Для обслуживания статического содержимого доступны каталоги /META-INF/resources/, /resources/, static/ и public/.

Итак, вы можете создать каталог static/ или public/ в директории resources/ и разместить там статическое содержимое. И они будут доступны: http://localhost:8080/your-file.ext. (предполагая, что server.port равен 8080)

Вы можете настроить эти каталоги с помощью spring.resources.static-locations в application.properties.

Например, предоставив эту конфигурацию:

spring.resources.static-locations=classpath:/custom/

Вы можете использовать custom/ папку под resources/ для обслуживания статических файлов и доступа к ним через указанный выше URL.

Ответ 5

Создайте папку в любом месте с/статической папкой в ​​корне. Это может быть где угодно на рабочем месте. Пример C:\mywebapp\static. Добавьте C:\mywebapp в путь пути выполнения, или если вы используете Intellij/Eclipse, добавьте папку C:\mywebapp в качестве библиотеки.

Это отличается от добавления вашего статического html в качестве исходной папки, что приведет к его копированию в папку выходного класса с каждой сборкой. Если у вас есть большое приложение для веб-приложений или одностраничное приложение, использующее angular или sencha, это боль. Вместо этого добавьте папку C:\mywebapp в виде папки библиотеки или папки времени пути выполнения.

Преимущество этого заключается в том, что ваш javascript-код будет работать на том же хосте/порте, что и ваши службы загрузки w9260, ajax и т.д., без необходимости иметь дело с jsonp или cors.