gpt4 book ai didi

java - Spring Boot 2.1.2在.yml mvc配置中使用类路径

转载 作者:行者123 更新时间:2023-12-03 05:39:13 25 4
gpt4 key购买 nike

陷入这个奇怪的问题,我无法确定原因。从Spring MVC迁移到Spring Boot 2,并希望继续使用.jsp View 。想要将.jsp View 存储在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

最低配置:

Spring Boot 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'
}

更新:

我想这与tomcat有关。例如 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重命名为viewt文件为 .html-它们已加载。 (但是,我不想重写很多 .jsp逻辑)

最佳答案

您的以下配置是问题

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

如下更新 View 资源处理程序配置。
registry.addResourceHandler("/view/**").addResourceLocations("classpath:static/view/");

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

确保将所有jsp文件都放在 /resources/templates/view/ directoy中,而不是 /static/view

它适用于 .html,因为我认为当相关jSTL无法找到 View 时,Spring Boot确实回退到了.html解析器。

关于java - Spring Boot 2.1.2在.yml mvc配置中使用类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54238781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com