Давайте разберем его на части.
Создание HTTP-сервера
Создание экземпляра HttpSever
с использованием нашего Vertx
экземпляра.
HttpServer httpServer = vertx.createHttpServer();
Определение обработчика запросов
Теперь для нашего HttpServer
мы можем определить обработчик для входящих запросов.
Мы можем использовать для этого HttpServer#requestHandler(Handler<HttpServerRequest> handler)
[1]. Этот метод принимает экземпляр Handler<HttpRequest>
.
Итак, мы можем определить наш экземпляр Handler<HttpServerRequest>
следующим образом:
private static class MyRequestHandler implements Handler<HttpServerRequest> {
@Override
public void handle(HttpServerRequest req) {
req.response().end("Hello");
}
}
Этот обработчик будет просто печатать "Hello"
для каждого входящего request.
Теперь мы можем связать экземпляр MyReqesutHandler
с нашим экземпляром httpServer
.
httpServer.requestHandler(new MyRequestHandler())
и запустить сервер HTTP на порту 8080
httpServer.listen(8080);
Рефакторинг с использованием лямбда-выражений
Обратите внимание, что Handler - это так называемый функциональный интерфейс [2], вместо определения целого класса, мы можем передать лямбда-функцию [3] непосредственно в httpServer.requestHandler()
.
Мы можем избежать большого количества стандартного кода.
Таким образом, используя лямбду, нам не нужно определять целый класс, достаточно сделать:
httpServer.requestHandler(req -> req.response().end("Hello"));
Теперь, поскольку JAVA компилятор знает httpServer.requestHandler()
принимает экземпляр Handler<HttpServerRequest>
, может выводить тип req
в типе компиляции, просто взглянув на объявление метода.
Рефакторинг с использованием Fluent API
Так как vert.x поддерживает Fluet API [4], мы можем связывать метод без использования промежуточных переменных. * 10 54 *
vertx.createHttpServer()
.requestHandler(req -> req.response().end("hello"))
.listen(8080);
Я настоятельно рекомендую вам взглянуть на Java лямбда-уроки и почувствовать их приятное чувство, поскольку они используются в основном не только в Vert.x, но и в Java мир повсюду.
Веселись!
[1] https://vertx.io/docs/apidocs/io/vertx/core/http/HttpServer.html#requestHandler -io.vertx.core.Handler-
[2] https://www.baeldung.com/java-8-functional-interfaces
[3] https://www.geeksforgeeks.org/lambda-expressions-java-8/
[4] https://en.wikipedia.org/wiki/Fluent_interface