Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 如何启动jax-rs服务器?_Java_Rest_Server_Jax Rs - Fatal编程技术网

Java 如何启动jax-rs服务器?

Java 如何启动jax-rs服务器?,java,rest,server,jax-rs,Java,Rest,Server,Jax Rs,我的端点如下所示: @Path("/users") public class Users { private final SomeDependency dependency public Users(SomeDependency dependency) { this.dependency = dependency; } @GET @Path("/{id}") public Response

我的端点如下所示:

@Path("/users")
public class Users {
    private final SomeDependency dependency

    public Users(SomeDependency dependency) {
        this.dependency = dependency;
    }

    @GET
    @Path("/{id}")
    public Response Get(@PathParam("id") int id) {
        User user = this.dependency.get(id);
        return Response.ok(user).build();
    }
}
现在,我如何使用这个端点运行服务器呢

我对使用jersey jetty glassfish或其他东西的web服务器/应用程序/servlet感到困惑。还有web.xml文件吗?什么ResourceConfig只接受类,不接受它们的实例。一切似乎都一团糟

我怎么能做类似的事情呢

public static void main(String[] args) throws Exception {
        SomeDependency dependency = new SomeDependency();
        Users usersEndpoint = new Users(dependency);
        
        Server server = new Server();
        server.registerEndpoint(usersEndpoint);
        server.start();
}

因此,我接受了java是一团乱麻的事实,并引入了这些依赖关系:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http-jetty</artifactId>
    <version>3.4.2</version>
</dependency>
当然,我有更多的端点,所以我把所有东西都放在for循环中

至于我为什么要用一个客户帐户回答这个问题,我以前问这个问题的帐户是用一个一次性电子邮件地址创建的,我再也不能访问它了


希望这对将来的任何人都有帮助

因此,我接受了java是一团乱麻的事实,并将这些依赖项拉了进来:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http-jetty</artifactId>
    <version>3.4.2</version>
</dependency>
当然,我有更多的端点,所以我把所有东西都放在for循环中

至于我为什么要用一个客户帐户回答这个问题,我以前问这个问题的帐户是用一个一次性电子邮件地址创建的,我再也不能访问它了

希望这对将来的任何人都有帮助

服务器 就服务器而言,您必须考虑两种类型:已安装或嵌入式

安装 已安装的服务器是安装在您的计算机上的服务器。例如,如果您选择并遵循,服务器将安装在您选择的任何位置。在这种情况下,当您准备部署一个应用程序(war文件)时,您将把它复制到您的Tomcat服务器(到特定位置),在服务器启动时,Tomcat将看到该应用程序,然后运行它。在这种类型的环境中运行的应用程序需要web.xml,因为它们部署在war文件中

嵌入的 嵌入式服务器是打包到jar应用程序中的服务器,它与任何其他JavaSE应用程序一样,在
main
方法中启动。大多数已安装的服务器也带有嵌入式版本。您只需将服务器依赖项添加到应用程序中,然后编写服务器配置和启动(和关闭)代码。在此环境中运行的应用程序不需要web.xml,因为它们是作为jar文件部署的

用哪一个? 随着云服务和微服务的发展和普及,许多应用程序正朝着嵌入式服务器的方向发展。原因是它们易于部署、可扩展、相对轻量级,并且应用程序变得更加独立。使用嵌入式服务器还有许多其他优点,但也有一些缺点。在你最后决定使用哪一种之前,先进行研究

实例 如果您想快速开始,而不必担心设置项目、知道需要添加哪些依赖项、添加启动代码,那么一种简单的启动和运行方法就是使用Maven原型。如果您转到,他们会让您从运行Jersey应用程序的嵌入式Grizzly服务器开始。您需要做的是从命令行运行以下命令(假设您的机器上安装了Maven)

如果你阅读了我链接到的文档,它将解释初始应用程序附带的所有内容。主类如下所示(省略注释和导入)

公共类主{
公共静态最终字符串BASE_URI=”http://localhost:8080/myapp/";
公共静态HttpServer startServer(){
final ResourceConfig rc=new ResourceConfig().packages(“org.example”);
返回grizzlyhtpServerFactory.createHttpServer(URI.create(BASE_URI),rc);
}
公共静态void main(字符串[]args)引发IOException{
最终HttpServer服务器=startServer();
System.out.println(String.format)(“Jersey应用程序以WADL启动,可在
+“%sapplication.wadl\n输入以停止它…”,BASE_URI));
System.in.read();
server.stop();
}
}
在这段代码中,他们使用
ResourceConfig
类的
packages()
方法,该方法指定Jersey要扫描
@Path
的包和要注册的
@Provider
类。在您的情况下,如果不需要,可以删除方法调用。如果要注册用户实例,只需在
ResourceConfig
上调用
register(Users)

另见
  • -此链接将帮助您开始使用
    ResourceConfig
    类,并向您展示如何注册资源类或实例
其他框架 您可能还需要考虑其他框架

  • -Dropwizard是一个建立在Jersey之上的固执己见的框架。它使用嵌入式Jetty作为服务器,并附带许多其他功能,使开发应用程序变得更容易。他们有相当好的、易于理解的文档。如果你想尝试一下,有一个很好的“入门”指南

  • -Spring Boot是一个引导框架,它使应用程序的启动和运行更加容易。有为您制作的自动配置,但为您提供了更改它们的选项。使用SpringBoot时,可以使用SpringMVC或Jersey作为REST框架。还有一个类似于Maven原型的接口,但它是交互式的,允许您向应用程序添加所需内容

服务器 就服务器而言,您必须考虑两种类型:已安装或嵌入式

安装 已安装的服务器是安装在您的计算机上的服务器。例如,如果您选择并遵循,服务器将安装在您选择的任何位置。在这种情况下,当您准备部署一个应用程序(war文件)时,您将把它复制到您的Tomcat服务器(到一个特定的位置),并且在服务器启动时,Tomcat w
mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
  -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
  -DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example \
  -DarchetypeVersion=2.33