«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Создание веб-сервера без зависимостей на Java

Создание веб-сервера без зависимостей на Java

Опубликовано 8 ноября 2024 г.
Просматривать:505

Building a web server with no dependencies in Java

В течение нескольких месяцев я работал над хобби-проектом — шлюзом API с лицензией MIT, разработанным так, чтобы быть независимым от какого-либо конкретного поставщика. Я думаю, что все идет очень хорошо, если честно. По мере того как моя кодовая база росла, я видел возможности для улучшения ядра — HTTP-сервера. Выделение основного HTTP-сервера в отдельную микроструктуру казалось логичным решением (и отличным учебным упражнением!).

Представляем Kindling, топливо, которое зажжет ваше приложение. Kindling основан на стандартной библиотеке Java 21 без каких-либо зависимостей. Его можно программировать без использования какой-либо магии.

Вот простой пример Hello World с 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"); } }

Отправка запроса CURL на сервер дает следующий ответ:

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

... довольно круто, правда?

Есть несколько ошибок, например, в ответе отсутствует Content-Length.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/hlafaille/building-a-web-server-with-no-dependentities-in-java-2okh?1. В случае нарушения прав обращайтесь по адресу [email protected]. удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3