Spring Boot 2.1.2 с использованием classpath в .yml mvc config - PullRequest
0 голосов
/ 17 января 2019

Попал в эту странную проблему, причину которой я не могу определить. Переходил с весеннего MVC на весенний загрузчик 2 и хочу продолжать использовать .jsp представлений. Хочу хранить .jsp просмотров в resources/templates. Тем не менее, они не загружаются, если помещены туда, но работают, если помещены в /WEB-INF/pages/.

Вопрос - почему это происходит? Мне кажется, что у меня много похожих конфигов, и кажется нормальным хранить их в classpath.

пример журнала ошибок:

2019-01-17 12:02:39,381 WARN  [http-nio-8080-exec-1] resource.ResourceHttpRequestHandler (ResourceHttpRequestHandler.java:642)  - Path represents URL or has "url:" prefix: [classpath:/templates/login.jsp]
2019-01-17 12:02:39,382 DEBUG [http-nio-8080-exec-1] resource.ResourceHttpRequestHandler (ResourceHttpRequestHandler.java:453)  - Resource not found
2019-01-17 12:02:39,383 DEBUG [http-nio-8080-exec-1] servlet.FrameworkServlet (FrameworkServlet.java:1126)  - Exiting from "FORWARD" dispatch, status 404
2019-01-17 12:02:39,384 DEBUG [http-nio-8080-exec-1] servlet.FrameworkServlet (FrameworkServlet.java:1130)  - Completed 404 NOT_FOUN

Минимальная конфигурация:

Пружинный ботинок 2.1.2

application.properties (не работает):

spring.mvc.view.prefix: classpath:/templates/
spring.mvc.view.suffix: .jsp

logging.level.org.springframework.web: DEBUG

application.properties (рабочий):

spring.mvc.view.prefix: /WEB-INF/pages/
spring.mvc.view.suffix: .jsp

logging.level.org.springframework.web: DEBUG

Gradle

plugins {
    id 'war'
    id "io.spring.dependency-management" version "1.0.6.RELEASE"
    id "org.springframework.boot" version "2.1.2.RELEASE"
}

repositories {
    maven {
        url = 'http://repo.maven.apache.org/maven2'
    }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-log4j2'

    compile "javax.servlet:jstl:1.2"
    //providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    providedRuntime "org.apache.tomcat.embed:tomcat-embed-jasper"
}

configurations {
    all {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
}

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

Обновление:

Полагаю, это как-то связано с котом. Например providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' - не загружается .jsp даже с /WEB-INF/pages, пока providedRuntime "org.apache.tomcat.embed:tomcat-embed-jasper" загружается, но только с /WEB-INF/pages

Обновление 2: Так что это как-то связано с расширением tomcat & .jsp. Дополнительная .jsp проблема:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/css/**").addResourceLocations("classpath:static/css/");
    registry.addResourceHandler("/js/**").addResourceLocations("classpath:static/js/");
    registry.addResourceHandler("/fonts/**").addResourceLocations("classpath:static/fonts/");
    registry.addResourceHandler("/view/**").addResourceLocations("classpath:static/view/");
    registry.addResourceHandler("/img/**").addResourceLocations("classpath:static/img/");
}

загружаются все ресурсы, кроме .jsp файлов в /view/. Если я переименую .jsp, файлы просматриваются на .html - они загружены. (однако есть много логики .jsp, которую я не хочу переписывать)

1 Ответ

0 голосов
/ 21 января 2019

Ваша следующая конфигурация является проблемой

spring.mvc.view.prefix: classpath:/templates/

Обновите конфигурацию вашего обработчика ресурсов вида следующим образом.

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

Обновите его до,

registry.addResourceHandler("/view/**").addResourceLocations("classpath:/resources/templates/view/");

Убедитесь, что вы положили все свои файлы JSP в /resources/templates/view/ Directoy вместо /static/view

Это сработало для .html, потому что я думаю, что весенняя загрузка откатилась на .html resolver, когда соответствующий jstl не смог найти представления.

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