vert x web实战教程(一)

一、 简介


vert.x-web是基于vertx的一套http服务框架。官网如下:

vert.x-web

vert.x-web是不同于j2ee标准的web服务,基于netty容器,异步执行,在思想上更接近于node.js。写多了各种ssh/ssm框架之后,体验一下不同的口味也是很不错的。

从某种角度上来说,这是一套特别适合于“学习”的框架。官方的文档不尽详细,很多地方需要自己领会。不过官方的demo给的很齐全,而且源码真的是十分简单易懂,clone下来看一遍也是没问题的,能够从里面学到很多好东西。vert.x在很多思想和java新特性的应用上都是十分领先的。

其实vert.x本身就是支持http协议的,所以vert.x-web说到底是vert.x的一个扩展类库,封装并实现了一些常用的web功能。在代码的难度上自然就下降了很多。

下面是官网给出的hello world程序,有一定node.js基础的同学一定看起来十分熟悉:

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页面什么的。

不过话说回来,java的东西翻来覆去都离不开java se的套路,搞一遍vert.x对于理解web服务器的某些原理也是非常有益的。

二、基本类


要想学习vert.x-web,首先要忘掉servlet什么的东西,然后忘掉spring-mvc什么的web框架。

接下来必须要了解几个基本的类:

  • Vertx
  • Verticle
  • HttpServer
  • Handler
  • Router
  • RoutingContxt

下面我们来说说这些东西。

Vertx & Verticle

看名字就知道这个类很NB了是吧:-D

Vertx类是Vert.x框架的核心api入口。更形象的说,它就是“当前这个应用”,或者说android中的Application类。服务的整个生命周期都离不开这个类的实例。在写代码的时候你会发现时刻都会遇到这个类。

另外当我们需要写一些阻塞的代码的时候,也需要用到这个类来创建一个阻塞的任务。

Verticle是Vert.x框架中的一个核心概念。如果说Vertx是“应用”,那么Verticle就是应用中的一个服务。

另一个更形象一点的比喻,如果说Vertx是一个机架,那么Veticle就是机架上的服务器。

然而,因为我们在这里只要初学vert.x-web框架,这个东西只要知道它的存在就差不多了。同样想深入学习vert.x,请到官网仔细阅读相关文档。

HttpServer & Handler & Router

恩恩,这个就是我们的Http服务器了。

但是你不要以为这就开始学习到web了!其实你仔细看一下源码就知道,HttpServer这个类还是属于vertx.core包下的东西。

这个就是vert.x原封提供的http服务器了。估计是因为netty的强大功能,翻看一下文档可以发现vert.x提供了tcp/http等协议的服务端和客户端实现,甚至还有个dns client可以用。

但是HttpServer需要了解一点东西。

HttpServer有两个需要用到的api:

  • HttpServer.requestHandler(Handler handler)
  • HttpServer.listen(port)

第二个就是开始监听指定端口,不必多说,这里说说第一个。

如果有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翻译为“处理机,处理者”,它是一个接口。实现了这个接口,说明这个类可以对传入的数据进行一些处理工作。并不局限于程序的某一层。

RoutingContext

如果有用过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的各个功能。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值