>Java >java지도 시간 >Java에서 종속성 없이 웹 서버 구축

Java에서 종속성 없이 웹 서버 구축

王林
王林원래의
2024-08-09 10:20:50772검색

Building a web server with no dependencies in Java

저는 특정 공급업체와 독립적으로 설계된 MIT 라이선스 API 게이트웨이인 취미 프로젝트를 몇 달 동안 진행해 왔습니다. 솔직히 말해서 꽤 잘 진행되고 있다고 생각합니다. 내 코드 기반이 커짐에 따라 HTTP 서버라는 핵심 부분을 개선할 수 있는 기회를 보았습니다. 핵심 HTTP 서버를 자체 마이크로 프레임워크로 분리하는 것은 논리적인 해결책처럼 보였습니다(그리고 훌륭한 학습 연습입니다!).

애플리케이션에 불을 붙일 연료인 Kindling을 소개합니다. Kindling은 종속성이 없는 표준 Java 21 라이브러리를 기반으로 합니다. 마법을 사용하지 않고도 프로그래밍이 가능하도록 설계되었습니다.

Kindling을 사용한 간단한 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에서 종속성 없이 웹 서버 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.