Pull to refresh

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

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.