Как стать автором
Обновить

Java Simple Server

Уровень сложностиПростой
<dependency>
    <groupId>ru.zoommax</groupId>
    <artifactId>SimpleServer</artifactId>
    <version>1.5</version>
</dependency>

Возможно кому-то, кроме меня, пригодится такая реализация java сервера. Это opensource библиотека, распространяемая по лицензии Apache (возможно стоит сменить лицензию?), которая была создана в тот момент, когда стало понятно, что я раз за разом использую один и тот же код. Базируется эта либа на com.sun.net.httpserver и доступна в Maven Central.

Запустим сервер!

import ru.zoommax.SimpleServer;
public class Main {
    public static void main(String[] args) {
        SimpleServer.init(8080);
    }
}

Довольно просто и быстро. Сервер запускается на указанном порту и создает thread executor с пулом потоков равным количеству потоков процессора. При запуске вешает родительский поток в ожидание на две секунды. В stdout плюнет вот такое:

Теперь можно проверить работает ли сервер. Делается предельно просто. Открыть браузер и стукнуть по адресу http://localhost:8080/alife. В ответ придет текст life. (Думаю всем понятно, что GET запрос можно не только браузером сделать).

Добавим endpoint!

Main.java

import ru.zoommax.SimpleServer;

public class Main {
	public static void main(String[] args) {
		SimpleServer.init(8080);
		new Hello();
	}
}

Hello.java

import java.util.HashMap;
import ru.zoommax.EndPoint;
import ru.zoommax.GetHandler;

public class Hello {
	public Hello() {
		EndPoint.builder().handler(new GetHandler() {
			@Override
			public String response(String request, HashMap<String, String> requestHeaders, HashMap<String, String> requestParams, String clientIp) {
				String name = requestParams.get("name");
				return name + ", hello!";
			}
		}).endPointName("hello").build().add();
	}
}

После запуска, в stdout плюнет

Это был пример создания конечной точки с методом GET. С методом POST создается схожим образом.

import java.util.HashMap;
import ru.zoommax.EndPoint;
import ru.zoommax.PostHandler;

public class Post {
	public Post(){
		EndPoint.builder().handler(new PostHandler() {
            @Override
            public String response(String requestBody, HashMap<String, String> requestHeaders, String clientIp) {
                // You can access request headers, request body, and client IP address here
                // Customize the response based on the request if needed
                return requestBody;
            }
        }).endPointName("post").build().add();
		}
}

Для всего остального есть мастеркард HttpHandler. Почему так? Ну мне другое пока не особо нужно, вот и не добавил. По той же причине ответы принимают String (я в основном с json работаю).

Короче кому надо - юзайте на здоровье. Кто хочет помочь - прошу на GitHub проекта. Есть пожелания - пишите тут или в issue на гите.

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