gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:09 27 4
gpt4 key购买 nike

我一直在尝试关注这个 example (首先在 google 上搜索 jersey + jetty)但运气不佳。

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

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

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>HelloJerseyLatest</groupId>
<artifactId>HelloJerseyLatest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.7</version>
</dependency>

<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.1.0.RC2</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.1.0.RC2</version>
</dependency>
</dependencies>
</project>

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

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 文件。我需要一个吗?

enter image description here

最佳答案

我意识到这并没有让您提供的示例起作用(您的示例链接已损坏)- 我不太了解 Jersey 1,并且尝试升级其他人的项目很困难。因为你有另一个 question要求一个 HelloWorld 示例,我假设您只需要一些东西来让自己使用 Jersey & Jetty。

现在开始 - 2 个示例,一个使用 JettyHttpContainerFactory,另一个使用 Jersey ServletContainer

首先是 Jersey 资源 - 非常简单。这设置类的路径为 "test",一个方法的路径为 hello,接受生成“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 依赖项(请注意,这两个示例都存在依赖项)。

       <dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.1.3.v20140225</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.1.3.v20140225</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-jetty-http</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.7</version>
</dependency>
<!-- if you want to enable JSON support, include Moxy and Jersey will automatically enable the Feature -->

</dependencies>

另见 https://jersey.java.net/apidocs/2.7/jersey/javax/ws/rs/core/Feature.html为了理解功能——通过在类路径中包含 Moxy,Jersey 将自动注册 MoxyJSONFeature。如果您更愿意使用 Jackson,则需要手动注册 JacksonFeature 以及依赖项。您可以在与注册资源相同的初始参数中注册任何功能(逗号分隔)

如果您更愿意将其配置为 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

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

关于java - 如何更新示例以使用最新版本的 Jetty (9.1.0.RC2) 和 Jersey (2.7)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22738497/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com