我有一个在 Java 17 上运行的 Spring Boot 应用程序,打包类型为 war,但它不渲染 jsp 页面。 这是我关于 spring 依赖项的 pom.xml 文件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.7.15</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.15</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>9.0.44</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.7.15</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
MySpringApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class MySpringApplication extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MySpringApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MySpringApplication.class, args);
}
}
TomcatConfig.java
import org.apache.catalina.Context;
import org.apache.tomcat.util.scan.StandardJarScanner;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TomcatConfig {
@Bean
public TomcatServletWebServerFactory tomcatFactory() {
return new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
}
};
}
}
默认控制器.java
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class DefaultController {
@GetMapping(value="/")
public String renderJSP(ModelMap model){
System.out.println("in default controller");
return "test";
}
}
应用程序属性
server.port=8081
#jsp
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
server.servlet.register-default-servlet=true
测试.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>This is a sample test</title>
</head>
<body>
<h1>This is a cool test</h1>
</body>
</html>
文件结构如下:
appplication.properties 文件位于 src/main/java/resources 下
test.jsp位于src/main/webapp/WEB_INF.jsp下
运行应用程序时,我会在控制台中看到此日志
2023-09-07 12:10:54.087 INFO 6080 --- [ main] o.s.b.w.e.t.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path ''
2023-09-07 12:10:54.098 INFO 6080 --- [ main] c.b.w.MySpringApplication : Started MySpringApplication in 5.014 seconds (JVM running for 6.023)
Sep 07, 2023 12:11:34 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-09-07 12:11:34.463 INFO 6080 --- [nio-8081-exec-1] o.s.w.s.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2023-09-07 12:11:34.464 INFO 6080 --- [nio-8081-exec-1] o.s.w.s.DispatcherServlet : Completed initialization in 1 ms
in default controller
我在本地主机上看到了这个
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Thu Sep 07 12:59:15 EEST 2023
There was an unexpected error (type=Not Found, status=404).
我看到有很多关于这个问题的帖子,但是那里提供的所有解决方案似乎都不能解决我的问题,任何关于如何应对这个问题的想法或帮助都非常重要
我注意到你说你的配置有
spring.mvc.view.prefix=/WEB-INF/jsp/
和:
test.jsp 位于 src/main/webapp/WEB_INF/jsp 下
我注意到配置中的连字符和文件夹中的下划线。这可能会导致这样的问题。