Vert.x Web模块(五)

来源:互联网 发布:东西方神魔大战 知乎 编辑:程序博客网 时间:2024/05/16 23:54


模板

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



0 0