在Tomcat 8上实施Jersey 2.x的最佳方法是什么?
我有Web容器和Tomcat的知识,可以部署静态和动态网站。 但我是REST和泽西新手。 我已阅读2.6用户指南,查看了许多网站和YouTubevideo。 在1.x Jersey上似乎有很多信息,但在2.x上没有太多信息我可以在我的环境中使用1.18,但似乎无法使任何部署模型适用于2.x. 我在2.x中注意到有一个应用程序部署模型。 所以我想我会问一些非常通用的问题来开始这个。
- 哪种部署模型最适合通过Tomcat 8进行基本REST服务?为什么?
- 我看到使用2.6部署的.jars与使用1.18部署的.jars有很大不同。 有没有一种简单的方法可以告诉您基本的Tomcat安装需要哪些jar子?
- 如果你有一个基本的例子,那就太好了。
谢谢
以下是我希望相对完整的解决方案。
你没有提到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/*