目录
- Vert.x系列(零),开篇,认识Vert.x并创建一个Http服务
- Vert.x系列(一),Http Router
- Vert.x系列(二),编写REST API并解析请求参数
- Vert.x系列(三),加载静态资源文件
- Vert.x系列(四),EventBus事件总线
- Vert.x系列(五),基于EventBus构建分布式应用
正文
1、简单介绍
先来认识Router(路由);Http Router是用来负责转发http请求到具体方法的。
(图一)
用户从浏览器打开http://localhost:8080/users,程序就会执行getUserList方法,做一些逻辑处理后返回数据给浏览器。
程序能够通过/users找到getUserList方法执行,就是靠Router来实现的。
在spring中Router是通过@ReqeustMapping注解来配置的,比较古老的status框架是通过xml文件映射,而PlayFramework有一个专门的router文件在conf目录下。
各种方式都有,只要记住,Router就是uri跟方法的一个映射就可以了。
2、Vert.x Router实战
在Vert.x中http路由,由Router实例负责管理。请参考下面代码跟着笔者实现图一中的示例。
package com.javafm.vertx;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.http.HttpServer;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.RoutingContext;
public class SimpleHttpServerVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
HttpServer server = vertx.createHttpServer();
Router router = Router.router(vertx);
router.route("/login").handler(this::login);
router.post("/user").handler(this::addUser);
router.delete("/user").handler(this::deleteUser);
router.get("/users").handler(this::getUserList);
server.requestHandler(router);
server.listen(8080);
}
private void getUserList(RoutingContext ctx) {
out(ctx, "getUserList");
}
private void deleteUser(RoutingContext ctx) {
out(ctx, "deleteUser");
}
private void addUser(RoutingContext ctx) {
out(ctx, "addUser");
}
private void login(RoutingContext ctx) {
out(ctx, "login");
}
private void out(RoutingContext ctx, String msg) {
ctx.response().putHeader("Content-Type", "text/plain; charset=utf-8")
.end(msg);
}
}
从代码中可以看到,首先创建了一个Router实例,然后通过router、post、delete、get等方法路由到不同的地方去了。在Vert.x中路由的目标叫做Handler(对应在spring中一般叫controller,在status中叫action)。
Vert.x的Router支持所有的http method。如果用post方法来路由Handler,那么这个handler就只能用post请求访问,其它请求方式也是一样的,一一对应。 对Router是否有了大概的了解?那么开始撸代码吧。
本文源代码地址:https://gitee.com/dev-tang/learning-vertx/tree/learn-02/