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