Vert.x Web模塊(五)



模板

Vert.x-Web通過支持一些流行的模板引擎,提供了動態頁面生成的能力,可以簡單添加。模板引擎用TemplateEngine進行描述。用render方法進行模板渲染。使用模板最簡單的方法不是直接調用模板引擎,而是使用TemplateHandler處理器。此處理器爲你的HTTP請求中的路徑,調用調用模板引擎。默認模板處理器在叫templates路徑下查找模板。此路徑是可設置的。此處理器將默認返回一個text/html內容的渲染後結果。這也是要以設置的。

當你創建模板處理器時,會傳入一個你想要的模板引擎實例。模板引擎不會在vertx-web中,所以你需要配置你的項目對其進行訪問。配置將提供給每個模板引擎。這是一個例子:

TemplateEngine engine = HandlebarsTemplateEngine.create();

TemplateHandler handler = TemplateHandler.create(engine);

 

// This will route all GET requests starting with/dynamic/ to the template handler

// E.g. /dynamic/graph.hbs will look for a template in/templates/dynamic/graph.hbs

router.get("/dynamic/").handler(handler);

 

// Route all GET requests for resource ending in .hbs tothe template handler

router.getWithRegex(".+\\.hbs").handler(handler);

 

MVEL模板引擎

爲了使用MVEL,需要在項目中添加下列依賴:io.vertx:vertx-web-templ-mvel:3.2.1。用io.vertx.ext.web.templ.MVELTemplateEnine#create()方法創建MVEL模板引擎實例。在使用MVEL模板引擎時,在沒有指定模板擴展名的情況下,引擎默認查找以.templ爲擴展名的模板。

路由上下文在MVEL模板中通過context變量訪問RoutingContext,意思是可以基於上下文中的任何東西(如request,response,session或者上下文數據)來渲染模板。這是一些例子:

The request path is @{context.request().path()}

 

The variable 'foo' from the session is@{context.session().get('foo')}

 

The value 'bar' from the context data is@{context.get('bar')}

想知道怎樣編寫MVEL模板,請諮詢MVEL模板文檔。

 

Jade模板引擎

爲了使用Jade模板引擎,需要在項目中添加下面依賴:io.vertx:vertx-web-templ-jade:3.2.1。用io.vertx.ext.web.templ.JadeTemplateEngine#create()方法創建Jade模板引擎實例。在使用Jade模板引擎時,如果沒有指定文件擴展名,引擎默認用.jade擴展名查找模板。路由上下文在MVEL模板中通過context變量訪問RoutingContext,意思是可以基於上下文中的任何東西(如request,response,session或者上下文數據)來渲染模板。這是一些例子:

!!! 5

html

 head

   title=context.get('foo') + context.request().path()

 body

想知道怎樣編寫Jade模板,請諮詢Jade模板文檔。

 

Handlebars模板引擎

爲了使用Handlebars模板引擎,需要在項目中添加下面依賴:io.vertx:vertx-web-templ-handlebars:3.2.1。用io.vertx.ext.web.templ.HandlebarsTemplateEngine#create()方法創建Handlebars模板引擎實例。在使用Handlebars模板引擎時,如果沒有指定文件擴展名,引擎默認用.hbs擴展名查找模板.

Handlebar模板不調用對象上的任意方法,所臺我們不能將路由上下文傳給模板並讓模板自省處理數據,這與其他模板引擎不同。相反模板中的也可以訪問上下文數據。如果想訪問類似請求路徑,請求參數,或者會話數據,你應該在模板處理器之前將其添加到上下文數據中。例如。

TemplateHandler handler = TemplateHandler.create(engine);

 

router.get("/dynamic").handler(routingContext-> {

 

 routingContext.put("request_path",routingContext.request().path());

 routingContext.put("session_data",routingContext.session().data());

 

 routingContext.next();

});

 

router.get("/dynamic/").handler(handler);

想知道怎樣編寫Handlebars模板,請諮詢Handlebars模板文檔。

 

Thymeleaf模板引擎

爲了使用Thymeleaf模板引擎,需要在項目中添加下面依賴:io.vertx:vertx-web-templ- Thymeleaf:3.2.1。用io.vertx.ext.web.templ.ThymeleafTemplateEngine#create()方法創建Thymeleaf模板引擎實例。

Thymeleaf模板引擎實例。在使用Thymeleaf模板引擎時,如果沒有指定文件擴展名,引擎默認用.html擴展名查找模板.

路由上下文在MVEL模板中通過context變量訪問RoutingContext,意思是可以基於上下文中的任何東西(如request,response,session或者上下文數據)來渲染模板。這是一些例子:
[snip]

<pth:text="${context.get('foo')}"></p>

<pth:text="${context.get('bar')}"></p>

<p th:text="${context.normalisedPath()}"></p>

<pth:text="${context.request().params().get('param1')}"></p>

<pth:text="${context.request().params().get('param2')}"></p>

[snip]

想知道怎樣編寫Thymeleaf模板,請諮詢Thymeleaf模板文檔。



錯誤處理器


使用模板處理器或者其他方法渲染自己換錯誤信息,但是Vert.x-Web也包含了一些封裝完美的錯誤處理器,它可以爲你渲染的錯誤頁面。


此處理器叫ErrorHandler。只需在你需要處理錯誤的一些路徑上,將此處理器設置成失敗處理器,

請求日誌


Vet.x-Web包含用於記錄HTTP請求的日誌處理器LoggerHandler。默認的請求被記錄到Vert.x日誌器中,可以配置成使用JUL日誌,log4j或者SLF4J.


提供收藏圖標


Vert.x-Web包括收藏圖標處理器,用於設置瀏覽器的收藏圖標。收藏圖標可以用文件系統的路徑進行設置,或者Vert.x-Web默認在類路徑中查找名爲favicon.ico的文件作爲收藏圖標。意思是你可以將收藏圖標文件打包進你的應用jar包中。

超時處理器


Vert.x-Web含有超時處理器用於在長時間處理請求時,可以讓請求超時。可用TimeoutHandler實例進行配置。如在響應寫回之前超時,將會寫回408響應到客戶端。


這是一個使用超時處理器的例子,此處理器將會對以/foo開頭路徑的請求進行超時5秒。


router.route("/foo/").handler(TimeoutHandler.create(5000));

響應超時處理器


上處理設置頭x-response-time響應頭包含的時間,此時間是在收到請求和寫回響應頭之間的時間,例如

x-response-time: 1456ms



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章