У меня есть проект, который использует Spring Boot 2.2.5 (Spring version 5) - вот ссылка на минимальный проект , демонстрирующий мою проблему. Во всех руководствах, которые я следовал, они утверждают, что путь к представлениям может быть настроен либо внутри application.properties
, например:
spring.mvc.view.prefix=/WEB-INF/jsp
spring.mvc.view.suffix=.jsp
, либо внутри WebMvcConfigurationSupport производного класса, например:
@Override
public void configureViewResolvers(final ViewResolverRegistry registry) {
registry.jsp("classpath:/", ".jsp");
}
или как это:
@Override
public void configureViewResolvers(final ViewResolverRegistry registry) {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
registry.viewResolver(resolver);
}
Ничто из этого не работает в моем случае. Spring всегда будет обслуживать файлы jsp из src/main/webapp
и из ниоткуда, несмотря на мою конфигурацию или ее отсутствие. Никакие другие типы файлов не будут обслуживаться из этого каталога, даже HTML. В некоторых руководствах утверждается, что когда не настроен Spring, он будет работать где-то с
src/main/resources/static
src/main/resources/public
src/main/resources/resources
src/main/java/META-INF/resources
. Я пока не вижу этого.
CSS и Javascript файлы будут обслуживаться с src/main/resources
, но только если у меня есть это в моей MVC конфигурации:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/");
}
Настройка этого из application.properties
не работает
spring.resources.static-locations=classpath:/
В связи с этим есть другие специальные имена папок как classpath:
что можно использовать? Я попытался webapp:
, но, похоже, он не расширился
ОБНОВЛЕНИЕ: на мгновение я подумал, что, возможно, виноват подкласс WebMvcConfigurationSupport , поскольку он действует как @ EnableWeb Mvc. Подкласс WebMvcConfigurer привел к следующей ошибке. Размещение @ EnableWeb Mvc решает ее.
An attempt was made to call a method that does not exist. The attempt was made from the following location:
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration.requestMappingHandlerAdapter(WebMvcAutoConfiguration.java:369)
The following method did not exist:
'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration.requestMappingHandlerAdapter(org.springframework.web.accept.ContentNegotiationManager, org.springframework.format.support.FormattingConversionService, org.springframework.validation.Validator)'
Я читаю где-то , что JSP представление не поддерживается внутри встроенных сервлетов. Какая приятная особенность! В любом случае, я не думаю, что это связано с моей проблемой.
Я бы хотел придерживаться JSP и избегать Thymeleaf, так как мой проект основан на React. Я создам MVC страниц, чтобы сделать их дружественными для поисковых систем, но я это выясню по пути.
Вот скриншот макета моего проекта