JSP 未在 Spring Boot 版本 2.7.15 上呈现

问题描述 投票:0回答:1

我有一个在 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).

我看到有很多关于这个问题的帖子,但是那里提供的所有解决方案似乎都不能解决我的问题,任何关于如何应对这个问题的想法或帮助都非常重要

java spring spring-boot spring-mvc jsp
1个回答
0
投票

我注意到你说你的配置有

spring.mvc.view.prefix=/WEB-INF/jsp/

和:

test.jsp 位于 src/main/webapp/WEB_INF/jsp 下

我注意到配置中的连字符和文件夹中的下划线。这可能会导致这样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.