<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 на гите.