Как стать автором
Поиск
Написать публикацию
Обновить

Java Simple Server обновление

На случай если кому интересно начало.

Коротко:

  1. Аннотации. Да они появились (аж целых две)

  2. Логирование. Пока не везде, но уже имеется.

  3. Автостартер сервера.

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

  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();
    }
}

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

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();
    }
}

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

  1. Метод, который запускает сервер, должен быть аннотирован @InitWebServer.

  2. @InitWebServer принимает два параметра: port и threads. По умолчанию port равен 8080, а threads равен 1.

  3. Метод, который реализует логику конечной точки, должен быть аннотирован @Endpoint.

  4. @Endpoint принимает четыре параметра: pathhttpMethodstatusCode и filterContentLength. По умолчанию httpMethod равен HttpMethod.GETstatusCode равен 200, а filterContentLength равен -1.

Б

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();
            }
        });
    }
}

Запуск без аннотаций больше похож на старый подход (тем не менее старая реализация помечена как устаревшая в первую очередь из-за изменений в классе Server. Теперь используется класс ServerNext).

Ничего умнее для названия класса ServerNext в голову не пришло.
Кто хочет — может кинуть в меня тапком. Для этого даже есть канал в дискорде))
Кидать в ZooMMaX`а

https://github.com/ZooMMaX/SimpleServer/wiki/ru

https://github.com/ZooMMaX/SimpleServer

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.