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

如何启动jax-rs服务器?

楚雪松
2023-03-14
@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();
}

共有1个答案

崔琦
2023-03-14

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

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

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

如果您想要快速开始,而不必担心设置项目、了解需要添加哪些依赖项、添加启动代码,那么一个简单的启动和运行方法就是使用Maven原型。如果您访问Jersey文档,它们会让您从运行Jersey应用程序的嵌入式Grizzly服务器开始。您需要做的是从命令行运行以下命令(假设您的机器中安装了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

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

public class Main {

    public static final String BASE_URI = "http://localhost:8080/myapp/";

    public static HttpServer startServer() {

        final ResourceConfig rc = new ResourceConfig().packages("org.example");

        return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
    }

    public static void main(String[] args) throws IOException {
        final HttpServer server = startServer();
        System.out.println(String.format("Jersey app started with WADL available at "
                + "%sapplication.wadl\nHit enter to stop it...", BASE_URI));
        System.in.read();
        server.stop();
    }
}

在此代码中,他们使用ResourceConfig类的Packages()方法,该方法为Jersey指定一个包,以扫描要注册的@path@provider类。在您的情况下,如果不需要,可以删除方法调用。如果要注册用户实例,所做的只是在ResourceConfig上调用register(Users)

  • Jersey 2中的ResourceConfig类到底是什么-此链接将帮助您开始使用ResourceConfig类,并向您展示如何注册资源类或实例。

您可能还需要考虑其他框架

>

  • Dropwizard-Dropwizard是一个建立在Jersey之上的自以为是的框架。它使用嵌入式Jetty作为其服务器,并带有许多其他特性,使开发应用程序变得更加容易。他们有很好的,易于遵循的文档。有一个很好的“入门”指南,如果你想给他们一个尝试。

  •  类似资料:
    • 泽西-客户端 泽西-普通 jersey-container-servlet jersey-container-servlet-core 泽西-服务器 如果我这样做,我总是得到以下异常: 经过一些研究,我发现我应该添加jersey-servlet-1.12.jar,而不是从上面发布的下载源添加jar。所以我做了。我将其添加到web.xml中

    • 问题内容: 我正在使用JAX-RS的Jersey实现。我想将JSON对象发布到该服务,但收到错误代码415不支持的媒体类型。我想念什么? 这是我的代码: 这是Order对象: 这样的GET请求可以完美地工作,并以JSON格式返回订单: 但是,像这样的POST请求返回415: 问题答案: 答案非常简单。我必须在请求中添加标头,其值为。没有此标头,Jersey不知道如何处理请求正文(尽管有注释)!

    • 你好,我曾与JAX-WS合作开发基于SOAP的网络服务。现在我想使用REST,因为正如我从这里学习的那样,REST比SOAP有优势。 但从不同的文章中,我知道我们也可以从JAX-WS创建RESTful Web服务。但是大多数人说我们应该使用JAX-RS而不是JAX-WS。 我的问题是JAX-WS RESTful webservice和JAX-RS(泽西)之间有什么区别。JAX-RS相对于JAX-W

    • 我正在开发一个安全的web应用程序,它可以进行金融交易,并在其中使用spring。哪个更适合用于安全性、JAX-RS服务或SpringREST服务?我考虑使用spring,因为我们已经在应用程序中使用它了,如果它提供了功能,那么为什么要使用JAX-RS,但正如我所说的,它是一个高度安全的web应用程序,人们将在其中购买东西并进行金融交易,所以我必须看看哪个更适合使用。 我看了下面的博客还是有点困惑

    • 我想知道是否有一种方法来设置泽西服务器端记录器级别。例如,我的服务器一直记录所有的请求(信息级别),我只希望它记录严重的消息: 28-mar-2016 11:42:19.551信息[http-nio-8080-exec-60]org.glassfish.jersey.filter.loggingfilter.log 1*服务器收到线程http-nio-8080-exec-60上的请求

    • 问题内容: 澄清: 这个问题是关于对基于JAX-WS的REST服务进行GZIP处理,但是我决定更改主题以使其更容易找到 我正在通过JAX-WS实现REST服务,并以标准方式发布它(原因是我想避免使用servlet容器或应用程序服务器)。 有办法让服务器gzip响应内容吗? 如何 实际提供的示例可以正常工作,它使您可以在没有servlet容器的嵌入式轻量级服务器上构建JAX-RS样式的服务器,但是需