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原型的接口,但它是交互式的,允许您向应用程序添加所需内容
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