如何在没有web.xml的情况下将Jersey作为JAX-RS实现?
我已经阅读,从Java EE6 web.xml是可选的。 因此,如果没有web.xml,我怎么能告诉应用服务器使用Jersey作为JAX-RS规范的实现?
 @AlexNevidomsky在他的回答中所写的是正确的,就如何在没有web.xml的情况下实现应用程序configuration而言; 您在Application子类上使用@ApplicationPath注释。 
 @ApplicationPath("/api") public class AppConfig extends Application {} 
有关部署选项的更多信息,请参阅JAX-RS规范 – > 2.3发布 – > 2.3.2 Servlet
那么这是如何实施的…
首先,不是所有的Java EE服务器都使用Jersey。 其实我唯一知道使用泽西的是Glassfish和WebLogic。 JBoss使用Resteasy。 汤姆EE使用CXF。 WebSphere使用Apache Wink。 那些是我能想到的唯一的。
所以我想问题是“服务器如何知道如何加载JAX-RS应用程序?
  Servlet 3.0引入了可插入性机制,它使用了ServletContainerInitializer 。 它是如何工作的,当Server / Servlet容器启动时,它会用名为javax.servlet.ServletContainerInitializer的文件扫描jar的META-INF/services文件夹。 该文件应该包含一个或多个ServletContainerInitializer实现的完全限定名称。 
这个接口只有一个方法
 void onStartup(java.util.Set<java.lang.Class<?>> c, ServletContext ctx) 
  Set<Class<?>将是一个类的列表,符合ServletContainerInitializer实现的@HandlesTypes注解中的标准。 如果你看看泽西岛的实施 
 @HandlesTypes({ Path.class, Provider.class, Application.class, ApplicationPath.class }) public final class JerseyServletContainerInitializer implements ServletContainerInitializer { 
 你应该注意到一些熟悉的注解类,以及Application.class 。 所有这些匹配条件的类在扫描时都会被添加到传递给onStartup方法的Set 。 
如果您扫描其他源代码,您将看到所有这些类的注册都已完成。
Resteasy使用
 @HandlesTypes({Application.class, Path.class, Provider.class}) public class ResteasyServletInitializer implements ServletContainerInitializer 
我不会介入别人。
有些来源你可以看看…
-   JerseyServletContainerInitializer源代码
-   ResteasyServletInitializer源代码
- JAX-RS规格
您不必在web.xml中指定任何内容。 定义一个激活器类:
 @ApplicationPath("/rest") public class _JaxRsActivator extends javax.ws.rs.core.Application { static { //Check some system init on REST init. Config.initCheck(); } }