我正在尝试在我的java应用程序中嵌入jersey服务器,以便我可以通过编程方式控制它的启动/停止等。我找到了this教程,但它适用于jetty 1.18.1(相当旧)。使用最新的泽西版本(2.22.1)似乎在类,名称空间等方面有很多变化,上面教程中显示的示例不起作用。
有人可以指出在自定义应用程序中嵌入最后版本的球衣的方法吗?我相信它是可行的,但我似乎无法找到参考,文档,示例或其他......
答案 0 :(得分:2)
正如Gimby所说,documentation提供了答案。 Jersey可以使用另一个http服务器(例如jetty)嵌入到java应用程序中。在我的例子中,我用这三个步骤构建了一个非常简单的工作示例项目:
在我的pom.xml中添加了相应的maven依赖项。 请注意我只对maersey项目的jetty连接器有maven依赖。我没有对jetty服务器本身的依赖。两者都会导致错误。
def function(a):
_interpolators = {key: (lambda t, k=key: a[k]) for key in a}
def _interpolate(t):
return {key:f(t) for (key,f) in _interpolators.items()}
return _interpolate
构建一个简单的REST资源类
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.22.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-jetty-http</artifactId>
<version>2.22.1</version>
</dependency>
在main函数中添加了启动嵌入式REST服务器的代码
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("testingservice/")
public class TestingRESTService {
@GET
@Path("{requestID}")
@Produces(MediaType.TEXT_PLAIN)
public String get(@PathParam("requestID") String requestID) {
return "\n This is request with ID "+requestID;
}
}
答案 1 :(得分:0)
如果您想将其嵌入到较低级别的API中,以防您选择将网络引擎更改为Netty或Vert.X,则必须转到org.glassfish.jersey.servlet.WebComponent
您需要使用WebConfig
构造它,并且您需要创建自己的HttpServletRequest / Response / Context类的实现。
你可以通过建立自己的ApplicationHandler
来降低自己,但在那个阶段,它几乎是泽西内幕。在WebComponent级别,您仍然拥有servlet API,因此可以更轻松地构建所需的内容。