代码可以直接运行,官方说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);
}
}