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!