Rumah >Java >javaTutorial >Membina pelayan web tanpa kebergantungan dalam Java

Membina pelayan web tanpa kebergantungan dalam Java

王林
王林asal
2024-08-09 10:20:50774semak imbas

Building a web server with no dependencies in Java

Saya telah mengusahakan projek hobi selama beberapa bulan, gerbang API berlesen MIT yang direka bentuk untuk bebas daripada mana-mana vendor tertentu. Saya rasa ia berjalan lancar, sejujurnya. Memandangkan asas kod saya telah berkembang, saya telah melihat peluang untuk penambahbaikan di sekitar teras, iaitu pelayan HTTP. Memusingkan pelayan HTTP teras ke dalam rangka kerja mikronya sendiri kelihatan seperti penyelesaian yang logik (dan latihan pembelajaran yang hebat!).

Memperkenalkan Kindling, bahan api yang akan menyalakan aplikasi anda. Kindling adalah berdasarkan pustaka Java 21 standard, tanpa kebergantungan. Ia direka bentuk supaya boleh diprogramkan, tanpa menggunakan sebarang sihir.

Berikut ialah Hello World yang ringkas dengan 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("<h1>Hello from Kindling!</h1>")
                        .build();
            }
        });

        // serve our server
        server.serve(8443, Path.of("mykeystore.p12"), "password");
    }
}

Menghantar permintaan CURL ke pelayan menghasilkan respons ini:

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

...agak keren, bukan?

Terdapat beberapa pepijat, seperti Panjang Kandungan tiada dalam respons.

Atas ialah kandungan terperinci Membina pelayan web tanpa kebergantungan dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn