Spring-bot:Spring-bot web应用程序(Rest API)WAR文件未运行



我已经关注了多个视频和文档,为spring-boot web应用程序创建了WAR文件。当我从eclipes将应用程序作为JAVA应用程序运行时,它可以正常工作,但如果我将WAR文件复制到tomcat的webapps文件夹中,它就不工作了。

这是pom文件

<?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.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.demo</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
<start-class>com.demo.DemoApplication</start-class>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</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>
</dependencies>
<build>
<finalName>demo</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

这是java文件

package com.demo;
import org.springframework.boot.Banner;
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;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DemoApplication.class);
}
public static void main(String[] args) {
System.out.println("Starting app");
SpringApplication.run(DemoApplication.class, args);
System.out.println("Waiting in app");
}
@GetMapping("/test")
@ResponseBody
public String test() {
System.out.println("reached REST API");
return "App running";
}
}

我使用的url localhost:8080/demo/test,但它总是给我错误404。我的System.out.println在从eclipse作为Java应用程序运行程序时进行了日志记录,但在tomcat中部署WAR时没有进行这些日志记录,尽管catalina.out显示demo.WAR已成功部署,并且我看到demo目录是按预期用我的DemoApplication类创建的。

我还没有创建任何web.xml。在项目创建过程中,我选择了wizard"springstarter项目;然后在spring-starter项目依赖性中,我只选择了";弹簧网";。

我错过了什么?任何帮助都将不胜感激。

Catalina.out

2021年4月4日23:16:50.745 INFO[min]org.apache.catalina.startup.VersionLoggerListener.log服务器版本名:apache Tomcat/10.0.42021年4月4日23:16:50.749信息[min]org.apache.catalina.startup.VersionLoggerListener.log服务器建成时间:2021年3月5日11:07:15 UTC2021年4月4日23:16:50.749信息[min]org.apache.catalina.startup.VersionLoggerListener.log服务器版本号:10.0.0.02021年4月4日23:16:50.749信息[min]org.apache.catalina.startup.VersionLoggerListener.log操作系统名称:Windows 102021年4月4日23:16:50.760信息[min]org.apache.catalina.startup.VersionLoggerListener.log操作系统版本:10.02021年4月4日23:16:50.760信息[min]org.apache.catalina.startup.VersionLoggerListener.log体系结构:amd642021年4月4日23:16:50.760信息[min]org.apache.catalina.startup.VersionLoggerListener.log Java主页:C:\Program Files\RedHat\Java-1.8.0-openjdk-1.8.0.282-1\jre2021年4月4日23:16:50.760信息[min]org.apache.catalina.startup.VersionLoggerListener.log JVM版本:1.8.0_282-b082021年4月4日23:16:50.760信息[主]org.apache.catalina.startup.VersionLoggerListener.log JVM供应商:Red Hat,股份有限公司。2021年4月4日23:16:50.760信息[min]org.apache.catalina.startup.VersionLoggerListener.log catalina_BASE:C:\Program Files\apache Software Foundation\Tomcat 10.02021年4月4日23:16:50.760信息[min]org.apache.catalina.startup.VersionLoggerListener.log catalina_HOME:C:\Program Files\apache Software Foundation\Tomcat 10.02021年4月4日23:16:50.761 INFO[min]org.apache.catalina.startup.VersionLoggerListener.log命令行参数:-Dcatalina.home=C:\Program Files\apache Software Foundation\Tomcat 10.02021年4月4日23:16:50.761 INFO[min]org.apache.catalina.startup.VersionLoggerListener.log命令行参数:-Dcatalina.base=C:\Program Files\apache Software Foundation\Tomcat 10.02021年4月4日23:16:50.762 INFO[min]org.apache.catalina.startup.VersionLoggerListener.log命令行参数:-Djava.io.tmpdir=C:\Program Files\apache Software Foundation\Tomcat 10.0\temp2021年4月4日23:16:50.762 INFO[min]org.apache.catalina.startup.VersionLoggerListener.log命令行参数:-Djava.util.logging.manager=org.apache.joli.ClassLoaderLogManager2021年4月4日23:16:50.762 INFO[min]org.apache.catalina.startup.VersionLoggerListener.log命令行参数:-Djava.util.logging.config.file=C:\Program Files\apache Software Foundation\Tomcat 10.0\conf\logging.properties2021年4月4日23:16:50.762 INFO[min]org.apache.catalina.startup.VersionLoggerListener.log命令行参数:退出2021年4月4日23:16:50.762 INFO[min]org.apache.catalina.startup.VersionLoggerListener.log命令行参数:abort2021年4月4日23:16:50.762 INFO[min]org.apache.catalina.startup.VersionLoggerListener.log命令行参数:-Xms128m2021年4月4日23:16:50.762 INFO[min]org.apache.catalina.startup.VersionLoggerListener.log命令行参数:-Xmx256m2021年4月4日23:16:50.766信息[min]org.apache.catalina.core.AprLifecycleListener.lifecycleEvent在java.library.path上找不到允许使用OpenSSL的apache Tomcat本机库:[C:\Program Files\apache Software Foundation\Tomcat 10.0\bin;C:\WINDOWS\Sun\java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\RedHat\java-1.8.0-openjdk-1.8.0.282-1\jre\bin;C:\Program Files(x86)\RSA SecurID通用令牌;C: \Program Files\RSA SecurID Token Common;C: \WINDOWS\system32;C: \WINDOWS;C: \WINDOWS\System32\Wbem;C: \WINDOWS\System32\WindowsPowerShell \v1.0;C: \WINDOWS\System32\OpenSSH;C: \Program Files\1E\NomadBranch;C: \Program Files\Dell\Dell Data Protection \ Encryption;C: \Program Files\RedHat\java-11-openjdk-11.0.10-1\bin;C: \Program Files\RedHat\java-1.8.0-openjdk-1.8.0.282-1\bin;C: \Program Files\RedHat\java-1.8.0-openjdk-1.8.0.282-1\jre\bin;C: \WINDOWS\ServiceProfiles\LocalService\AppData\Local\Microsoft\WindowsApps;.]2021年4月4日23:16:51.036信息[main]org.apache.coyote.AbstractProtocol.init正在初始化ProtocolHandler["http-nio-8080"]2021年4月4日23:16:51.051信息[min]org.apache.catalina.startup.catalina.load服务器初始化时间为[450]毫秒2021年4月4日23:16:51.075信息[main]org.apache.catalina.core.StandardService.start内部启动服务[catalina]2021年4月4日23:16:51.076信息[min]org.apache.catalina.core.StandardEngine.start内部启动Servlet引擎:[apache Tomcat/10.0.4]2021年4月4日23:16:51.098 INFO[min]org.apache.catalina.startup.HostConfig.deployWAR部署web应用程序存档[C:\Program Files\apache Software Foundation\Tomcat 10.0\webapps\testp.war]2021年4月4日23:16:53.234信息[main]org.apache.jasper.servlet.TldScanner.scanJars至少扫描了一个JAR的TLD,但其中不包含TLD。为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的JAR的完整列表。在扫描过程中跳过不需要的JAR可以缩短启动时间和JSP编译时间。2021年4月4日23:16:54.302警告[main]org.apache.catalina.util.SessionIdGeneratorBase.createSecureRondom使用[SHA1PRNG]创建用于会话ID生成的SecureRandom实例花费了[1040]毫秒。2021年4月4日23:16:54.318信息[min]org.apache.catalina.startup.HostConfig.deployWAR web应用程序档案[C:\Program Files\apache Software Foundation\Tomcat 10.0\webapps\demo.war]的部署已在[3220]毫秒内完成2021年4月4日23:16:54.319信息[min]org.apache.catalina.startup.HostConfig.deployDirectory部署web应用程序目录[C:\Program Files\apache Software Foundation\Tomcat 10.0\webapps\manager]2021年4月4日23:16:54.365 INFO[min]org.apache.catalina.startup.HostConfig.deployDirectory web应用程序目录[C:\Program Files\apache Software Foundation\Tomcat 10.0\webapps\manager]的部署已在[46]毫秒内完成2021年4月4日23:16:54.365信息[min]org.apache.catalina.startup.HostConfig.deployDirectory部署web应用程序目录[C:\Program Files\apache Software Foundation\Tomcat 10.0\webapps\ROOT]2021年4月4日23:16:54.398 INFO[min]org.apache.catalina.startup.HostConfig.deployDirectory web应用程序目录[C:\Program Files\apache Software Foundation\Tomcat 10.0\webapps\ROOT]的部署已在[33]毫秒内完成2021年4月4日23:16:54.401信息[main]org.apache.coyote.AbstractProtocol.start启动ProtocolHandler["http-nio-8080"]2021年4月4日23:16:54.415信息[main]org.apache.catalina.startup.catalina.start服务器在[3363]毫秒内启动

localhost访问日志0:0:0:0:0:1-[04/Apr/2021:23:19:25+0530]";GET/demo/testHTTP/1.1";404 764

tomcat10 stdout2021-04-04 23:16:50 Apache Commons Daemon procrun stdout已初始化。

tomcat10 stderr最后几行

2021年4月4日23:16:54.365信息[min]org.apache.catalina.startup.HostConfig.deployDirectory部署web应用程序目录[C:\Program Files\apache Software Foundation\Tomcat 10.0\webapps\ROOT]2021年4月4日23:16:54.398 INFO[min]org.apache.catalina.startup.HostConfig.deployDirectory web应用程序目录[C:\Program Files\apache Software Foundation\Tomcat 10.0\webapps\ROOT]的部署已在[33]毫秒内完成2021年4月4日23:16:54.401信息[main]org.apache.coyote.AbstractProtocol.start启动ProtocolHandler["http-nio-8080"]2021年4月4日23:16:54.415信息[main]org.apache.catalina.startup.catalina.start服务器在[3363]毫秒内启动

我也遇到了同样的问题。

Tomcat 10从Java EE更改为Jakarta EE。Spring还不支持Jakarta EE。计划在今年年底为Spring6和SpringBoot3提供雅加达EE支持。

你有两种方法。

  1. 将war部署到webapps-javaee目录,而不是webapps目录。Tomcat将使用转换工具自动对其进行转换。我用这个解决了同样的问题
  2. 使用支持Java EE的Tomcat 9

以下是Tomcat 10中的一些更改。

Apache Tomcat项目自豪地宣布Apache Tomcat 10.0.13版本的发布。此版本实现了Jakarta EE 9平台的一部分规范。

在Tomcat9及更早版本上运行的应用程序将不会在Tomcat10上运行而不进行更改。为Tomcat 9及更早版本设计的基于Java EE的应用程序可以放在$CATALINA_BASE/webapps-javaee目录中,Tomcat将自动将它们转换为Jakarta EE并将它们复制到webapps目录中。此转换是使用Apache Tomcat迁移工具Jakarta EE工具执行的,该工具也可以单独下载以供离线使用。

此版本中的显著变化是:

通过在Java 17中孵化的Panama API对OpenSSL的实验性支持,并支持OpenSSL 1.1+添加对web应用程序资源的自定义缓存策略的支持。这个初始实现允许控制是否缓存资源。提高JNDIRealm对获取连接时发生的异常的鲁棒性。Tomcat10更改日志中提供了这些更改以及所有其他更改的全部详细信息。

将tomcat 10替换为tomcat 9后,问题得到了解决。

是的,用tomcat 9替换tomcat 10后问题得到了解决。

最新更新