Ich arbeite seit einigen Monaten an einem Hobbyprojekt, einem MIT-lizenzierten API-Gateway, das so konzipiert ist, dass es von einem bestimmten Anbieter unabhängig ist. Ehrlich gesagt denke ich, dass es ganz gut läuft. Da meine Codebasis gewachsen ist, habe ich Möglichkeiten für Verbesserungen rund um den Kern, nämlich den HTTP-Server, gesehen. Den Kern-HTTP-Server in ein eigenes Mikro-Framework auszugliedern, schien eine logische Lösung (und eine großartige Lernübung!) zu sein.
Wir stellen Ihnen Kindling vor, den Treibstoff, der Ihre Anwendung in Schwung bringt. Kindling basiert auf der Standardbibliothek Java 21, ohne Abhängigkeiten. Es ist so konzipiert, dass es ohne den Einsatz von Magie programmierbar ist.
Hier ist ein einfaches „Hello World“ mit Kindling:
package io.kerosenelabs.kindling; import java.nio.file.Path; import java.util.HashMap; import io.kerosenelabs.kindling.constant.HttpMethod; import io.kerosenelabs.kindling.constant.HttpStatus; import io.kerosenelabs.kindling.exception.KindlingException; import io.kerosenelabs.kindling.handler.RequestHandler; public class Main { public static void main(String[] args) throws KindlingException { KindlingServer server = KindlingServer.getInstance(); // test request handler server.installRequestHandler(new RequestHandler() { /** * Tell the server what type of request this handler can work with */ @Override public boolean accepts(HttpMethod httpMethod, String resource) throws KindlingException { return httpMethod.equals(HttpMethod.GET) && resource.equals("/"); } /** * Do your business logic here */ @Override public HttpResponse handle(HttpRequest httpRequest) throws KindlingException { return new HttpResponse.Builder() .status(HttpStatus.OK) .headers(new HashMap<>() { { put("Content-Type", "text/html"); } }) .content("<h1>Hello from Kindling!</h1>") .build(); } }); // serve our server server.serve(8443, Path.of("mykeystore.p12"), "password"); } }
Das Senden einer CURL-Anfrage an den Server liefert diese Antwort:
> GET / HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.88.1 > Accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): < HTTP/1.1 200 OK < Content-Type: text/html * no chunk, no close, no size. Assume close to signal end < * TLSv1.3 (IN), TLS alert, user canceled (346): * TLSv1.3 (IN), TLS alert, close notify (256): * Closing connection 0 * TLSv1.3 (OUT), TLS alert, close notify (256): <h1>Hello from Kindling!</h1>
...ziemlich cool, oder?
Es gibt ein paar Fehler, zum Beispiel fehlt die Inhaltslänge in der Antwort.
Das obige ist der detaillierte Inhalt vonErstellen eines Webservers ohne Abhängigkeiten in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!