【问题标题】:Create a simple HTTP server with Java?用 Java 创建一个简单的 HTTP 服务器?
【发布时间】:2011-02-12 14:56:47
【问题描述】:

用 Java 创建一个简单的 HTTP 服务器最简单的方法是什么?是否有任何公共图书馆可以促进这一点?我只需要回复GET/POST,不能使用应用服务器。

最简单的方法是什么?

【问题讨论】:

标签: java http post get


【解决方案1】:

使用Jetty。这是embedding Jetty 的官方示例。 (这里是outdated tutorial。)

Jetty 非常轻量级,但它确实提供了一个 servlet 容器,这可能与您对使用“应用程序服务器”的要求相矛盾。

您可以将 Jetty 服务器嵌入到您的应用程序中。 Jetty 允许嵌入式或 servlet 容器选项。

这里是get started tutorialsource code 的另一个快捷方式。

【讨论】:

  • 不使用“应用程序服务器”只是我没有在其下运行的要求。这句话总结得很好:“不要在 Jetty 中部署你的应用程序,在你的应用程序中部署 Jetty”。
  • jetty 自 2012 年以来(顺便说一句,那是 7 年),使得在嵌入式模式下上传文件变得很困难。我还没有找到一个使用嵌入式码头上传文件的工作示例。除非您想提供与另一种技术一起放置的静态文件。码头的文档也很差
【解决方案2】:

我会这样处理:

  1. 启动ServerSocket 监听(可能在端口 80 上)。
  2. 收到连接请求后,接受并传递给另一个线程/进程(这使您的ServerSocket 可以继续侦听和接受其他连接)。
  3. 解析请求文本(特别是您将看到它是 GET 还是 POST 的标头,以及传递的参数。
  4. 使用您自己的标题(Content-Type 等)和 HTML 来回答。

我发现使用 Firebug(在 Firefox 中)查看标头示例很有用。这就是你想要模仿的。

试试这个链接: - Multithreaded Server in Java

【讨论】:

  • @relgukxilef 确实如此。我更新到具有相似内容的不同站点。原文链接is still available on Wayback Machine.
  • 这应该是公认的答案,因为关于 Jetty 的答案与没有应用程序服务器的规定要求直接冲突。 ServerSocket 非常简单。
  • 而要使用Session,我们必须使用Java EE servlets API?
【解决方案3】:

最简单的是Simple 有教程,没有WEB-INF 没有Servlet API 没有依赖。只是一个 JAR 中的简单轻量级 HTTP 服务器。

【讨论】:

  • .. 以及大量的源文件。我只想要一个十行程序。它在哪里?
【解决方案4】:

如果您使用的是 Sun JDK,您可以使用 this built in library
Look at this site on how to use.

如果没有,您可以将多个Open Source HTTP Servers here 嵌入到您的软件中。

【讨论】:

【解决方案5】:

Java 6 有一个默认的嵌入式 http 服务器。

Check the thread here

顺便说一句,如果你打算有一个休息网络服务,这里是一个simple example using jersey

【讨论】:

    【解决方案6】:

    我很惊讶这个例子不在这里:

    http://hc.apache.org/httpcomponents-core-ga/httpcore/examples/org/apache/http/examples/ElementalHttpServer.java

    编辑>> 上面的链接无法访问。这是 POST 示例的摘录,后面是 HTTP 示例的链接。

     if (!conn.isOpen()) {
            Socket socket = new Socket(host.getHostName(), host.getPort());
            conn.bind(socket);
        }
        BasicHttpEntityEnclosingRequest request = new
        BasicHttpEntityEnclosingRequest("POST",
        "/servlets‐examples/servlet/RequestInfoExample");
        request.setEntity(requestBodies[i]);
        System.out.println(">> Request URI: " + request.getRequestLine().getUri());
        httpexecutor.preProcess(request, httpproc, coreContext);
        HttpResponse response = httpexecutor.execute(request, conn, coreContext);
        httpexecutor.postProcess(response, httpproc, coreContext);
        System.out.println("<< Response: " + response.getStatusLine());
        System.out.println(EntityUtils.toString(response.getEntity()));
        System.out.println("==============");
        if (!connStrategy.keepAlive(response, coreContext)) {
        conn.close();
        } else {
        System.out.println("Connection kept alive...");
        }
    

    http://hc.apache.org/httpcomponents-core-ga/httpcore/examples/org/apache/http/examples/

    【讨论】:

      【解决方案7】:

      不久前,我写了一个教程来解释如何用 Java 编写一个简单的 HTTP 服务器。随着教程的进行,解释代码在做什么以及为什么以这种方式编写服务器。可能有用http://kcd.sytes.net/articles/simple_web_server.php

      【讨论】:

        【解决方案8】:

        嵌入 Tomcat 相对来说比较轻松。 Here's 一个很好的 StackOverflow 参考资料。

        【讨论】:

          【解决方案9】:

          我已经实现了一个link

          注意为了处理 json,我使用了 jackson。如果需要,您也可以删除它

          【讨论】:

            【解决方案10】:

            Jetty 是一种轻松嵌入 HTTP 服务器的好方法。它支持自己的简单方法来附加处理程序,如果您需要更多功能,它是一个完整的 J2EE 应用服务器。

            【讨论】:

              【解决方案11】:

              servlet 容器绝对是要走的路。如果 Tomcat 或 Jetty 对您来说太重,请考虑 WinstoneTTiny

              【讨论】:

              • 您有使用 TTiny 的经验吗?
              【解决方案12】:

              Undertow 是一个轻量级的非阻塞embedded web server,您可以快速启动和运行。

              public static void main(String[] args) {
              Undertow.builder()
                      .addHttpListener(8080, "localhost")
                      .setHandler((exchange) -> exchange.getResponseSender().send("hello world"))
                      .build().start();
              }
              

              【讨论】:

                【解决方案13】:

                我刚刚添加了一个公共存储库,其中准备好使用 Jetty 和 JDBC 运行开箱即用的服务器来启动您的项目。

                在这里从 github 拉取: https://github.com/waf04/WAF-Simple-JAVA-HTTP-MYSQL-Server.git

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-08-23
                  • 1970-01-01
                  • 2017-12-06
                  • 2016-03-07
                  • 1970-01-01
                  • 2022-01-19
                  相关资源
                  最近更新 更多