找不到JSP文件可能是春天的一个错误

Posted

技术标签:

【中文标题】找不到JSP文件可能是春天的一个错误【英文标题】:Could JSP file not found be a bug in spring 【发布时间】:2021-03-29 16:30:50 【问题描述】:

我的应用程序中遵循了spring boot的官方文件和包结构。但我仍然收到白标签页面错误。大多数答案和建议都不能解决这个问题。

这可能是 Spring Boot 中的错误吗?

下面是我的代码以及文件和文件夹的排列结构。

Application.java

@SpringBootApplication
 public class Application 

  public static void main(String[] args) 
    SpringApplication.run(Application.class, args);
    

 

控制器

 @Controller
 public class UserController   
       @RequestMapping("/")
       public String index(HttpServletRequest request)
       request.setAttribute("mode", "MODE_HOME");
       return  "homepage";
 

homepage.jsp

 <body>
 <c:choose>
 <c:when test="$mode=='MODE_HOME'">
 <h1>Mambo, This is home page </h1>
 </c:when> </c:choose>
 </body>

application.properties

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

pom.xml

  <?xml version="1.0" encoding="UTF-8"?>
  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.4.1</version>
  <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.samaritan</groupId>
  <artifactId>samaritanweb</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>samaritanweb</name>
  <description>Demo project for Spring Boot</description>

  <properties>
    <java.version>11</java.version>
  </properties>
  
  <dependencies>
  <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <scope>runtime</scope>
  <optional>true</optional>
  </dependency>
  <dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <optional>true</optional>
  </dependency>
  <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <scope>provided</scope>
  </dependency>
  <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
  </dependency>

  <dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>  
  <scope>provided</scope>     
  </dependency>

  <dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
  </dependency>
  </dependencies>

  <build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
    </build>

   </project>

注意:使用 Visual Studio Code 版本 1.52.1

【问题讨论】:

一切皆有可能,但明智的做法是假设它不是 Spring 错误,除非您有明确的证据。 @StephenC 先生,您是对的,只是我已经尝试通过不同帖子中的几乎所有答案和建议来解决它,但没有成功。有点卡住了 @StephenC 认为您可能有一个项目工作正常,但在重新启动系统并再次启动应用程序后,您会看到 WhiteLabel 错误页面 【参考方案1】:

您需要指定控制器接收哪些请求(GET、POST 等)。

@Controller
 public class UserController   
       @RequestMapping("/", method = RequestMethod.GET)
       public String index(HttpServletRequest request)
       request.setAttribute("mode", "MODE_HOME");
       return  "homepage";
 

 @Controller
 public class UserController   
       @GetMapping("/")
       public String index(HttpServletRequest request)
       request.setAttribute("mode", "MODE_HOME");
       return  "homepage";
 

【讨论】:

上述两种方法都试过了,还是一样的错误【参考方案2】:

试着像这样改变你的主类

@SpringBootApplication
public class Application extends SpringBootServletInitializer 

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) 
        return builder.sources(Application.class);
    

    public static void main(String[] args) 
        SpringApplication.run(Application.class, args);
    


【讨论】:

我已尝试按照您的建议更改主类,但仍然出现相同的错误 我已经复制了您的示例并且它有效。但是你的 pom.xml 中也有一个错误:用 替换最后一个 标记 同样在我这边它曾经工作正常,但在我重新启动我的电脑并午餐应用程序后,错误弹出。抱歉 是输入错误。已更改。 这很奇怪。您是否检查处理请求的进程(使用 jps 或 ps aux)?也许有另一个tomcat实例,旧版本的应用程序从您的电脑开始?尝试在 application.properties 中添加 server.port=9999(例如)并检查 localhost:9999。你也可以清理你的 Maven 本地存储库 如何使用 VSCode 清理 maven 本地仓库?

以上是关于找不到JSP文件可能是春天的一个错误的主要内容,如果未能解决你的问题,请参考以下文章

找不到 Spring MVC 控制器 jsp 文件

spring boot找不到jsp视图

编译java文件时提示找不到包

Spring Boot JSP 404:找不到页面

tomcat能找到index.jsp,找不到其他jsp网页。

springboot 整合 web 项目找不到 jsp 文件