为什么JAX-RS@ApplicationPath不能在Tomcat中工作
我刚刚启动了一个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”: 应用程序:为什么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
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模块时才有可能。