在Tomcat 8上实施Jersey 2.x的最佳方法是什么?

我有Web容器和Tomcat的知识,可以部署静态和动态网站。 但我是REST和泽西新手。 我已阅读2.6用户指南,查看了许多网站和YouTubevideo。 在1.x Jersey上似乎有很多信息,但在2.x上没有太多信息我可以在我的环境中使用1.18,但似乎无法使任何部署模型适用于2.x. 我在2.x中注意到有一个应用程序部署模型。 所以我想我会问一些非常通用的问题来开始这个。

  1. 哪种部署模型最适合通过Tomcat 8进行基本REST服务?为什么?
  2. 我看到使用2.6部署的.jars与使用1.18部署的.jars有很大不同。 有没有一种简单的方法可以告诉您基本的Tomcat安装需要哪些jar子?
  3. 如果你有一个基本的例子,那就太好了。

谢谢

以下是我希望相对完整的解决方案。

你没有提到Maven,所以我会:Maven是你的朋友。

让我们从一个pom开始:

 4.0.0 com.example.groupid stack war 0.0.1-SNAPSHOT http://maven.apache.org   javax.servlet javax.servlet-api 3.1.0 provided   org.glassfish.jersey.containers jersey-container-servlet-core 2.13   org.glassfish.jersey.containers jersey-container-servlet 2.13    stack   org.apache.maven.plugins maven-war-plugin 2.5   org.apache.maven.plugins maven-compiler-plugin 3.2  1.8 1.8     Stack  

就依赖性而言,这可能不是绝对最小值,但它很接近。

但那只是pom。 技巧继续在web.xml和Java类中。

关于那个web.xml ……

这太疯狂了,所以请耐心等待:

   

好吧,也许不那么复杂。

请注意,设置metadata-complete="true"可能会导致Tomcat启动更快。

一对Java类

一个是“申请”,另一个是rest电话。***

其余的电话非常简单:

 package some.package; import javax.ws.rs.GET; import javax.ws.rs.Path; @Path("/hello") public class HelloRest { @GET public String message() { return "Hello, rest!"; } } 

该应用程序如下所示:

 package some.package; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; import some.package.HelloRest; @ApplicationPath("/rest") public class RestApp extends Application { public Set> getClasses() { return new HashSet>(Arrays.asList(HelloRest.class)); } } 

就是这样。 当您导航到http://localhost:8080/stack/rest/hello ,您应该看到文本“Hello,rest!”

稍微利用泽西岛。

RestApp中的getClasses()有点难看。 您可以使用Jersey的ResourceConfig,如Jersey用户指南 ,它看起来像这样:

 public class RestApp extends ResourceConfig { public RestApp() { packages("some.package"); } } 

但我不想使用Maven!

精细。 这些是Eclipse列为Maven依赖项的jar:

  • 的javax.servlet-API-3.1.0.jar
  • 新泽西州容器servlet的核心2.13.jar
  • javax.inject-2.3.0-b10.jar
  • 新泽西州共2.13.jar
  • javax.annotation中,API-1.2.jar
  • 新泽西州番石榴2.13.jar
  • HK2-API-2.3.0-b10.jar
  • HK2-utils的-2.3.0-b10.jar
  • aopalliance-重新包装-2.3.0-b10.jar
  • HK2定位器-2.3.0-b10.jar
  • Javassist进行-3.18.1-GA.jar
  • OSGi的资源定位器1.0.1.jar
  • 新泽西服务器2.13.jar
  • 新泽西州的客户 – 2.13.jar
  • validation-API 1.1.0.Final.jar
  • javax.ws.rs-API-2.0.1.jar
  • 新泽西州容器servlet的2.13.jar

据推测,手动将这些添加到类路径应该可行。 或者使用Maven。

我能够使用Jersey 2.6用户指南中提供的指令将其部署到3.x servlet容器中。 我最终使用了类似于下面项目的东西。 由于URL映射是在.xml中提供的,因此可以省略Application子类中的@ApplicationPath。

    org.example.MyApplication    org.example.MyApplication /myresources/*