【问题标题】:Jersey JAX-RS ResourceConfig with TomcatJersey JAX-RS ResourceConfig 与 Tomcat
【发布时间】:2017-07-02 20:18:33
【问题描述】:

我有一个可以运行的基本 REST Web 服务,但我确实有一个问题。这是一个简短的代码片段。

package com.my.app;
import org.glassfish.jersey.server.ResourceConfig;
import javax.ws.rs.ApplicationPath;

@ApplicationPath("api")
public class RestApplication extends ResourceConfig {
    RestApplication() {
        packages("com.my.app");
    }
}

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>The name of my service!</display-name>
</web-app>

我一直在寻找 https://jersey.java.net/apidocs/2.25.1/jersey/org/glassfish/jersey/server/ResourceConfig.html 的 Jersey 文档,但我还没有找到设置 Tomcat 显示名称或版本的方法。现在我可以在 web.xml 中设置这些参数并且效果很好,但我宁愿在我的类中设置扩展 ResourceConfig 并完全摆脱 web.xml 的参数。这是可能的还是我应该坚持使用 web.xml?任何建议将不胜感激。

【问题讨论】:

    标签: java web-services jersey jax-rs tomcat8


    【解决方案1】:

    ResourceConfig 类并非旨在替换 web.xml 文件。

    ResourceConfig 类有什么用?

    ResourceConfig 类是 Jersey API 的一部分,它提供了简化 JAX-RS 组件注册的高级功能,例如在提供的类路径或一组包名称中扫描根资源和提供者类。

    它从 JAX-RS API 扩展了 Application 类。有关Application 类的更多详细信息,请参阅此answer

    web.xml 文件的用途是什么?

    web.xml 是基于 servlet 容器的应用程序的部署描述符。它指示 servlet 容器必须加载哪些类(servlet、过滤器和侦听器),应在上下文中设置哪些属性等。

    从 Servlet 3.0 开始,您甚至不需要 web.xml 来进行简单的部署。大多数配置,例如注册 servlet、过滤器和侦听器都可以通过annotations 完成。

    但是,如果您想设置 Web 应用程序的 &lt;display-name&gt;web.xml 仍然是必需的。到目前为止,还没有可以替换该标签的注释。

    你的web.xml 会是什么样子

    Apache Tomcat 8 与 Servlet 3.1 规范兼容(查看Tomcat documentation 了解更多详情),因此您的web.xml 可以是:

    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
        <display-name>Web Application Name</display-name>
    </web-app>
    

    【讨论】:

    • 非常感谢您提供的链接。我正在挖掘文档,认为我可以使用 ResourceConfig 删除 web.xml。是否可以在没有 web.xml 的情况下设置 Tomcat 参数?
    • @cbohannon 你仍然需要 web.xml 来达到这个目的。
    • 明白,卡西奥。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 2012-04-20
    • 1970-01-01
    • 2014-01-24
    • 2016-12-02
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    相关资源
    最近更新 更多