如何更新示例以使用最新版本Jetty(9.1.0.RC2)和Jersey(2.7)?

我一直试图效仿这个例子 (第一次点击google for jersey + jetty)但运气不好。

根据下面评论者的建议,我决定更新示例以使用最新版本的Jetty(9.1.0.RC2)和Jersey(2.7)。

这是更新的pom,具有更新的依赖项:

 4.0.0 HelloJerseyLatest HelloJerseyLatest 0.0.1-SNAPSHOT  src   maven-compiler-plugin 3.1  1.7 1.7       org.glassfish.jersey.containers jersey-container-servlet-core 2.7   org.eclipse.jetty jetty-server 9.1.0.RC2   org.eclipse.jetty jetty-servlet 9.1.0.RC2    

首先要注意的是Jersey包已经从com.sun.jersey.spi.*更改为org.glassfish.jersey.* 。 因此,主要方法也需要更改:

 package example.server; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; //import com.sun.jersey.spi.container.servlet.ServletContainer; import org.glassfish.jersey.servlet.ServletContainer; public class MinimalServerRest { public static void main(String[] args) throws Exception { ServletHolder sh = new ServletHolder(ServletContainer.class); // these initialization strings will need to be updated. sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass", "com.sun.jersey.api.core.PackagesResourceConfig"); sh.setInitParameter("com.sun.jersey.config.property.packages", "rest");//Set the package where the services reside sh.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true"); Server server = new Server(9999); ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS); context.addServlet(sh, "/*"); server.start(); server.join(); } } 

将原始示例代码更新为最新需要进行哪些更改? 我没有web.xml文件。 我需要一个吗?

在此处输入图像描述

我意识到这不是你给工作的例子(你的示例链接被破坏) – 我不太了解泽西1,并且试图升级其他人的项目很困难。 当你有另一个问题要求一个HelloWorld示例时,我认为你只需要一些东西让你自己去使用Jersey&Jetty。

所以这里你去 – 两个例子,一个使用JettyHttpContainerFactory ,另一个使用Jersey ServletContainer

首先是泽西岛资源 – 非常简单。 这将使用"test"路径设置类,使用hello路径设置一个方法,接受以纯文本forms生成“Hello World”的GET

 @Path("/test") public class TestResource { @GET @Path("hello") @Produces(MediaType.TEXT_PLAIN) public String hello() { return "Hello World"; } } 

接下来是服务器类:

 public class ExampleServer { public static void main(String[] args) { URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build(); ResourceConfig config = new ResourceConfig(TestResource.class); Server server = JettyHttpContainerFactory.createServer(baseUri, config); } } 

最后是pom依赖项(注意这两个例子都有依赖关系)。

    org.eclipse.jetty jetty-server 9.1.3.v20140225   org.eclipse.jetty jetty-servlet 9.1.3.v20140225   org.glassfish.jersey.core jersey-server 2.7   org.glassfish.jersey.containers jersey-container-servlet-core 2.7   org.glassfish.jersey.containers jersey-container-jetty-http 2.7   org.glassfish.jersey.media jersey-media-moxy 2.7    

另请参阅https://jersey.java.net/apidocs/2.7/jersey/javax/ws/rs/core/Feature.html以了解function – 通过在类路径中包含Moxy,Jersey将自动注册MoxyJSONFeature。 如果您更喜欢使用Jackson,则需要手动注册JacksonFeature以及依赖项。 您可以在注册资源的同一初始化参数中注册任何function(以逗号分隔)

如果您希望配置为servlet,请将其用作ExampleServer代码

 public class ExampleServer { public static void main(String[] args) throws Exception { Server server = new Server(9998); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); server.setHandler(context); ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*"); jerseyServlet.setInitOrder(0); /*This parameter tells the Jersey Servlet which of your REST resources to load. In this example we're adding the TestResource class. Jersey will then invoke this class for requests coming into paths denoted by the @Path parameter within the TestResource class. If you have multiple classes, you can either list them all comma separated, of use "jersey.config.server.provider.packages" and list the package name instead */ jerseyServlet.setInitParameter("jersey.config.server.provider.classnames", "foo.bar.TestResource"); server.start(); server.join(); } } 

请注意servlet版本,我正在定义资源的类名。 如果你有一些,最好使用jersey.config.server.provider.packages提供包名

希望这可以帮助。 如果您有任何问题,请告诉我。