提供我在这个短片中所做的每一步:https://youtu.be/hbSr8sRYuOk
这里的项目代码:https://github.com/LJonn/restapiHelloWorld
在tomcat上运行本地服务器上的所有内容。
我已经有很长一段时间了,问题出在哪里.我尝试了这样的URL:"http://localhost:8080/api/hello“和"http://localhost:8080/helloworld/api/hello”,并希望其中一个能工作。
运行http://localhost:8080/manager/text/list显示,helloworld.war部署良好,工作正常:
OK - Listed applications for virtual host [localhost]
/:running:0:ROOT
/helloworld:running:0:helloworld
/examples:running:0:examples
/host-manager:running:0:host-manager
/manager:running:0:manager
/docs:running:0:docs
那么,为什么我仍然得到HTTP状态404页呢?我能做些什么来发现这个问题呢?
这些是我的项目的Maven依赖项:
<dependencies>
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-web-api</artifactId>
<version>9.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>由于的评论,似乎从Tomcat更改为TomEE可能解决了这个问题,但现在我遇到了一个问题,.war文件无法部署/启动,可能是某种版本兼容性问题,tomcat管理器GUI在尝试启动.war文件时会出现此错误:
FAIL - Application at context path [/helloworld] could not be started
FAIL - Encountered exception [org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/helloworld]]]从管理器日志来看,它似乎与注释和Java 16有关?
...
Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 60
at org.apache.xbean.asm7.ClassReader.<init>(ClassReader.java:195)
at org.apache.xbean.asm7.ClassReader.<init>(ClassReader.java:176)
at org.apache.xbean.asm7.ClassReader.<init>(ClassReader.java:162)
at org.apache.xbean.asm7.ClassReader.<init>(ClassReader.java:283)
at org.apache.xbean.finder.AnnotationFinder.readClassDef(AnnotationFinder.java:1176)
... 52 more
01-Sep-2021 15:25:02.185 INFO [http-nio-8080-exec-3] org.apache.catalina.core.ApplicationContext.log HTMLManager: list: Listing contexts for virtual host 'localhost'我试图检查Eclipse上的JRE版本,它是16.0.2,在我看来,同样的版本正在tomcat上运行。
发布于 2021-09-01 12:55:50
Tomcat10.0和10.1是而不是完整的JakartaEE9.1应用服务器:您不应该使用jakarta.jakartaee-web-api工件,这意味着运行时支持所有JakartaEE9.1 https://jakarta.ee/specifications/webprofile/技术。
Tomcat没有实现Web配置文件中所需的所有规范。至少还有其他四种产品。关于Jakarta 9.1,请参见这份清单:
您可以在Tomcat网站上找到受支持的技术列表,对于Tomcat 10,它们会转换成这个列表,显示为一个Maven POM片段。
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet.jsp</groupId>
<artifactId>jakarta.servlet.jsp-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.el</groupId>
<artifactId>jakarta.el-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.websocket</groupId>
<artifactId>jakarta.websocket-api</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.security.auth.message</groupId>
<artifactId>jakarta.security.auth.message-api</artifactId>
<version>2.0.0-RC1</version>
<scope>provided</scope>
</dependency>从Servlet3.0开始,可以使用servlet封堵机制添加附加的Jakarta规范。要使用JAX,您需要添加:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>3.0.2</version>
</dependency>或者使用其他JAX实现的等效配置。
https://stackoverflow.com/questions/69000553
复制相似问题