Как добавить статический веб-контент в 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 файл.
Вы уверены, что создаете эту же иерархию папок?
Ответ 3
Хороший пример для статического контента может помочь вам.
Ссылка: - https://www.mkyong.com/spring-boot/spring-boot-hello-world-example-jsp/
Ответ 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.