Jersey JAX-RS ResourceConfig Tomcat

Jersey JAX-RS ResourceConfig with Tomcat

我有一个可用的基本 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 中设置这些参数并且工作正常,但我宁愿在我的 class 中设置扩展 ResourceConfig 的参数并完全摆脱 web.xml。这是可能的还是我应该坚持使用 web.xml?任何建议将不胜感激。

ResourceConfig class 的目的不是替换 web.xml 文件。

ResourceConfig class 有什么用?

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

它扩展了 Application class from the JAX-RS API. For more details about the Application class, refer to this

web.xml 文件有什么用?

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

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

但是,如果您想设置您的网络应用程序的 <display-name>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>