为什么JAX-RS@ApplicationPath不能在Tomcat中工作

为什么JAX-RS@ApplicationPath不能在Tomcat中工作,tomcat,jax-rs,Tomcat,Jax Rs,我刚刚启动了一个IntellijJAX-RS项目,但在尝试运行时,我得到了一个404到样板代码提供的“/api/hello world” HelloServlet在Tomcat10上正常工作,所以我想这可能是配置中Intellij没有覆盖我的东西,我没有关于如何修复它的线索 我试图将servlet部分添加到web.xml(在代码块的末尾),但IDE抱怨: “'com.example.demo.HelloApplication'不可分配给'javax.servlet.servlet,jakarta

我刚刚启动了一个IntellijJAX-RS项目,但在尝试运行时,我得到了一个404到样板代码提供的“/api/hello world”

HelloServlet在Tomcat10上正常工作,所以我想这可能是配置中Intellij没有覆盖我的东西,我没有关于如何修复它的线索

我试图将servlet部分添加到web.xml(在代码块的末尾),但IDE抱怨: “'com.example.demo.HelloApplication'不可分配给'javax.servlet.servlet,jakarta.servlet.servlet'”

我很好奇,因为我用的不是“javax”,而是“jakarta”:

应用程序:

package com.example.demo;
导入jakarta.ws.rs.ApplicationPath;
导入jakarta.ws.rs.core.Application;
@应用程序路径(“/api”)
公共类HelloApplication扩展了应用程序{}
资源:

package com.example.demo;
导入jakarta.ws.rs.GET;
导入jakarta.ws.rs.Path;
进口jakarta.ws.rs.products;
@路径(“/hello world”)
公共类HelloResource{
@得到
@生成(“文本/纯文本”)
公共字符串hello(){
返回“你好,世界!”;
}
}
Servlet(工作)

package com.example.demo;
导入java.io.*;
导入jakarta.servlet.http.*;
导入jakarta.servlet.annotation.*;
@WebServlet(name=“helloServlet”,value=“/hello servlet”)
公共类HelloServlet扩展了HttpServlet{
私有字符串消息;
公共void init(){
message=“你好,世界!”;
}
public void doGet(HttpServletRequest请求、HttpServletResponse响应)引发IOException{
response.setContentType(“text/html”);
//你好
PrintWriter out=response.getWriter();
out.println(“”);
out.println(“+message+”);
out.println(“”);
}
公共空间销毁(){
}
}
pom.xml


4.0.0
com.example
演示
1.0-快照
演示
战争
1.8
1.8
5.7.0
雅加达平台
jakarta.jakartaee-api
9.0.0
假如
org.junit.jupiter
JUnitJupiter api
${junit.version}
测试
org.junit.jupiter
朱尼特木星发动机
${junit.version}
测试
org.apache.maven.plugins
maven战争插件
3.3.0
web.xml


演示
com.example.demo.hello应用程序
演示
/原料药/*

我在javax(Tomcat 9)中尝试了同一个项目,但同样的情况也发生了,因此没有什么好下场。

正如BalusC评论的那样,Tomcat不像Glassfish那样是JakartaEE(JavaEE)应用服务器

您可以使用JAX-RS和CDI支持构建Tomcat:

但是,有一个Tomcat项目已经为您完成了这项工作,而且还有更多:

这是同样受人喜爱的Tomcat+雅加达EE支持

在安装了TomEE Plume之后,我让一切都运转得很好

如果您像我一样对下载什么版本才能使用JAX-RS感到困惑,那么可以从网站上找到一篇有趣的文章来澄清这一点

文章作者说:

TomEE PluME(发音为PluME)帮助 从EclipseGlassFish迁移到ApacheTomee项目。如果你 如果你不是从Glassfish迁移到TomEE,你可以忽略这一点 分配


如果您不是来自Glassfish,您也可以尝试使用TomEE Plus。

警告:Tomcat不是雅加达EE应用服务器。它是一个基本的servlet容器。相关:和。要么使用普通的JEE服务器,要么在Tomcat中手动安装JAX-RS。你是对的。我不知道区别。在您的评论之后,我进行了研究,并且似乎只有在构建JAX-RS模块时才有可能。