Pull to refresh

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

Level of difficultyEasy

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

Коротко:

  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

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.