ホームページ  >  記事  >  Java  >  Java で依存関係のない Web サーバーを構築する

Java で依存関係のない Web サーバーを構築する

王林
王林オリジナル
2024-08-09 10:20:50750ブラウズ

Building a web server with no dependencies in Java

私は数か月間、特定のベンダーから独立するように設計された MIT ライセンスの API ゲートウェイという趣味のプロジェクトに取り組んでいます。正直に言うと、かなりうまくいっていると思います。コードベースが成長するにつれて、コアである HTTP サーバーの周りに改善の余地があることがわかりました。コア HTTP サーバーを独自のマイクロフレームワークにスピンアウトすることは、論理的な解決策のように思えました (そして素晴らしい学習演習にもなります!)。

アプリケーションを起動する燃料である Kindle を紹介します。 Kindle は標準の Java 21 ライブラリに基づいており、依存関係はありません。魔法を使わずにプログラムできるように設計されています。

これは Kindle を使った簡単な Hello World です:

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");
    }
}

CURL リクエストをサーバーに送信すると、次の応答が返されます:

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

...かなりクールですね?

レスポンスに Content-Length が欠落しているなど、いくつかのバグがあります。

以上がJava で依存関係のない Web サーバーを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。