为什么如果我从 IDE (Eclipse) 启动一个 Spring Boot 应用程序作为 Java 应用程序它可以工作,但是当我从 CMD 启动它时它会出现 Whitelabel 错误?

问题描述 投票:0回答:4
我有 Spring Boot 应用程序,如果我从 IDE 运行主类,一切正常,应用程序运行正常。 如果我使用

mvn clean install

 从命令行启动生成的 JAR(由 
java -jar MyApp-1.0.jar
),应用程序就会启动,但是当我转到 
localhost:8080
 时,它会给我 Whitelabel 错误页面:

Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Fri Aug 02 14:21:00 CEST 2019 There was an unexpected error (type=Not Found, status=404). /WEB-INF/view/home.jsp

这就像 Maven 生成了一个错误的 JAR 文件。 你能帮我吗?

java spring-boot command-line-interface
4个回答
0
投票
在您的 application.properties 中定义前缀和后缀映射,如下所示并尝试

spring.mvc.view.prefix: /WEB-INF/jsps spring.mvc.view.suffix: .jsp in your application.properties

请检查下面的文件以获取映射

https://github.com/hellokoding/springboot-jsp/blob/master/src/main/resources/application.properties

另请检查带有 jsp 的示例 springboot 项目,如下所示

https://hellokoding.com/spring-boot-hello-world-example-with-jsp/

已经在这里回答了

Spring boot应用程序在执行jar文件时显示白色标签错误


0
投票
我最近遇到了类似的问题。我找到了两种选择:

    使用maven命令运行,mvn spring-boot:run。
  1. 使用战争包装。 war 文件似乎工作没有任何问题。 java -jar MyApp-1.0.war
在上述两个选项中,您不需要遵循硬编码文件模式。 希望这对某人有帮助。


0
投票
我知道这是一个旧线程。我遇到了同样的问题,我这样做是为了在尝试不同的组合后使其工作 - 奇怪!

如果您所做的一切都是正确的,但仍然不起作用,请确保在 Application.java 和具有“basePackages”属性的控制器中都有 @ComponentScan 注释。

@ComponentScan(basePackages= {"... specify pkg name ...."})
    

0
投票
如果您的Spring Boot应用程序使用JSP文件和静态资源,我强烈建议使用WAR(Web Archive)打包而不是JAR(Java Archive)打包。这是由于这两种打包格式处理 Web 应用程序资源的方式存在固有差异。

当您将应用程序打包为 JAR 文件时,包含 JSP 文件和其他特定于 Web 的资源的“webapp/WEB-INF”文件夹不会包含在打包的 JAR 中。当将应用程序作为可执行 JAR 运行时,这可能会导致问题,因为嵌入式 servlet 容器将无法找到这些关键资源。

相反,选择 WAR 包装。此打包格式可确保包含 JSP 文件、静态内容和其他 Web 资源的“webapp/WEB-INF”文件夹包含在 WAR 文件中。这对于正常运行至关重要,因为嵌入式 servlet 容器可以正确访问和服务这些资源。

要将应用程序构建为 WAR 包,只需在项目的 pom.xml 文件中包含以下行:

Like this(之后就可以按照JAR打包的方式进行打包了)

通过进行此更改,您将确保您的 WAR 包包含正确 Web 应用程序部署所需的所有组件。

想要更深入地了解这些打包格式及其含义,可以参考Spring Boot官方文档:

Spring Boot - 静态内容

Spring Boot - Jar 文件中 JSP 支持的限制

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