"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > بناء خادم ويب بدون تبعيات في Java

بناء خادم ويب بدون تبعيات في Java

تم النشر بتاريخ 2024-11-08
تصفح:951

Building a web server with no dependencies in Java

لقد كنت أعمل في مشروع هواية منذ بضعة أشهر، وهو عبارة عن بوابة API مرخصة من معهد ماساتشوستس للتكنولوجيا (MIT) ومصممة لتكون مستقلة عن أي بائع معين. أعتقد أن الأمور تسير على ما يرام، لأكون صادقًا. مع نمو قاعدة التعليمات البرمجية الخاصة بي، رأيت فرصة للتحسين حول النواة، ألا وهي خادم HTTP. بدا أن تحويل خادم HTTP الأساسي إلى إطار عمل صغير خاص به كان بمثابة حل منطقي (وتمرين تعليمي رائع!).

نقدم لك Kindling، الوقود الذي سيشعل تطبيقك. يعتمد Kindling على مكتبة Java 21 القياسية، دون أي تبعيات. لقد تم تصميمه ليكون قابلاً للبرمجة، دون استخدام أي سحر.

إليك Hello World البسيط مع 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("

Hello from Kindling!

") .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):
Hello from Kindling!

...رائع جدًا، أليس كذلك؟

هناك بعض الأخطاء، مثل فقدان طول المحتوى في الاستجابة.

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/hlafaille/building-a-web-server-with-no-dependencies-in-java-2okh؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3