vertx由于性能较高,逐渐变得流行。下面将一个vertx的入门案例。

添加依赖

        <!-- vertx -->
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
<version>3.5.0</version>
</dependency>

1:创建一个vertical,能够对url进行拦截

package payItem.main;

import java.util.HashMap;
import java.util.Map; import com.yiji.openapi.tool.fastjson.JSON; import io.vertx.core.AbstractVerticle;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.http.HttpMethod;
import io.vertx.core.json.Json;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.BodyHandler; public class AutoAccountVerticle extends AbstractVerticle{ public void start(){
Router router=Router.router(vertx);//创建路由
router.route().handler(BodyHandler.create()); //处理请求体body
router.route("/autoAccount").handler( //拦截url
ctx -> { //上下文
String username=ctx.request().getParam("username"); //获得请求中的参数
String password=ctx.request().getParam("password");
JsonObject jo=new JsonObject();
jo.put("username", username).put("password", password); //将参数转化为json数据,添加到JsonObject vertx.eventBus().<JsonObject> send( //事件总线,交由处理程序处理,这次请求
AutoAccountService.AUTO_ACCOUNT_SERVICE_URL, //处理程序的url
jo, //传递给处理程序的消息体,只能是基本数据类型或者JsonObject类型
result -> { //返回结果
if(result.succeeded()){
System.out.println(""+result.result().replyAddress());
ctx.response() //对前台的响应。
.putHeader("content-type", "application/json")
.end("JSON_CB(Json.encodePrettily(result.result().body()))"); //返回jsonP数据。
// .end(Json.encodePrettily(result.result().body())); //返回json数据。
}else{
ctx.response().setStatusCode(400)
.end(result.cause().toString());
}
}
); });
vertx.createHttpServer().requestHandler(router::accept).listen(8080);
} }

2:创建处理事件

package payItem.main;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject; /**
* 处理程序
* @author admin
*
*/
public class AutoAccountService extends AbstractVerticle { private SQLClient sqlClient;
public static String AUTO_ACCOUNT_SERVICE_URL="AUTO_ACCOUNT_SERVICE_URL"; public void start(){ vertx.eventBus().consumer(AUTO_ACCOUNT_SERVICE_URL, //处理的URL
msg -> {//接收的消息
JsonObject jo=(JsonObject) msg.body();
System.out.println(jo); //处理请求消息
msg.reply(jo); //返回的消息,给result。
}
);
}
}

3:在主函数中发布verticle,每个verticle,都能成为一个服务,只需添加vertx.createHttpServer().requestHandler(router::accept).listen(8080)即可,这样里面就可以设置路由功能。

但是带有主函数的verticle只能有一个

package payItem.main;

import io.vertx.core.Vertx;

public class AutoAccountMain {

    public static void main(String[] args) {
Vertx vertx=Vertx.vertx();
vertx.deployVerticle(new AutoAccountService());
vertx.deployVerticle(new AutoAccountVerticle());
}
}

4:访问:http://localhost:8080/autoAccount?username=1&passward=2

浏览器显示:

JSON_CB(Json.encodePrettily(result.result().body()))

从浏览器输入参数,到后台处理的vertx程序的更多相关文章

  1. 浏览器输入一个url到整个页面显示出来经历了哪些过程?

    https://cloud.tencent.com/developer/article/1396399 https://www.cnblogs.com/haonanZhang/p/6362233.ht ...

  2. [网络] 在浏览器输入URL回车之后发生了什么

    目录 一  前言 二  URL解析 三  DNS域名解析 1  IP 地址 2  什么是域名解析 3  浏览器如何通过域名去查询 URL 对应的 IP 呢 4  小结 四  建立连接 1  TCP三次 ...

  3. Chrome浏览器启动参数大全(命令行参数)

    前言 在开发Web项目当中,浏览器必不可少,而浏览器的启动参数可以帮我们实现很多功能. 常用参数 常用参数请参考下表. 序号 参数 说明 1 --allow-outdated-plugins 不停用过 ...

  4. 阿里云提示:对输入参数id未进行正确类型转义,导致整型注入的发生

    类似以下提示: XXX.php中,对输入参数id未进行正确类型转义,导致整型注入的发生 解决办法: 找到对应文件:$id = $_GET['id']; 增加以下标红过滤: $id = $_GET['i ...

  5. riot.js教程【三】访问DOM元素、使用jquery、mount输入参数、riotjs标签的生命周期

    前文回顾 riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法 riot.js教程[一]简介 访问DOM元素 你可以通过this.refs对象访问dom元素 而且还有大量的属性简写方式可 ...

  6. 天龙八步&quot;细说浏览器输入URL后发生了什么

    本文摘要: 1.DNS域名解析: 2.建立TCP连接: 3.发送HTTP请求: 4.服务器处理请求: 5.返回响应结果: 6.关闭TCP连接: 7.浏览器解析HTML: 8.浏览器布局渲染: 总结 输 ...

  7. 【转】浏览器输入URL后发生了什么

    转自:http://www.cnblogs.com/webdeve/p/7865520.html本文摘要: 输入网址 当我们在浏览器输入网址并回车后,一切从这里开始. 一.DNS域名解析 我们在浏览器 ...

  8. “天龙八步”细说浏览器输入URL后发生了什么

    本文摘要: 1.DNS域名解析: 2.建立TCP连接: 3.发送HTTP请求: 4.服务器处理请求: 5.返回响应结果: 6.关闭TCP连接: 7.浏览器解析HTML: 8.浏览器布局渲染: 总结 输 ...

  9. 从浏览器输入URL回车发生了什么

    在浏览器输入url后回车,整个过程发生了什么?整个过程如果节节细述的话,那非常的复杂.我就简单的描述一下整个过程 1.查询DNS,获取域名对应的IP地址 (1).浏览器搜索自身的DNS缓存 (2).搜 ...

随机推荐

  1. 脚本学习 game.sh

    #!/bin/bash #game_error.sh ]]; then #$#表示参数个数 -lt小于 echo "Usage: game_error.sh time[20170710]&q ...

  2. 对Android 开发者有益的 40 条优化建议(转)

    下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...

  3. SSL & TLS & STARTTLS

    https://www.fastmail.com/help/technical/ssltlsstarttls.html SSL vs TLS vs STARTTLS There's often qui ...

  4. Elasticsearch学习之SearchRequestBuilder常用方法说明

    SearchRequestBuilder常用方法说明  (1) setIndices(String... indices):上文中描述过,参数可为一个或多个字符串,表示要进行检索的index: (2) ...

  5. storm事务

    1. storm 事务 对于容错机制,Storm通过一个系统级别的组件acker,结合xor校验机制判断一个msg是否发送成功,进而spout可以重发该msg,保证一个msg在出错的情况下至少被重发一 ...

  6. 12个常用的JavaScript技巧

    在这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是 ...

  7. linux下php的一些问题

    一.Loaded Configuration File  none Configuration File (php.ini) Path /data/service/php/etc 在etc目录下有ph ...

  8. 2527: [Poi2011]Meteors[整体二分]

    2527: [Poi2011]Meteors Time Limit: 60 Sec  Memory Limit: 128 MB Submit: 1528  Solved: 556 [Submit][S ...

  9. python nose测试框架全面介绍六--框架函数别名

    之前python nose测试框架全面介绍二中介绍了nose框架的基本构成,但在实际应该中我们也会到setup_function等一系列的名字,查看管网后,我们罗列下nose框架中函数的别名 1.pa ...

  10. Xcode - xcode-select: error: tool 'xcodebuild' requires Xcode报错解决方案

    用mac 自带的终端执行的命令,安装安装Vapor和toolbox 安装指令: macdeMacBook-Pro:~ mac$ curl -sL check.vapor.sh| bash 结果报这个错 ...