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. Centos6下Python3的编译安装

    本文转载自 Centos6下Python3的编译安装 系统环境:CentOS 6.8-Minimal 安装Python依赖包: 1 [root@Python src]# yum install zli ...

  2. linux中根目录下各个目录的作用

    /bin 二进制可执行命令.该目录下存放着普通用户的命令 /dev 系统的设备文件,即设备的驱动程序 /home 用户主目录的基点 /lost-found 这个目录平时是空的,当系统非正常关机而留下的 ...

  3. CASE:DB shutdown/open 过程中发生异常导致JOB不能自动执行

    CASE:DB shutdown/open 过程中发生异常导致JOB不能自动执行 现象: 一个DB中的所有JOB在3月25日之后就不再自动运行,查询DBA_JOBS,发现LAST_DATE定格在3月2 ...

  4. sphinx配置文件详解

    sphinx的配置文件是在配置的时候最容易出错的了: 我们先要明白几个概念: source:数据源,数据是从什么地方来的. index:索引,当有数据源之后,从数据源处构建索引.索引实际上就是相当于一 ...

  5. js json转字符串

    在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如:JSON字符串:var str1 = '{ &quo ...

  6. Setting up Unicorn with Nginx

    gem install unicorn or gem 'unciron' 1 install Nginx yum install ... 2 Configuration vi /etc/nginx/n ...

  7. 【咸鱼教程】Egret中可长按复制的文本(例如复制优惠码)

    一 实际效果二 实现原理三 源码下载 在egret中实现长按复制文本效果,一般用于复制优惠码什么的. 一 实际效果         二 实现原理 在egret的游戏元素都是绘制在canvas上的,我们 ...

  8. 【CF914G】Sum the Fibonacci 快速??变换模板

    [CF914G]Sum the Fibonacci 题解:给你一个长度为n的数组s.定义五元组(a,b,c,d,e)是合法的当且仅当: 1. $1\le a,b,c,d,e\le n$2. $(s_a ...

  9. html如何给图片加角标

    https://segmentfault.com/q/1010000006551803?_ea=1074082 <html><style> #a1 { width: 200px ...

  10. Linguistic Data Consortium (LDC)

    搞NLP的人经常会听到一个神秘的名字LDC,因为大量的论文所使用的数据都来自于LDC,本文就来揭露其神秘面目. About LDC: LDC,全名Linguistic Data Consortium, ...