Seit Java SE 6 gibt es einen eingebauten HTTP-Server in Sonne Oracle JRE. Der Name des Java 9-Moduls lautet jdk.httpserver
. Die com.sun.net.httpserver
Paketzusammenfassung gibt einen Überblick über die beteiligten Klassen und enthält Beispiele.
Hier ein Beispiel für einen Startschuss kopiert aus ihren Dokumenten. Sie können es einfach kopieren, einfügen und unter Java 6+ ausführen.
<em>(an alle, die versuchen, es trotzdem zu bearbeiten, weil es ein hässliches Stück Code ist, bitte nicht, das ist ein Copy Paste, nicht von mir, außerdem sollte man Zitate nie bearbeiten, es sei denn, sie haben sich in der Originalquelle geändert)</em>
package com.stackoverflow.q3732109;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class Test {
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/test", new MyHandler());
server.setExecutor(null); // creates a default executor
server.start();
}
static class MyHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
String response = "This is the response";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
}
Es ist zu beachten, dass die response.length()
Teil in ihrem Beispiel schlecht ist, hätte es sein müssen response.getBytes().length
. Selbst dann ist die getBytes()
Methode muss explizit den Zeichensatz angeben, den Sie dann in der Kopfzeile der Antwort angeben. Leider ist dies nur ein einfaches Beispiel für den Einstieg, auch wenn es für Anfänger irreführend ist.
Führen Sie es aus und gehen Sie auf http://localhost:8000/test. Sie erhalten dann folgende Antwort:
Dies ist die Antwort
Was die Verwendung com.sun.*
Klassen, beachten Sie, dass dies, im Gegensatz zu dem, was einige Entwickler denken, absolut nicht durch die bekannte FAQ verboten ist Warum Entwickler keine Programme schreiben sollten, die 'sun'-Pakete aufrufen . Diese FAQ betrifft die sun.*
Paket (wie z.B. sun.misc.BASE64Encoder
) für die interne Verwendung durch die Oracle JRE (die somit Ihre Anwendung beenden würde, wenn Sie sie unter einer anderen JRE ausführen), nicht die com.sun.*
Paket. Sun/Oracle entwickeln auch selbst Software auf der Java SE API, wie jedes andere Unternehmen auch, wie z.B. Apache usw. Außerdem ist dieses spezielle HttpServer
muss in jedem JDK vorhanden sein, so dass es absolut kein "Portabilitäts"-Problem gibt, wie es bei sun.*
Paket. Verwendung von com.sun.*
Klassen ist nur entmutigt (aber nicht Verbotene ), wenn es sich um eine Umsetzung einer bestimmten Java-API, wie z. B. GlassFish (Java EE impl), Mojarra (JSF impl), Jersey (JAX-RS impl), usw.