Vert.x ——Hello World

参考:https://github.com/vert-x3/vertx-web/blob/master/vertx-web/src/main/asciidoc/java/index.adoc#using-vert-x-web

代码可以直接运行,官方说3.0以后推荐使用maven,以下是pom.xml文件内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.jiahaixin</groupId>
    <artifactId>vertx-test</artifactId>
    <version>3.4.1</version>

    <dependencies>
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-core</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-web</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</project>

没有任何操作的HTTP服务 hello world,浏览器输入 http://localhost:8080/ 测试

package cn.jiahaixin.helloworld;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerResponse;

public class SimpleWebServer extends AbstractVerticle {
    public static void main(String[] args) {

        /*
         * We create an HTTP server instance, and we set a request handler on
         * it. The request handler will be called whenever a request arrives on
         * the server.
         * 
         * When that happens we are just going to set the content type to
         * text/plain, and write Hello World! and end the response.
         * 
         * We then tell the server to listen at port 8080 (default host is
         * localhost).
         * 
         * You can run this, and point your browser at http://localhost:8080 to
         * verify that it works as expected.
         */
        HttpServer server = Vertx.vertx().createHttpServer();

        server.requestHandler(request -> {

            // This handler gets called for each request that arrives on the
            // server
            HttpServerResponse response = request.response();
            response.putHeader("content-type", "text/plain");

            // Write to the response and end it
            response.end("Hello vertx!");
        });

        server.listen(8080);

        // 或者直接下边这种
        // Vertx.vertx().createHttpServer().requestHandler(req ->
        // req.response().
        // end("Hello World!")).listen(8080);

    }

}

Route是Vert.x-Web的核心内容,它是一个维护线路(Route)的对象,Router获得一个HTTP请求然后找到与这个请求相匹配的路径,并将这个请求转交到这个路径上。路径上可以关联处理事件,路径接收的请求后,触发处理事件,处理完成后结束或者转到下一个程序处理。

Vert.x-Web版Hello World,我们先创建了一个HTTPServer,然后创建了一个Router。这次我们创建了一个简单的没有任何匹配规则的Router,这意味着它将匹配所有到达服务器的请求。
然后我们为Router创建处理程序。处理程序将响应所有到达服务器的请求。
这个Router将进入标准的RoutingContext处理程序(包含标准的HttpServerRequest和HttpServerResponse)而其他的东西则使Vert.x-Web工作更简单。
每一个请求都是一个路径,每一个路径都有相应的路径的上下文实例,这些请求将被相同的上下文实例的处理程序处理。
一旦我们设置了处理程序后,所有到达服务起的请求将被处理程序响应。

package cn.jiahaixin.helloworld;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Router;

public class RouterServer extends AbstractVerticle {
    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();
        HttpServer server = vertx.createHttpServer();

        Router router = Router.router(vertx);

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

            // This handler will be called for every request
            HttpServerResponse response = routingContext.response();
            response.putHeader("content-type", "text/plain");

            // Write to the response and end it
            response.end("Hello World from Vert.x-Web!");
        });
        server.requestHandler(router::accept).listen(8080);
    }
}

package cn.jiahaixin.helloworld;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Route;
import io.vertx.ext.web.Router;

/**
 * 
 * @Description:使用Route设置具体路径,下边的例子URL为“http://localhost:8080/starfish/hello”
 * @author:star
 * @time:2017年3月29日 上午10:17:49
 */
public class RoutePathServer extends AbstractVerticle {

    public static void main(String[] args) {

        Vertx vertx = Vertx.vertx();
        HttpServer server = vertx.createHttpServer();

        Router router = Router.router(vertx);

        // 路径必须是以“/”开头的,但是Route将会忽略最后的斜杠(/),当然我们也可以使用通配符“*”,这样就能匹配以该路径开头的所有路径了
        //还有占位符“:”用于获取路径参数的,以及使用正则表达式匹配路径URI的,官网都有例子
        Route route = router.route().path("/starfish/hello/*");
        //还可以将数据放在routingContext中,put get
        route.handler(routingContext -> {


            HttpServerResponse response = routingContext.response();
            response.putHeader("content-type", "text/plain");
            response.end("Routing by exact path!");
        });
        System.out.println("PathServer.main()");
        server.requestHandler(router::accept).listen(8080);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值