当前位置: 首页 > 知识库问答 >
问题:

引导Jersey 2(与Jetty一起)的正确方法是什么?

赫连飞沉
2023-03-14

我已经设法用HK2注入技术实现了Jersey/Jetty的工作设置,但鉴于我发现的大量文档有些令人困惑(有时甚至不一致),我不确定是否遗漏了一些重要的细节。就目前而言,我是这样引导servlet的;

        // Jersey
        ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
        ServletContainer jerseyServletContainer = new ServletContainer(new AppResourceConfig());
        ServletHolder jerseyServletHolder = new ServletHolder(jerseyServletContainer);
        servletContextHandler.setContextPath("/");
        servletContextHandler.addServlet(jerseyServletHolder, "/api/*");

        // Wire up Jetty
        HandlerCollection handlerList = new HandlerCollection();
        handlerList.setHandlers(new Handler[]{ servletContextHandler });
        Server server = new Server(configuration.getInt("Server.Port"));
        server.setHandler(handlerList);
        server.start();
        server.join();

我将我的应用程序资源配置为;

public class AppResourceConfig extends ResourceConfig {
    public AppResourceConfig() {
        register(new AppBinder());
        packages("org.sandbox.resources");
    }
}

我的AppBinder为:

public class AppBinder extends AbstractBinder {
    @Override
    protected void configure() {
        bind(new StringService()).to(StringService.class);
    }
}

这一切都适用于我的简单测试用例,但有几件事我不清楚。泽西文档引用了一个我应该扩展的应用程序类,并使用Injections.addBinding.设置绑定。然而,为此,他们不知何故使用@Inject将ServiceLocator实例放入他们的构造函数中。然后他们似乎根本没有创建Binder?(https://jersey.java.net/documentation/latest/migration.html26.14.1.1。注入自定义对象)。

有人能解释一下我的方法是否正确,或许能告诉我Application和ResourceConfig之间的区别,以及我应该做些什么来保持与框架的意图一致吗?

共有1个答案

郑高驰
2023-03-14

应用程序是 JAX-RS 的一部分,后者是由 Java EE 规范定义的 REST API。泽西岛是该 API 的一个实现。因此,您可以使用标准应用程序来设置泽西岛的 REST 应用程序,如 JAX-RS 所定义。资源配置扩展了应用程序,是泽西岛针对特定实现的增强功能。它允许更轻松的设置,例如添加注入或添加要扫描的包,就像您在代码中所做的那样。

链接的留档确实使用了活页夹。没有的例子指的是旧的泽西1. x。我认为其他例子使用了org.glassfish.jersey.internal.inject.Injections类,这是一个不应该使用的内部类(顾名思义)。我不知道为什么他们把它包含在留档中,它认为不应该在那里。也许它曾经是公共API的一部分,或者没有其他方法来完成这个例子。无论如何,最好不要使用那个类。

你的方法看起来不错。如果只提供其他JAX-RS框架(如RestEasy或Apache CFX),那么使用Jersey API的功能而不是将自己限制在纯JAX-RS,会使您的应用程序在容器环境中运行更加困难。如果您不打算支持其他框架,那么可以利用Jersey的优势。

 类似资料:
  • 早上好,当对同一个json文件中定义的内容使用$ref时,我在使用ajv和json-schema时遇到了一个问题。我怀疑问题出在ids的使用上,我会更理解这一点。 我的文件是: definitions.json json

  • 或 上课。但是,当我想要将元素对齐到右下角时,我需要做什么呢?引导标记之后最常见的方法是什么?

  • 我们使用Azure存储队列作为传输在Azure辅助角色中运行NServiceBus 4.6。 我们很乐意使用默认的Azure表存储持久器存储NServiceBus相关数据(sagas、订阅等)。 不过,我们希望将业务实体存储在RavenDB中,以利用查询和Raven的其他功能。 鉴于Azure缺乏事务支持,在我们的处理程序中配置NServiceBus和使用Raven的/的最佳方式是什么。我们希望确

  • 问题内容: 这个问题应该比关于更多。 我有一个子类(在python 2.7中,numpy 1.6.2),并且我发现在对象时未列出的字段名称(因此,ipython的自动完成功能无效)。 为了修复它,我尝试在子类中重写,如下所示: 结果是:。(我发现这里实际上应该在python 3.3中工作…) 作为一种解决方法,我尝试了: 据我所知,这是可行的,但当然并不优雅。 问题: 后一种解决方案对我而言是否正

  • 问题内容: 我试图将一个组件的引用传递给另一个组件。由于不推荐使用字符串引用,因此我使用了回调引用。 所以我有类似的东西: 问题是,每当我尝试访问内部时,我都会得到。 我什至尝试过: 似乎问题在于,当创建prop时,ref并不存在,因为它是在安装后创建的。但是我不知道如何“刷新”道具以获取对已安装组件的参考。 那么将ref传递到另一个组件的正确方法是什么? 编辑 一些用户建议将该逻辑封装在一个更高

  • 问题内容: 即使在使用Java Swing一年以上之后,对我来说,它仍然像魔术一样。如何正确使用BufferStrategy,尤其是方法? 我想添加一个JFrame和一个Canvas,然后进行绘制。我还希望能够调整()画布的大小。每次我调整Canvas的大小时,似乎都会被浪费掉,或者变得毫无用处,因为在上使用并没有真正做任何事情。另外,它具有怪异的不确定性行为,我不知道如何正确同步它。 这就是我的