Maison  >  Article  >  Java  >  Construire un serveur Web sans dépendances en Java

Construire un serveur Web sans dépendances en Java

王林
王林original
2024-08-09 10:20:50738parcourir

Building a web server with no dependencies in Java

Je travaille depuis quelques mois sur un projet de loisir, une passerelle API sous licence MIT conçue pour être indépendante de tout fournisseur particulier. Je pense que ça se passe plutôt bien, pour être honnête. Au fur et à mesure que ma base de code s'est développée, j'ai vu des opportunités d'amélioration autour du noyau, à savoir le serveur HTTP. Intégrer le serveur HTTP principal dans son propre micro-framework semblait être une solution logique (et un excellent exercice d'apprentissage !).

Présentation de Kindling, le carburant qui enflammera votre application. Kindling est basé sur la bibliothèque standard Java 21, sans dépendances. Il est conçu pour être programmable, sans recourir à aucune magie.

Voici un simple Hello World avec 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");
    }
}

L'envoi d'une requête CURL au serveur donne cette réponse :

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

... plutôt cool, non ?

Il y a quelques bugs, comme Content-Length manquant dans la réponse.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn