Skip to content
ZooMMaX edited this page Jan 11, 2024 · 2 revisions

Есть два варианта запуска библиотеки:

  1. С аннотациями
  2. Без аннотаций

С аннотациями

import ru.zoommax.SimpleServer;
import ru.zoommax.next.Request;
import ru.zoommax.next.Response;
import ru.zoommax.next.annotation.Endpoint;
import ru.zoommax.next.annotation.InitWebServer;
import ru.zoommax.next.enums.HttpMethod;

public class AnnotatedStart {
    /*
     * Аннотируем метод, который будет запускать сервер с помощью аннотации InitWebServer
     * В аннотации InitWebServer указываем порт и количество потоков
     * По умолчанию порт 8080, а количество потоков 1
     * Внутри метода запускаем сервер с помощью SimpleServer.start()
     * SimpleServer.start() запускает чтение аннотаций во всех классах внутри пакета
     * с последующим запуском сервера (создается синглтон) и добавлением конечных точек
     * в список конечных точек сервера.
     */
    @InitWebServer(port = 12345, threads = 4)
    public static void main(String[] args) {
        SimpleServer.start();
    }

    /*
     * Аннотируем метод, который реализует логику конечной точки с помощью аннотации Endpoint
     * В аннотации Endpoint указываем путь конечной точки, HTTP метод, код ответа и фильтр длины контента
     * По умолчанию метод GET, код ответа 200 и фильтр длины контента -1 (не фильтровать).
     * Внутри метода реализуем логику конечной точки.
     * Метод должен принимать объект Request и возвращать объект Response.
     * В объекте Request содержится вся информация о запросе,
     * а в объекте Response формируется ответ на запрос.
     */
    @Endpoint(path = "/test", httpMethod = HttpMethod.GET, statusCode = 200, filterContentLength = -1)
    public Response test(Request request) {
        //Endpoint logic
        String body = request.getBodyAsString();
        //...

        //Return response
        return Response.builder()
                .bodyAsString(body)
                .statusCode(200)
                .build();
    }
}

Итого надо запомнить, что:

  1. Метод, который запускает сервер, должен быть аннотирован @InitWebServer.
  2. @InitWebServer принимает два параметра: port и threads. По умолчанию port равен 8080, а threads равен 1.
  3. Метод, который реализует логику конечной точки, должен быть аннотирован @Endpoint.
  4. @Endpoint принимает четыре параметра: path, httpMethod, statusCode и filterContentLength. По умолчанию httpMethod равен HttpMethod.GET, statusCode равен 200, а filterContentLength равен -1.

С аннотациями и наследованием

import ru.zoommax.SimpleServer;
import ru.zoommax.next.Request;
import ru.zoommax.next.Response;
import ru.zoommax.next.annotation.Endpoint;
import ru.zoommax.next.annotation.InitWebServer;
import ru.zoommax.next.enums.HttpMethod;

@InitWebServer(port = 12345, threads = 4)
public class AnnotatedStartWithExtends extends SimpleServer {
    public static void main(String[] args) {

    }

    @Endpoint(path = "/test", httpMethod = HttpMethod.GET, statusCode = 200, filterContentLength = -1)
    public Response test(Request request) {
        return Response.builder()
                .bodyAsString(request.getBodyAsString())
                .statusCode(200)
                .build();
    }
}

Без аннотаций

import ru.zoommax.SimpleServer;
import ru.zoommax.next.Response;
import ru.zoommax.next.handlers.GetHandlerNew;

import java.util.HashMap;

public class NotAnnotatedStart {
    /*
     * Запускаем сервер с помощью SimpleServer.start()
     * SimpleServer.start() запускает сервер (создается синглтон).
     * Далее можно добавлять конечные точки в список конечных точек сервера.
     * В SimpleServer.start() нужно указать порт и количество потоков.
     */
    public static void main(String[] args) {
        SimpleServer.start(12345, 4);
        test();
    }

    /*
     * Добавляем конечную точку с помощью SimpleServer.addEndpoint()
     * SimpleServer.addEndpoint() принимает два параметра: путь конечной точки и обработчик.
     * Внутри обработчика реализуем логику конечной точки.
     * Возвращаем объект Response.
     */
    public static void test() {
        SimpleServer.addEndpoint("/test", new GetHandlerNew() {
            @Override
            public Response response(String request, HashMap<String, String> requestHeaders, HashMap<String, String> requestParams, String clientIp) {
                //Endpoint logic
                String body = request;
                //...
                return Response.builder()
                        .bodyAsString(body)
                        .statusCode(200)
                        .build();
            }
        });
    }
}

Помощь в разработке

Если вы хотите помочь в разработке, то можете сделать форк репозитория и создать pull request. Если вы хотите помочь в разработке, но не знаете с чего начать, то можете взять одну из задач из списка ниже:

  • Добавить поддержку HTTP методов:
    • PUT
    • DELETE
    • HEAD
    • OPTIONS
    • TRACE
    • CONNECT
    • PATCH
  • Добавить то, что вы считаете необходимым для библиотеки.

Clone this wiki locally