Spring MVC Невозможно настроить путь просмотров - PullRequest
0 голосов
/ 30 марта 2020

У меня есть проект, который использует 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 страниц, чтобы сделать их дружественными для поисковых систем, но я это выясню по пути.

Вот скриншот макета моего проекта

enter image description here

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