HTTP路由handlersjava
根據依賴URL模式和HTTP方法,startHttpServer的路由實例會指向不一樣的handlers,每個handlers處理一個HTTP請求,執行一個數據庫查詢,渲染一個FreeMarker模板的HTML頁面。數據庫
頁面目錄handler瀏覽器
wiki的頁面目錄提供了連接的入口,或者建立一個新的:微信
這是直接將select * SQL查詢返回的結果數據傳遞給FreeMarker模板來渲染到HTML響應。異步
indexHandler方法的代碼以下:maven
1.SQL查詢的結果會經過JsonArray和JsonObject的對象返回。編輯器
2.RoutingContext對象將使用key/value的數據,使之用於模板或者路由handlers鏈。ide
3.渲染一個模板,這是一個異步的操做,須要咱們使用AsyncResult。ui
4.AsyncResult包含一個模板渲染成功的String,咱們能夠結束使用這個值。設計
5.在失敗的狀況下,RoutingContext提供一個方式來返回一個HTTP 500錯誤給HTTP客戶端的。
FreeMarker模板須要放在src/main/resources/templates,其中的index.ftl模板代碼以下:
Key / value的數據存在RoutingContext對象裏,能夠經過FreeMarker的context獲取。
既然多數的模板有公用的header和footers,咱們提取了下面的代碼到header.ftl
and footer.ftl
wiki頁面渲染handler
這個handler處理HTTP的GET請求,渲染以下的頁面:
頁面上提供了一個編輯的按鈕,而不是有一個單獨的處理程序和模板,咱們僅僅依靠JavaScript和CSS切換編輯器,當按鈕被點擊:
pageRenderingHandler方法的代碼以下:
1.獲取URL請求中的參數(/wiki/:name)
2.經過使用JsonArray傳遞參數來取代SQL語句中的 ?。
3.來自txtmark Markdown中的Processor是咱們是會用的渲染類庫。
page.ftl的模板代碼以下:
Page建立handler:
在首頁提供了一個屬性來建立新的頁面,設計的HTML和URL都會由這個handler管理,這個策略並非實際上在數據庫中建立一條記錄,而是重定向到一個Wiki頁面來建立。既然這個Wiki頁面並不存在,pageRenderingHandler方法將會使用一個默認的文本,最終用戶能夠來剪輯和保存這個頁面。
這個方法是pageCreateHandler,它的重定向是經過HTTP的狀態碼303:
頁面保存Handler
pageUpdateHandler方法用來處理保存頁面的HTTP POST請求,當一個頁面已經存在的時候也是這個(執行SQL的update操做)或者保存一個新的頁面(使用SQl中的額insert操做)
1.RoutingContext能夠獲取HTTP POST請求中的表單參數,注意沒有BodyHandler Router配置的,這些值將無效,須要手動解碼HTTP POST的請求數據。
2.咱們在page.ftl使用了一個hidden值,用了知道是否事更新一個已經有的頁面仍是建立一個。
3.Again,咱們須要把SQL的查詢參數放到JsonArray中。
4.updateWithParams方法用於insert
/ update
/ delete
SQL操做。
5.成功後沒咱們將重定向到那個編輯過的頁面。
頁面刪除handler
pageDeletionHandler實現的方法事比較直接的。經過傳遞一個wiki記錄的惟一標識,而後執行SQL的delete操做後重定向到首頁:
終於要運行這個應用:
在這個階段,咱們有了一個能夠運行的獨立應用。
在運行以前咱們須要使用maven構建一下:
mvn clean package
在構建完成後會生成一個Jar包(包含了全部的依賴,Vert.x 和 a JDBC ),運行是比較簡單的:
java -jar target/wiki-step-1-1.1.0-fat.jar
而後咱們能夠選擇本身喜歡的瀏覽器訪問 http://localhost:8080/ ,enjoy!
原文連接:http://vertx.io/docs/guide-for-java-devs/
個人微信公衆號: