您好,欢迎访问沃航(武汉)科技有限公司官方网站
一点一点学vart.x(四)
2019-06-17 23:42:57

经过前几结课程的学习,相信大家应该已经对gradle的基本使用有所了解了吧。从这节课开始教大家java的vert.x库的基本使用方法。

还记得我之前写的最基本的vert.x程序吗?就是那个只显示helloworld的程序。

import io.vertx.core.Vertx;

public class Main {
    public static void main (String args[]) {
        System.out.println("Hello world");
        // Create an HTTP server which simply returns "Hello World!" to each request.
        Vertx.vertx()
            .createHttpServer()
            .requestHandler(req -> {
                req.response()
                    .putHeader("content-type", "text/plain")
                    .end("Hello from Vert.x!");
            })
            .listen(8080, handler -> {
                if (handler.succeeded()) {
                    System.out.println("create httpserver success");
                } else {
                    System.err.println("create httpserver fail");
                }
            });
    }
}

这个程序只返回hello world,但是实际的情况中,程序会获取至少method(也就是本次请求属于POST请求还是GET请求),path(就是请求的url链接,包括get提交的问号后面的内容),以及body部分(post提交的参数)。

这节课就教教大家如何获取这几个参数。

method很容易得到,就是在回调中req参数的一个函数req.method()。path也很容易得到,就是req.path()即可。

body相对前两个来说,获取难度会比较大,因为 在实际http请求中,body可能会在连接很久后才得到,因此实际是在数据获取的回调函数中才能拿到。

回调的写法如下:

req.handler(body -> { // 接收到一个body请求
// 处理内容
});
req.endHandler(body -> { // 所有body请求接收完毕
// 处理内容
});

通常的处理方式是在req.handler中做字符拼接,在req.endHandler执行,如下:

Buffer datas = Buffer.buffer();
req.handler(data -> {
    datas.appendBuffer(data);
});
req.endHandler(body -> {
    req.response()
            .putHeader("content-type", "text/plain")
            .putHeader("Access-Control-Allow-Origin", "*")
            .end("mothod:" + req.method() + "    path:" + req.path() + "    body:" + datas);
});

此方法与nodejs中使用的方式很相近,完整的ava代码如下:

import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;

public class Main {
    public static void main (String args[]) {
        System.out.println("Hello world");
        // Create an HTTP server which simply returns "Hello World!" to each request.
        Vertx.vertx()
            .createHttpServer()
            .requestHandler(req -> {
                Buffer datas = Buffer.buffer();
                req.handler(data -> {
                    datas.appendBuffer(data);
                });
                req.endHandler(body -> {
                    req.response()
                            .putHeader("content-type", "text/plain")
                            .putHeader("Access-Control-Allow-Origin", "*")
                            .end("mothod:" + req.method() + "    path:" + req.path() + "    body:" + datas);
                });
                req.bodyHandler(body -> {
                    req.response()
                            .putHeader("content-type", "text/plain")
                            .putHeader("Access-Control-Allow-Origin", "*")
                            .end("mothod:" + req.method() + "    path:" + req.path() + "    body:" + body);
                });
            })
            .listen(8080, handler -> {
                if (handler.succeeded()) {
                    System.out.println("create httpserver success");
                } else {
                    System.err.println("create httpserver fail");
                }
            });
    }
}

另外,vert.x还提供了另一个更加方便的接收body的工具,req.bodyHandler,他会在所有的body接收完毕后调用一次。调用方式如下:

req.bodyHandler(body -> {
    req.response()
            .putHeader("content-type", "text/plain")
            .putHeader("Access-Control-Allow-Origin", "*")
            .end("mothod:" + req.method() + "    path:" + req.path() + "    body:" + body);
});

他可以减少代码量,完整的java文件如下:

import io.vertx.core.Vertx;

public class Main {
    public static void main (String args[]) {
        System.out.println("Hello world");
        // Create an HTTP server which simply returns "Hello World!" to each request.
        Vertx.vertx()
            .createHttpServer()
            .requestHandler(req -> {
                req.bodyHandler(body -> {
                    req.response()
                            .putHeader("content-type", "text/plain")
                            .putHeader("Access-Control-Allow-Origin", "*")
                            .end("mothod:" + req.method() + "    path:" + req.path() + "    body:" + body);
                });
            })
            .listen(8080, handler -> { 
                if (handler.succeeded()) {
                    System.out.println("create httpserver success");
                } else {
                    System.err.println("create httpserver fail");
                }
            });
    }
}

文章作者:沃航科技

联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn