静态资源
Vert.x-Web带有开箱即用的处理器(StaticHandler),用于处理静态Web资源(.html, .css, .js, …), 因此可以非常轻松地编写静态Web服务器。
默认静态文件目录为类路径下的webroot目录,对于maven的项目,按规范放在src/main/resources/webroot下,但可以配置。例如:
Vert.x Web相关代码如下:
java">public class WebServer1 {public static void main(String[] args) {Vertx vertx = Vertx.vertx();HttpServer server = vertx.createHttpServer();Router router = Router.router(vertx);// StaticHandler来处理静态文件// 需要注意的是静态文件要放到webroot(resources/webroot)里面StaticHandler staticHander = StaticHandler.create()//.create("D:/www/test/") // 指定web-root, 注意Windows下的路径格式, 是"/", 而不是"\".setCachingEnabled(true).setDirectoryListing(false).setIndexPage("index.html");router.route("/html/*").handler(staticHander);server.requestHandler(router).listen(8080);}
}
index.html的代码如下:
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><title>Hello Vert.X</title><link rel="stylesheet" href="./static/layui/css/layui.css"><script src="./static/layui/layui.js"></script>
</head>
<body><div class="layui-container"><div class="layui-row layui-col-space12" style="margin-top: 18px;"></div><div class="layui-card"><div class="layui-card-header" style="background-color: #dddddd;"><b>Hello Vert.x Web</b></div><div class="layui-card-body">Vert.x-Web is a set of building blocks for building web applications with Vert.x.</div></div></div></div>
</body>
</html>
通过浏览器访问http://127.0.0.1:8080/html/,浏览器返回index.html页面的内容。
模板
Vert.x Web为若干流行的模板引擎提供了开箱即用的支持,通过这种方式来提供生成动态页面的能力。TemplateEngine定义了使用模板引擎的接口。 当渲染模板时会调用render方法。
最简单的使用模板的方式不是直接调用模板引擎,而是使用模板处理器TemplateHandler。 这个处理器会根据 HTTP 请求的路径来调用模板引擎。
缺省情况下,模板处理器会在类路径下的templates目录中查找模板文件。这是可以配置的。该处理器会返回渲染的结果,并默认设置Content-Type消息头为text/html 。这也是可以配置的。
Vert.x Web提供了每一种模板引擎的配置。 使用模板引擎需要先引入对应依赖,并在创建模板处理器时提供所使用的模板引擎实例。 接下来以使用Thymeleaf模板引擎为例,首先需要在maven项目中引入依赖:
<dependency><groupId>io.vertx</groupId><artifactId>vertx-web-templ-thymeleaf</artifactId><version>4.5.10</version>
</dependency>
注意,对于Thymeleaf模板引擎,不同版本的用法是有比较大的区别的,网上很多案例都是基于4.x版本之前的。4版本的用法建议参考github上的官方案例"vertx-examples-4.x"。
以下写个thymeleaf模板,并进行渲染,模板存放目录: webroot/templates/thymeleaf/
Vert.x Web相关代码:
java">ThymeleafTemplateEngine engine = ThymeleafTemplateEngine.create(vertx);
router.route("/thy/hello.html").handler(routingContext -> {JsonObject data = new JsonObject().put("osName", System.getProperty("os.name")).put("osArch", System.getProperty("os.arch")).put("osVersion", System.getProperty("os.version")).put("jvmName", System.getProperty("java.runtime.name")).put("jvmVersion", System.getProperty("java.runtime.version"));engine.render(data, "webroot/templates/thymeleaf/hello-templ.html", ar -> { // 模板位置if (ar.succeeded()) {routingContext.response().end(ar.result());} else {routingContext.fail(ar.cause());}});
});
模板相关代码:
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><title>Hello Vert.X</title><link rel="stylesheet" href="../html/static/layui/css/layui.css"><script src="../html/static/layui/layui.js"></script>
</head>
<body><div class="layui-container"><div class="layui-row layui-col-space15"><div class="layui-col-md8"><table class="layui-table"><thead><tr style="background-color: #94BDD8;"><th>服务器属性</th><th>属性值</th></tr></thead><tbody><tr><td>OS Info</td><td th:text="${osName} + ', ' + ${osVersion} + ', ' + ${osArch}"></td></tr><tr><td>JVM Info</td><td th:text="${jvmName} + ', ' + ${jvmVersion} "></td></tr></tbody></table></div></div></div>
</body>
</html>
浏览器访问http://127.0.0.1:8080/thy/hello.html, 返回如下: