Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java应用程序中的嵌入式jersey_Java_Rest_Jersey 2.0 - Fatal编程技术网

java应用程序中的嵌入式jersey

java应用程序中的嵌入式jersey,java,rest,jersey-2.0,Java,Rest,Jersey 2.0,我试图在java应用程序中嵌入jersey服务器,以便可以通过编程控制其启动/停止等。我找到了教程,但它是针对jetty 1.18.1(相当旧)的。在使用最新的jersey版本(2.22.1)时,类、名称空间等似乎发生了很多变化,上面教程中显示的示例不起作用 有人能指出一种在自定义应用程序中嵌入jersey的最新版本的方法吗?我相信这是可行的,但我似乎找不到参考资料、文档、示例或任何东西。正如Gimby所建议的那样,它提供了答案。Jersey可以使用另一个http服务器(如jetty)嵌入到ja

我试图在java应用程序中嵌入jersey服务器,以便可以通过编程控制其启动/停止等。我找到了教程,但它是针对jetty 1.18.1(相当旧)的。在使用最新的jersey版本(2.22.1)时,类、名称空间等似乎发生了很多变化,上面教程中显示的示例不起作用

有人能指出一种在自定义应用程序中嵌入jersey的最新版本的方法吗?我相信这是可行的,但我似乎找不到参考资料、文档、示例或任何东西。

正如Gimby所建议的那样,它提供了答案。Jersey可以使用另一个http服务器(如jetty)嵌入到java应用程序中。在我的例子中,我用以下三个步骤构建了一个非常简单的工作示例项目:

  • 在my pom.xml中添加了各自的maven依赖项请注意,我只依赖jersey项目的jetty连接器。我对jetty服务器本身没有依赖性。两者同时使用会导致错误

    <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 java.io.IOException;
    import java.net.URI;
    import javax.ws.rs.core.UriBuilder;
    import org.eclipse.jetty.server.Server;
    import org.glassfish.jersey.jetty.JettyHttpContainerFactory;
    import org.glassfish.jersey.server.ResourceConfig;
    
    @SuppressWarnings("restriction")
    public class TestingApplicationStartingRESTServerProgrammatically {
    
        public static void main(String[] args) throws Exception {
            URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build();
            ResourceConfig config = new ResourceConfig(CrunchifyAPI.class);
            Server server = JettyHttpContainerFactory.createServer(baseUri, config);
            server.start();
        }
    
    
    }
    

  • 如果您想将其嵌入到较低级别的API中,以防您选择将web引擎更改为Netty或Vert.X,那么您必须转到

    您需要使用
    WebConfig
    构建它,并且需要创建自己的HttpServletRequest/Response/Context类实现


    您可以通过构建自己的
    ApplicationHandler
    来降低成本,但在那个阶段,它基本上是一个内部构件。在WebComponent级别,您仍然拥有servlet API,因此更容易构建您需要的内容。

    jersey用户手册中有大量关于如何在嵌入式服务器上运行的示例;它似乎不再有一个内置的,这是有意义的,因为有很多稳定的服务器可用。你挑吧。非常感谢。您应该将您的评论作为答案发布。这不是答案,我只是告诉您手册确实存在。您好,我在应用程序中使用org.eclipse.jetty版本:“9.1.3.v20140225”和org.glassfish.jersey.bundles版本:“2.7”。你能解释一下你哪里出了问题吗?事实上我现在没问题了。金比给了我解决办法。我试图嵌入jersey服务器,但我错过了他正确提到的文档部分。请将他的评论标记为有用。是否可以用Tomcat而不是Jetty来做这件事?我正在搜索,但找不到等价物。
    import java.io.IOException;
    import java.net.URI;
    import javax.ws.rs.core.UriBuilder;
    import org.eclipse.jetty.server.Server;
    import org.glassfish.jersey.jetty.JettyHttpContainerFactory;
    import org.glassfish.jersey.server.ResourceConfig;
    
    @SuppressWarnings("restriction")
    public class TestingApplicationStartingRESTServerProgrammatically {
    
        public static void main(String[] args) throws Exception {
            URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build();
            ResourceConfig config = new ResourceConfig(CrunchifyAPI.class);
            Server server = JettyHttpContainerFactory.createServer(baseUri, config);
            server.start();
        }
    
    
    }