vert.x-web是基于vertx的一套http服务框架。官网以下:html
vert.x-webjava
vert.x-web是不一样于j2ee标准的web服务,基于netty容器,异步执行,在思想上更接近于node.js。写多了各类ssh/ssm框架以后,体验一下不一样的口味也是很不错的。node
从某种角度上来讲,这是一套特别适合于“学习”的框架。官方的文档不尽详细,不少地方须要本身领会。不过官方的demo给的很齐全,并且源码真的是十分简单易懂,clone下来看一遍也是没问题的,可以从里面学到不少好东西。vert.x在不少思想和java新特性的应用上都是十分领先的。android
其实vert.x自己就是支持http协议的,因此vert.x-web说究竟是vert.x的一个扩展类库,封装并实现了一些经常使用的web功能。在代码的难度上天然就降低了不少。git
下面是官网给出的hello world程序,有必定node.js基础的同窗必定看起来十分熟悉:github
HttpServer server = vertx.createHttpServer();
server.requestHandler(request -> {
// This handler gets called for each request that arrives on the server
HttpServerResponse response = request.response();
response.putHeader("content-type", "text/plain");
// Write to the response and end it
response.end("Hello World!");
});
server.listen(8080);
复制代码
提及来,由于脱离了熟悉的tomcat等servlet容器,vert.x-web看起来更接近于一个干巴巴的骨架,不少基础的工做都须要本身来实现,好比返回html页面什么的。web
不过话说回来,java的东西翻来覆去都离不开java se的套路,搞一遍vert.x对于理解web服务器的某些原理也是很是有益的。spring
要想学习vert.x-web,首先要忘掉servlet什么的东西,而后忘掉spring-mvc什么的web框架。编程
接下来必需要了解几个基本的类:api
下面咱们来讲说这些东西。
看名字就知道这个类很NB了是吧:-D
Vertx类是Vert.x框架的核心api入口。更形象的说,它就是“当前这个应用”,或者说android中的Application类。服务的整个生命周期都离不开这个类的实例。在写代码的时候你会发现时刻都会遇到这个类。
另外当咱们须要写一些阻塞的代码的时候,也须要用到这个类来建立一个阻塞的任务。
Verticle是Vert.x框架中的一个核心概念。若是说Vertx是“应用”,那么Verticle就是应用中的一个服务。
另外一个更形象一点的比喻,若是说Vertx是一个机架,那么Veticle就是机架上的服务器。
然而,由于咱们在这里只要初学vert.x-web框架,这个东西只要知道它的存在就差很少了。一样想深刻学习vert.x,请到官网仔细阅读相关文档。
恩恩,这个就是咱们的Http服务器了。
可是你不要觉得这就开始学习到web了!其实你仔细看一下源码就知道,HttpServer这个类仍是属于vertx.core包下的东西。
这个就是vert.x原封提供的http服务器了。估计是由于netty的强大功能,翻看一下文档能够发现vert.x提供了tcp/http等协议的服务端和客户端实现,甚至还有个dns client能够用。
可是HttpServer须要了解一点东西。
HttpServer有两个须要用到的api:
第二个就是开始监听指定端口,没必要多说,这里说说第一个。
若是有Netty基础的同窗必定对Netty的各类Handler印象深入,那么Vert.x这个骨子里写着Netty的框架也离不开这个。从Handler开始,咱们就开始进入本身的业务逻辑。
Router是真正由Vert.x-web提供的一个Handler。由此其实也可见Netty/Vert.x架构的强大扩展性能。经过不一样的Handler就能够实现各类功能。绝不怀疑经过Handler去实现一套servlet api也是没问题的。不过在此并无。
Router提供了路由功能:
router.route("/user/info").handler(this::info);
复制代码
经过router方法指定一个路径,handler方法为这个路由提供一个Handler进行处理。
这里可能有些初学的朋友对于Handler这种东西有点懵了。Handler翻译为“处理机,处理者”,它是一个接口。实现了这个接口,说明这个类能够对传入的数据进行一些处理工做。并不局限于程序的某一层。
若是有用过JFinal的朋友会发现RoutingContext的api和JFinal的Controller类有殊途同归之处。然而不一样的是JFinal是对servlet的封装,而RoutingContext则是从根本上的另外一套api。
RoutingContext提供了常见的获取请求参数的方法,也提供了返回数据的方法。可是从另外一面来讲,它并无直接提供返回页面的方法。也就是说不能如spring等框架同样直接返回一个视图。
不过框架提供了一个静态资源路由 StaticHandler ,能够经过此路由直接访问静态页面资源,而若是须要用到FreeMarker等模板渲染框架,就须要本身在代码上实现了。
断断续续写了很久才完成这一部分,期间对于vertx框架又有了更深刻的理解。
vertx并非针对特定应用的框架,它其实很大程度上就是netty的一个最佳实践的封装。在java上实现了相似于node.js的异步处理框架。
学习vertx的最好方法其实就是去看周边项目的源码,好比vertx-web,vertx-jdbc等,在官网均有连接。代码十分简洁优美。读过这些源码对于学习和锻炼异步编程的思惟习惯有很大帮助。
这一部分就先简单介绍一下这个框架,下一部分将会用实际代码来搭建一个登录流程,会涉及到vertx-web的各个功能。