私は数か月間、特定のベンダーから独立するように設計された 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 サイトの他の関連記事を参照してください。