vert.x提供静态文件

时间:2017-05-12 16:58:46

标签: java vert.x

我有以下Verticle类:

public class SendFileExample extends AbstractVerticle {

  public void start(Future<Void> fut) throws Exception {
      Router router = Router.router(vertx);
      router.route("/hello").handler(StaticHandler.create("client"));

      router.route("/hello").handler(routingContext -> {
          HttpServerResponse response = routingContext.response();
          System.out.println("Hello");
          response.sendFile("client/index.html");
      });

      vertx.createHttpServer().requestHandler(router::accept).listen(3000,
          result -> {
              if (result.succeeded()) {
                  fut.complete();
              } else {
                  fut.fail(result.cause());
              }
          }
      );
  }
}

我的html文件是:

<html>
<head>
    <title> hello </title>
</heade>
<body>
    <h1> Hello World </h1>
    <button> Hello </button>
    <script src="app.js"></script>
</body>
</html>

我使用“StaticHandler.create ...”来提供客户端文件夹中的所有静态文件。 您可以理解,我希望一旦服务器获得“localhost:3000 / hello”的GET请求,客户端将获得一个HTML页面,该页面将调用app.js文件。

不幸的是,我不能这样做。 index.html已加载,浏览器无法加载app.js.

重要的是要注意index.html和app.js都位于$ {PROJECT_ROOT} / client的同一路径中。

但是,代码位于: $ {PROJECT_ROOT} / SRC /主/ JAVA / COM /公司。

2 个答案:

答案 0 :(得分:2)

在定义静态处理程序时,您只是错过了星号:

router.route("/hello*").handler(StaticHandler.create("client"));

答案 1 :(得分:1)

为什么不尝试直截了当的事情:

 if (req.path().equals("/")) {
   res.sendFile("client/index.html");
 }else{
   res.sendFile( "client" + req.path() );
 }