Доступ к статическим ресурсам Spring Boot - PullRequest
2 голосов
/ 16 июня 2019

Я работаю с веб-приложением Spring Boot. Я сталкиваюсь с проблемой доступа к статическим ресурсам, таким как CSS, JS и файлы изображений.

Когда у меня нет @Controller classes, запрос статического ресурса успешно обрабатывается SimpleUrlHandlerMapping.

Но после пометки класса @Controller UR статического ресурса направляются только в метод внутри этого класса (через RequestMappingHandlerMapping).

Мне не хватает какой-либо конфигурации? Мой класс контроллера, как показано ниже,

@Controller
public class LoginController {


@RequestMapping(name="/", method = RequestMethod.GET)
public String home() {
    return "index";
}


@RequestMapping(name="login", method = RequestMethod.POST)
public String login() {
    return "home";
}

В моем файле .HTML я ссылаюсь на статические ресурсы, как показано ниже,

<link rel="stylesheet" type="text/css"
href="bootstrap/css/bootstrap.css"
th:href="@{bootstrap/css/bootstrap.css}">
<script src="bootstrap/js/bootstrap.js"
th:src="@{bootstrap/js/bootstrap.js}"></script>
<script src="jquery/jquery-3.4.1.min.js"
th:src="@{jquery/jquery-3.4.1.min.js}"></script>

Структура каталогов, как показано ниже, введите описание изображения здесь

Я пытался добавить ресурс, как показано ниже,

@Configuration
public class XbrlWebApp implements WebMvcConfigurer {

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {

    registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");

}

но это тоже не работает. При обращении к статическому ресурсу с URL-адресом, как

http://localhost:8080/{contextpath}/bootstrap/css/bootstrap.css

возвращает тот же контент html-страницы вместо файла css.

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Это моя ошибка. В методе @RequestMapping

@RequestMapping(name="/", method = RequestMethod.GET)
public String home() {
return "index";
}

Я использовал атрибут «имя». Это должно быть «значение». Поскольку атрибут «value» не найден, независимо от того, что поступил HTTP-запрос GET, все перенаправляется на один и тот же метод, и он возвращает страницу index.html. поэтому статические ресурсы также получают то же самое. Весенние конфигурации работают нормально.

0 голосов
/ 17 июня 2019

Если вы используете JAR-пакет, вам не нужно ничего настраивать, так как Springboot автоматически настраивает обработку статического содержимого, если вы помещаете все в статическую папку. Например, файлы js помещаются в: resources/static/js и css в * 1002.* и реализация по умолчанию должна заняться этим.И вы можете обратиться к нему, используя ссылку как:

<link rel="stylesheet" type="text/css"
href="css/bootstrap.css"
th:href="@{bootstrap/css/bootstrap.css}">
<script src="js/bootstrap.js"
th:src="@{bootstrap/js/bootstrap.js}"></script>

Попробуйте следующую конфигурацию, если вы используете упаковку WAR, для структуры каталогов:

@Configuration
public class XbrlWebApp implements WebMvcConfigurer {

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {

    registry.addResourceHandler("/resources/**")
    .addResourceLocations("/resources/","classpath:/other-resources/","classpath:/static/");

}

и в html-использовании:

<link rel="stylesheet" type="text/css"
href="resources/static/bootstrap/css/bootstrap.css"
th:href="@{bootstrap/css/bootstrap.css}">
<script src="resources/static/bootstrap/js/bootstrap.js"
th:src="@{bootstrap/js/bootstrap.js}"></script>
<script src="jquery/jquery-3.4.1.min.js"
th:src="@{jquery/jquery-3.4.1.min.js}"></script>

Если вы создаете WAR, все ваши ресурсы будут фактически скопированы в папку webapps/resources при сохранении структуры папки. Попробуйте новую конфигурацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...