【问题标题】:Vertx server sends a HTML file twiceVertx 服务器两次发送 HTML 文件
【发布时间】:2015-12-22 00:54:18
【问题描述】:

我是初学 Java 程序员。
现在,我正在尝试使用 Vertx、SockJS 和 Openshift 制作自己的聊天服务器。
问题是,当我打开我的 openshift 网页时,并非总是如此,但有时,
Vertx 服务器会发送两次 html 文件,导致网页崩溃。就像下面一样。

<!DOCTYPE html><html>
<head>
....something
</script>
</body>
</html>HTTP/1.1 200 OK
content-type: text/html
Content-Length: 6334

<!DOCTYPE html>
<html>
<head>
 .... something
</script>
</body>
</html>

如您所见,Server 已经发送了一条消息 HTTP/1.1 200 OK,但是 Vertx sever 再次发送了一个 html 文件。
这使我的浏览器向我显示纯文本,而不是 html。
我的 Vertx 服务器脚本如下所示,

public class WebChatVerticle extends AbstractVerticle {

public static JsonArray userList = new JsonArray();
@Override
public void start(Future<Void> fut) throws Exception{
    HttpServerOptions serverOptions = new HttpServerOptions().setMaxWebsocketFrameSize(1000000);
    HttpServer server = vertx.createHttpServer(serverOptions);
    Router router = Router.router(vertx);
    router.route("/").handler(routingContext -> {
          HttpServerResponse response = routingContext.response();
          response
            .putHeader("content-type", "text/html")
            .sendFile("../app-root/repo/webroot/view/index.html");
    });
    router.route().handler(CookieHandler.create());
    SessionStore store = LocalSessionStore.create(vertx);
    SessionHandler sessionHandler = SessionHandler.create(store);
    router.route().handler(sessionHandler);
    server.requestHandler(router::accept)
    .listen(Integer.getInteger("http.port", 8080), System.getProperty("http.address"),result -> {
        if (result.succeeded()) {
            fut.complete();
          } else {
            fut.fail(result.cause());
          }
    });
}
}

通常网页看起来不错,但这种情况不会一直发生,可能只有 1/10 的机会发生。
但这让我很恼火。请帮帮我。

【问题讨论】:

  • 您是否尝试将 .end() 添加到响应中?
  • @JochenBedersdorfer 哦,是的,我试过了,但是没有用。但是,我解决了这个问题。我现在就写一个答案。

标签: html openshift vert.x


【解决方案1】:

尝试了很多方法来解决这个问题,最后我改变了我的代码,如下所示。

router.route("/").handler(routingContext -> {
      HttpServerResponse response = routingContext.response();
      response
        .putHeader("content-type", "text/html")
        .sendFile("../app-root/repo/webroot/view/index.html");
});

router.route("/").handler(StaticHandler.create()
.setWebRoot("../app-root/repo/webroot").setCachingEnabled(true));

符合 http://vertx.io/docs/vertx-web/java/,

配置索引页面

对根路径 / 的任何请求都会导致索引页面被 服务。默认情况下,索引页是 index.html。这可以是 用 setIndexPage 配置。

到目前为止,这工作正常。
但我无法解释它们之间的区别,抱歉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 2015-05-10
    • 2020-07-30
    相关资源
    最近更新 更多