Vert.x-Web的讲解和使用(三)

接上章 Vert.x-Web的讲解和使用(三)

跨域资源共享(CORS handling)

跨域资源共享对于多个域请求一个资源是一个安全的机制。

Vert.x-Web包含了一个CorsHandler为你处理CORS协议。

例如:

router.route().handler(CorsHandler.create("vertx\\.io").allowedMethod(HttpMethod.GET));

router.route().handler(routingContext -> {

  // Your app handlers

});

想要了解更多请看CORS文档。

模板(Templates)

Vert.x-Web通过开箱即用的几个流行的模板引擎实现动态页面生成的功能。可以非常简单的添加到你的项目中。

TemplateEngine定义了模板引擎,你还可以使用render来渲染模板。

最简单的使用模板的方法是使用TemplateHandler而不是使用模板引擎,TemplateHandler基于Http请求的路径为你调用模板引擎。

默认情况下TemplateHandler将会在templates路径下寻找模板。你也可以配置其他路径。

TemplateHandler默认的返回结果的Conten-type是text/html。你可以设置它为其他的值。

当你创建一个TemplateHandler的时候你需要给它传送一个TemplateEngine的实例。

如下例子:

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 to the template handler
router.getWithRegex(".+\\.hbs").handler(handler);

MVEL模板引擎(MVEL template engine)

在你使用MVEL模板引擎的时候,如果你没有指定特殊的扩展名称的话,模板引擎将会在默认的目录下匹配以.templ为扩展名的模板文件。

RoutingContext可以被用在MVEL模板的上下文变量,这意味着你可以基于RoutingContext任何对象来渲染模板,例如:request,response,session或者 context data。

例如:

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 template engine)

在你使用Jade模板引擎的时候,如果你没有指定特殊的扩展名称的话,模板引擎将会在默认的目录下匹配以.jade为扩展名的模板文件。

RoutingContext可以被用在Jade模板的上下文变量,这意味着你可以基于RoutingContext任何对象来渲染模板,例如:request,response,session或者 context data。

例如:

!!! 5
html
  head
    title= context.get(‘foo‘) + context.request().path()
  body

请查阅Jade模板文档去了解如何使用Jade模板。

Handlebars模板引擎(Handlebars template engine)

在你使用Handlebars模板引擎的时候,如果你没有指定特殊的扩展名称的话,模板引擎将会在默认的目录下匹配以.hbs为扩展名的模板文件。

Handlerbars模板引擎不支持对象的任意方法的调用,所以我们不能像使用其他模板那样仅仅将RoutingContext对象传递给它让它自己解析。

相反的,ContextData是可以在模板中使用的。

如果你想使用像请求路径,请求参数,或Session数据这样的数据,你需要将它们在TemplateHandler处理之前添加到 Context Data中。

例如:

TemplateEngine engine = HandlebarsTemplateEngine.create();
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 template engine)

在你使用Thymeleaf模板引擎的时候,如果你没有指定特殊的扩展名称的话,模板引擎将会在默认的目录下匹配以.html为扩展名的模板文件。

RoutingContext可以被用在Jade模板的上下文变量,这意味着你可以基于RoutingContext任何对象来渲染模板,例如:request,response,session或者 context data。

例如:

[snip]
<p th:text="${context.get(‘foo‘)}"></p>
<p th:text="${context.get(‘bar‘)}"></p>
<p th:text="${context.normalisedPath()}"></p>
<p th:text="${context.request().params().get(‘param1‘)}"></p>
<p th:text="${context.request().params().get(‘param2‘)}"></p>
[snip]

请查阅Thymeleaf模板文档去了解如何使用Thymeleaf模板。

错误处理程序(Error handler)

你可以使用一个TemplateHandler或者其他的方法呈现你的错误,但是Vert.x-Web提供了一个漂亮的开箱即用的错误处理程序,你同样可以使用它来呈现错误。

这个处理程序是ErrorHandler,就像一个失败处理程序一样将它设置到你想覆盖的路径上就可以轻松的使用它。

请求日志(Request logger)

你可以使用LoggerHandler来记录HTTP请求的日志。

默认的请求将会被记录到Vert.x的日志,可以配置为使用JUL,log4j 或者SLF4J.

超时处理(Timeout handler)

Vert.x-Web 包含了一个TimeoutHandler,你可以用它去超时某个你认为处理时间过长的请求。

你可以去配置一个TimeoutHandler的实例。

如果一个请求超时,Response将会返回一个408的响应到客户端。

这里有个使用TimeoutHandler例子,请求到/foo路径下的所有请求在五秒后得不到响应就会超时。

router.route("/foo/").handler(TimeoutHandler.create(5000));
时间: 2024-08-13 20:08:53

Vert.x-Web的讲解和使用(三)的相关文章

第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号

第三百三十节,web爬虫讲解2-urllib库爬虫-实战爬取搜狗微信公众号 封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import json import random import re import urllib.error def hq_html(hq_url): """ hq_html()封装的爬虫函数,自动启用了用户代理和ip

第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+

第三百三十七节,web爬虫讲解2-PhantomJS虚拟浏览器+selenium模块操作PhantomJS PhantomJS虚拟浏览器 phantomjs 是一个基于js的webkit内核无头浏览器 也就是没有显示界面的浏览器,利用这个软件,可以获取到网址js加载的任何信息,也就是可以获取浏览器异步加载的信息 下载网址:http://phantomjs.org/download.html  下载对应系统版本 下载后解压PhantomJS文件,将解压文件夹,剪切到python安装文件夹 然后将P

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

第三百三十四节,web爬虫讲解2-Scrapy框架爬虫-Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻标题和rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息,那么这种一般都是 js 的 Ajax 动态请求生成的信息 我们以百度新闻为列: 1.分析网站 首先我们浏览器打开百度新闻,在网页中间部分找一条新闻信息 然后查看源码,看看在源码里是否有

第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

第三百三十三节,web爬虫讲解2-Scrapy框架爬虫-Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于start_urls,start_requests()返回的请求会替代start_urls里的请求 Request()get请求,可以设置,url.cookie.回调函数 FormRequest.from_response()表单post提交,第一个必须参数,上一次响应cookie的response对象,其

Vert.x Web之Router

Vert.x Web 是一系列用于基于 Vert.x 构建 Web 应用的构建模块. Vert.x Web 的大多数特性被实现为了处理器(Handler),因此您随时可以实现您自己的处理器.我们预计随着时间的推移会有更多的处理器被实现. 使用 Vert.x Web <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-web</artifactId> <version>3

Web API路由与动作(三)

本章包括三个小节  如果你输入了mvc的路由规则 这个可以粗略过一遍即可  内容说明有点繁琐 原文地址:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api 3.1ASP.NET Web API中的路由 本节描述ASP.NET Web API如何将HTTP请求路由到控制器 如果你熟悉ASP.NET MVC,Web API路由与MVC路由十分类似.主要差别是Web API使

打印web页面指定区域的三种方法

本文和大家分享一下web页面实现指定区域打印功能的三种方法,一起来看下吧. 第一种方法:使用CSS 定义一 个.noprint的class,将不打印的内容放入这个class内. 代码如下: <style media="print" type="text/css"> .noprint{visibility:hidden} </style>这 里是要打印的内容.<p class="noprint">这里是不打印的内

java web 静态资源访问配置三种方式

方案一:Tomcat的defaultServlet来处理静态文件 要放在DispatcherServlet的前面, 让 defaultServlet先拦截请求,这样请求就不会进入Spring了 方案二: 在spring3.0.4以后版本提供了mvc:resource /images/**映射到ResourceHttpRequestHandler进行处理,location指定静态资源的位置.可以是web application根目录下.jar包里面,这样可以把静态资源压缩到jar包中.cache-

Spring Web Flow 入门demo(三)嵌套流程与业务结合 附源码

上篇博客我们说Spring web Flow与业务结合的方式主要有三种,下面我们主要介绍一下第三种的应用方式 3,执行到<action-state> 元素 SpringWeb Flow 中的这个 <action-state> 是专为执行业务逻辑而设的 state .如果某个应用的业务逻辑代码既不适合放在transition 中由客户端来触发,也不适合放在 Spring Web Flow 自定义的切入点,那么就可以考虑添加<action-state> 元素专用于该业务逻辑

Spring Web Flow 入门demo(三)嵌套流程与业务结合 附源代码

上篇博客我们说Spring web Flow与业务结合的方式主要有三种,以下我们主要介绍一下第三种的应用方式 3,运行到<action-state> 元素 SpringWeb Flow 中的这个 <action-state> 是专为运行业务逻辑而设的 state . 假设某个应用的业务逻辑代码既不适合放在transition 中由client来触发,也不适合放在 Spring Web Flow 自己定义的切入点,那么就能够考虑加入<action-state> 元素专用于