Heim > Java > javaLernprogramm > Hauptteil

Erstellen eines Webservers ohne Abhängigkeiten in Java

王林
Freigeben: 2024-08-09 10:20:50
Original
753 Leute haben es durchsucht

Building a web server with no dependencies in Java

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");
    }
}
Nach dem Login kopieren

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>
Nach dem Login kopieren

...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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage