Java Vertx HttpServerRequest中的语法
我是Java新手,最近正在学习Vertx,我不明白以下代码是如何工作的:Java Vertx HttpServerRequest中的语法,java,vert.x,vertx-httpclient,Java,Vert.x,Vertx Httpclient,我是Java新手,最近正在学习Vertx,我不明白以下代码是如何工作的: @覆盖 公开作废开始(){ vertx.createHttpServer() .requestHandler(请求->请求响应() .end(“你好”)) .听(8080); } 我的问题是:为什么参数req不需要声明类型,以及这个req来自哪里?让我们把它分成几部分 创建HTTP服务器 使用我们的Vertx实例创建实例HttpSever HttpServer httpServer = vertx.createHttpS
@覆盖
公开作废开始(){
vertx.createHttpServer()
.requestHandler(请求->请求响应()
.end(“你好”))
.听(8080);
}
我的问题是:为什么参数
req
不需要声明类型,以及这个req来自哪里?让我们把它分成几部分
创建HTTP服务器
使用我们的Vertx
实例创建实例HttpSever
HttpServer httpServer = vertx.createHttpServer();
httpServer.requestHandler(new MyRequestHandler())
定义请求处理程序
现在,对于我们的HttpServer
,我们可以定义传入请求的处理程序
我们可以用于此HttpServer#requestHandler(Handler Handler)
[1]。此方法采用处理程序的一个实例
因此,我们可以将处理程序的实例定义如下:
private static class MyRequestHandler implements Handler<HttpServerRequest> {
@Override
public void handle(HttpServerRequest req) {
req.response().end("Hello");
}
}
并在端口8080
httpServer.listen(8080);
使用lambdas重构
注意,Handler是一个所谓的函数接口[2],而不是定义整个类,我们可以将lambda函数[3]直接传递给httpServer.requestHandler()
我们可以避免大量的样板代码
因此,通过使用lambda,我们不需要定义整个类,只需:
httpServer.requestHandler(req -> req.response().end("Hello"));
现在,因为JAVA编译器知道httpServer.requestHandler()
以Handler
为例,所以它可以通过查看方法声明,推断编译类型中req
的类型
使用fluentapi重构
由于vert.x促进了Fluet API[4],我们可以在不需要中间变量的情况下链接方法
vertx.createHttpServer()
.requestHandler(req -> req.response().end("hello"))
.listen(8080);
我强烈建议您阅读Java lambda教程,并对它们有良好的感觉,因为它们几乎不只是在Vert.x中使用,而是在Java世界的任何地方使用
玩得开心
[1]
[2]
[3]
[4] 让我们把它分成几块
创建HTTP服务器
使用我们的Vertx
实例创建实例HttpSever
HttpServer httpServer = vertx.createHttpServer();
httpServer.requestHandler(new MyRequestHandler())
定义请求处理程序
现在,对于我们的HttpServer
,我们可以定义传入请求的处理程序
我们可以用于此HttpServer#requestHandler(Handler Handler)
[1]。此方法采用处理程序的一个实例
因此,我们可以将处理程序的实例定义如下:
private static class MyRequestHandler implements Handler<HttpServerRequest> {
@Override
public void handle(HttpServerRequest req) {
req.response().end("Hello");
}
}
并在端口8080
httpServer.listen(8080);
使用lambdas重构
注意,Handler是一个所谓的函数接口[2],而不是定义整个类,我们可以将lambda函数[3]直接传递给httpServer.requestHandler()
我们可以避免大量的样板代码
因此,通过使用lambda,我们不需要定义整个类,只需:
httpServer.requestHandler(req -> req.response().end("Hello"));
现在,因为JAVA编译器知道httpServer.requestHandler()
以Handler
为例,所以它可以通过查看方法声明,推断编译类型中req
的类型
使用fluentapi重构
由于vert.x促进了Fluet API[4],我们可以在不需要中间变量的情况下链接方法
vertx.createHttpServer()
.requestHandler(req -> req.response().end("hello"))
.listen(8080);
我强烈建议您阅读Java lambda教程,并对它们有良好的感觉,因为它们几乎不只是在Vert.x中使用,而是在Java世界的任何地方使用
玩得开心
[1]
[2]
[3]
[4]