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