vert x web實戰教程(一)

1、 簡介


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

2、基本類


要想學習vert.x-web,首先要忘掉servlet什麼的東西,而後忘掉spring-mvc什麼的web框架。編程

接下來必需要了解幾個基本的類:api

  • 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的各個功能。

相關文章
相關標籤/搜索