模板
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