【问题标题】:JAX-RS Default ServletJAX-RS 默认 Servlet
【发布时间】:2025-12-31 01:35:12
【问题描述】:

我正在开发一个 REST 应用程序。我使用 Websphere 8.5 和 Java EE 6。

我尝试使用 RAD 创建一个 REST Web 项目,它默认我的 web.xml 使用这个 servlet 配置:

<servlet>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <enabled>true</enabled>
    <async-supported>false</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>
    /jaxrs/*</url-pattern>
</servlet-mapping>

我不想将我的应用程序配置与特定于服务器的设置绑定,因此我想使用 Java EE 6 的“开箱即用”servlet over com.ibm.websphere.jaxrs.server.IBMRestServlet

你能告诉我我应该用什么吗?

【问题讨论】:

  • 您的类路径中是否有任何 JAX_RS 实现(Jersey、RESTEasy、...)?
  • 不,我没有。但是 Java EE 6 教程中关于 JAX-RS 的第一件事是 Jersey 是参考实现……所以尽管它捆绑在 J2EE 中。不是吗?
  • 不,不是,JAXRS的实现需要添加到应用程序中,考虑使用Jersey
  • 好的 .. 在这一点上,我将使用 Jersey,因为它似乎是参考。谢谢!
  • 您应该能够将您的应用程序实现引用为 servlet 以获得相同的效果。

标签: java rest servlets jax-rs web.xml


【解决方案1】:

基本上JAXRS只是一个API,这个API有几种实现,最常用的是Jersey、RESTEasy、CXF、[comparison],查看this

添加您需要考虑的结尾声明这样的 servlet。

<web-app>
    <servlet>
        <servlet-name>MyApplication</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            ...
        </init-param>
    </servlet>
    ...
    <servlet-mapping>
        <servlet-name>MyApplication</servlet-name>
        <url-pattern>/myApp/*</url-pattern>
    </servlet-mapping>
    ...
</web-app>

这将开始加载 Jersey 实现及其组件。考虑阅读此section,具体取决于您使用的 Servlet 版本,它可能会有所不同。

【讨论】: