webentwicklung-frage-antwort-db.com.de

Einen einfachen HTTP-Server mit Java erstellen?

Was ist der einfachste Weg, um einen einfachen HTTP-Server mit Java zu erstellen? Gibt es Bibliotheken in Commons, um dies zu erleichtern? Ich muss nur auf GET/POST Antworten und kann keinen Anwendungsserver verwenden.

Was ist der einfachste Weg, um dies zu erreichen?

65
Stefan Kendall

Verwenden Sie Steg . Hier ist ein Tutorial für Jetty einbetten . (Hier ist ein veraltetes Tutorial .)

Jetty ist ziemlich leichtgewichtig, bietet jedoch einen Servlet-Container, der möglicherweise Ihren Anforderungen an die Verwendung eines "Anwendungsservers" widerspricht.

Sie können den Jetty-Server in Ihre Anwendung einbetten. Jetty erlaubt entweder eingebettete OR Servlet-Container-Optionen.

43
Kris

So würde ich vorgehen:

  1. Starten Sie ein ServerSocket Listening (wahrscheinlich auf Port 80).
  2. Sobald Sie eine Verbindungsanforderung erhalten haben, akzeptieren Sie diese und übergeben Sie sie an einen anderen Thread/Prozess (dies lässt Ihr ServerSocket verfügbar, um weiterzuhören und andere Verbindungen zu akzeptieren).
  3. Analysieren Sie den Anforderungstext (insbesondere die Header, in denen Sie sehen, ob es sich um ein GET oder POST handelt, und die übergebenen Parameter).
  4. Antworten Sie mit Ihren eigenen Kopfzeilen (Content-Type usw.) und das HTML.

Ich finde es nützlich, Firebug (in Firefox) zu verwenden, um Beispiele für Header zu sehen. Dies ist, was Sie emulieren möchten.

Versuchen Sie diesen Link: - Multithread-Server in Java

31

Am einfachsten ist Einfach es gibt ein Tutorial, kein WEB-INF, keine Servlet-API, keine Abhängigkeiten. Nur ein einfacher, kompakter HTTP-Server in einer einzelnen JAR.

21
ng.

Wenn Sie das Sun JDK verwenden, können Sie diese eingebaute Bibliothek verwenden
Sehen Sie auf dieser Seite nach, wie man es benutzt.

Wenn nicht, gibt es mehrere Open Source HTTP Server hier , die Sie in Ihre Software einbetten können.

8
Romain Hippeau

Ich bin überrascht, dass dieses Beispiel nicht hier ist:

http://hc.Apache.org/httpcomponents-core-ga/httpcore/examples/org/Apache/http/examples/ElementalHttpServer.Java

BEARBEITEN >> Der obige Link ist nicht erreichbar. Hier ist ein Auszug aus dem Beispiel POST gefolgt von dem Link zu den HTTP-Beispielen.

 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/

4
nikdeapen

Java 6 verfügt standardmäßig über einen eingebetteten HTTP-Server.

Überprüfen Sie den Thread hier

Übrigens, wenn Sie vorhaben, einen Web-Service für Ruhepausen zu nutzen, finden Sie hier ein einfaches Beispiel mit Trikot .

4
Titu

Ich habe ein Tutorial geschrieben, das erklärt, wie man einen einfachen HTTP-Server vor einiger Zeit in Java schreibt. Erklärt, was der Code tut und warum der Server im Verlauf des Lernprogramms so geschrieben ist. Könnte nützlich sein http://kcd.sytes.net/articles/simple_web_server.php

3
Charles Dobson

Jetty ist eine großartige Möglichkeit, einen HTTP-Server einfach einzubetten. Es unterstützt seine eigene einfache Methode zum Anschließen von Handlern und ist ein vollständiger J2EE-App-Server, wenn Sie weitere Funktionen benötigen.

1
maerics

Das Einbetten von Tomcat ist relativ schmerzlos. hier ist eine gute StackOverflow-Referenz darüber.

1
Dan

ndertow ist ein leichter, nicht blockierender eingebetteter Webserver , mit dem Sie sehr schnell loslegen können.

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

Ein Servlet-Container ist definitiv der richtige Weg. Wenn Tomcat oder Jetty für Sie zu schwer sind, ziehen Sie Winstone oder TTiny in Betracht.

0