"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Construyendo un servidor web sin dependencias en Java

Construyendo un servidor web sin dependencias en Java

Publicado el 2024-11-08
Navegar:945

Building a web server with no dependencies in Java

He estado trabajando en un proyecto de hobby durante algunos meses, una puerta de enlace API con licencia del MIT diseñada para ser independiente de cualquier proveedor en particular. Creo que va bastante bien, para ser honesto. A medida que mi base de código creció, vi oportunidades de mejora en torno al núcleo, que es el servidor HTTP. Convertir el servidor HTTP central en su propio micromarco parecía una solución lógica (¡y un gran ejercicio de aprendizaje!).

Presentamos Kindling, el combustible que encenderá tu aplicación. Kindling se basa en la biblioteca estándar Java 21, sin dependencias. Está diseñado para ser programable, sin utilizar ningún tipo de magia.

Aquí tienes un sencillo Hola Mundo con 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("

Hello from Kindling!

") .build(); } }); // serve our server server.serve(8443, Path.of("mykeystore.p12"), "password"); } }

Enviar una solicitud CURL al servidor produce esta respuesta:

> GET / HTTP/1.1
> Host: localhost:8443
> User-Agent: curl/7.88.1
> Accept: */*
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
Hello from Kindling!

...muy bien, ¿verdad?

Hay algunos errores, como que falta la longitud del contenido en la respuesta.

Declaración de liberación Este artículo se reproduce en: https://dev.to/hlafaille/building-a-web-server-with-no-dependencies-in-java-2okh?1 Si hay alguna infracción, comuníquese con [email protected] para borrarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3