用Java创build一个简单的HTTP服务器?

用Java创build一个简单的HTTP服务器最简单的方法是什么? 有没有共享的图书馆来促进这一点? 我只需要响应GET/POST ,我不能使用应用程序服务器。

什么是最简单的方法来完成这个?

使用docker 。 这是一个embeddedJetty的教程。 (这是一个过时的教程 。)

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

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

这是我将如何去做这件事:

  1. 启动ServerSocket侦听(可能在端口80上)。
  2. 一旦你得到一个连接请求,接受并传递给另一个线程/进程(这使得ServerSocket可以继续监听并接受其他连接)。
  3. parsing请求文本(具体来说,如果它是GET或POST,并且传递了参数,将会看到标题。
  4. 回答你自己的头( Content-Type等)和HTML。

我发现使用Firebug(在Firefox中)查看标题的例子很有用。 这是你想要效仿的。

试试这个链接: – Java中的multithreading服务器

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

如果您使用的是Sun JDK,则可以使用此内置库
看看这个网站如何使用。

如果没有在这里有几个开源的HTTP服务器 ,你可以embedded到你的软件。

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

检查线程在这里

顺便说一句,如果你打算有一个rest的Web服务,这里是一个简单的例子使用jersey 。

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

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/

我写了一篇教程,解释了如何在Java中编写简单的HTTP服务器。 解释代码在做什么以及为什么服务器是按照教程进行的那样写的。 可能是有用的http://kcd.sytes.net/articles/simple_web_server.php

Jetty是轻松embeddedHTTP服务器的好方法。 它支持自己的附加处理程序的简单方法,如果你需要更多的function,它是一个完整的J2EE应用程序服务器。

在这样的情况下,embeddedTomcat是相对无痛的。 这是一个很好的关于它的StackOverflow引用。

一个servlet容器肯定是要走的路。 如果Tomcat或Jetty对你来说太重了,可以考虑Winstone或者Tiny 。

我刚刚添加了一个公共仓库,准备好使用Jetty和JDBC来运行盒子服务器以启动项目。

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