"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Construindo um servidor web sem dependências em Java

Construindo um servidor web sem dependências em Java

Publicado em 2024-11-08
Navegar:598

Building a web server with no dependencies in Java

Estou trabalhando em um projeto de hobby há alguns meses, um gateway de API licenciado pelo MIT projetado para ser independente de qualquer fornecedor específico. Acho que está indo muito bem, para ser sincero. À medida que minha base de código cresceu, vi oportunidades de melhorias no núcleo, que é o servidor HTTP. Transformar o servidor HTTP principal em sua própria microestrutura parecia uma solução lógica (e um ótimo exercício de aprendizado!).

Apresentamos o Kindle, o combustível que irá impulsionar sua aplicação. Kindling é baseado na biblioteca padrão Java 21, sem dependências. Ele foi projetado para ser programável, sem usar nenhuma mágica.

Aqui está um simples Olá Mundo com 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 uma solicitação CURL ao servidor gera esta resposta:

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

...muito legal, certo?

Existem alguns bugs, como Content-Length faltando na resposta.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/hlafaille/building-a-web-server-with-no-dependencies-in-java-2okh?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3