博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vert x web实战教程(一)
阅读量:6084 次
发布时间:2019-06-20

本文共 2789 字,大约阅读时间需要 9 分钟。

一、 简介


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

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

从某种角度上来说,这是一套特别适合于“学习”的框架。不尽详细,很多地方需要自己领会。不过给的很齐全,而且源码真的是十分简单易懂,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的各个功能。

转载地址:http://jokwa.baihongyu.com/

你可能感兴趣的文章
修改Windows远程终端默认端口,让服务器更安全
查看>>
扩展器必须,SAS 2.0未必(SAS挺进中端存储系统之三)
查看>>
Eclipse遇到Initializing Java Tooling解决办法
查看>>
while((ch = getchar()) != '\n')
查看>>
好程序员web前端分享JS检查浏览器类型和版本
查看>>
Oracle DG 逻辑Standby数据同步性能优化
查看>>
exchange 2010 队列删除
查看>>
「翻译」逐步替换Sass
查看>>
H5实现全屏与F11全屏
查看>>
处理excel表的列
查看>>
C#数据采集类
查看>>
quicksort
查看>>
【BZOJ2019】nim
查看>>
四部曲
查看>>
LINUX内核调试过程
查看>>
【HDOJ】3553 Just a String
查看>>
Java 集合深入理解(7):ArrayList
查看>>
2019年春季学期第四周作业
查看>>
linux环境配置
查看>>
ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式
查看>>