当前位置: 首页 > 知识库问答 >
问题:

Vertx请求不会在sendFile引发时结束

易成天
2023-03-14

我是Vert.x的新手,我试图创建一个简单的下载服务。

        VertxOptions options = new VertxOptions();
        options.setBlockedThreadCheckInterval(1000*60*60);

        Vertx vertx = Vertx.vertx(options);     
        HttpServer server = vertx.createHttpServer();
        Router router = Router.router(vertx);
        router
            .route(HttpMethod.GET,"/foo")
            .handler(ctx->{
                // this path exist but is not a file, is a directory.
                ctx.response().sendFile("docs/pdf",asr->{
                    if(asr.failed()) {
                        ctx.response()
                            .setStatusCode(404)
                            // I can't end the connection the only thing I can do is close it
                            // I've commented out this lambda because is not what I want to happen.
                            // It's just an hack to end the request all the same.
                            .end("File not found: "+"docs/pdf" /*, (x)->{ctx.response().close();}*/ );
                    }
                });
            });

        server
            .requestHandler(router)
            .listen(3000);

当此错误发生时,没有数据通过线路发送,我检查了浏览器和嗅探数据包TCP数据包(0字节从服务器发送到浏览器)。

唯一有效的方法是使用response#close()关闭连接,这至少关闭了keep-alive http连接,并结束浏览器请求。

我想要实现的是向客户机发回一些信息,以告知发生了错误,可能将状态代码设置为适当的4**错误,并可能向其添加一些细节(在状态文本或响应正文中)。

共有1个答案

微生信鸿
2023-03-14

您应该将FailureHandler添加到路由器:

route.failureHandler(frc-> {
  frc.response().setStatusCode( 400 ).end("Sorry! Not today");
});

参见https://vertx.io/docs/vertx-web/java/#_error_handling

 类似资料:
  • 我有一个创建处理程序,其中包含这样的验证方法: 在validate方法中,我检查输入,如果输入无效,我将其写入响应: 问题是,如果输入无效,我希望处理程序结束。但发生的情况是,如果输入无效,它会设置statusCode并写入响应,然后它继续创建方法中的流程,当它运行最后一行时,它想再次写入响应并抛出异常。我想在输入无效时结束或中止请求。我该怎么做? }

  • 问题内容: 我在我的网站上做了一些非常基本的jQuery ajax的工作,并且遇到了很多麻烦。 以下是相关代码: 该页面是通过HTTPS加载的,但是XMLHttpRequests似乎是通过HTTP输出的。 我甚至尝试将URL更改为绝对URL(https://larsendt.com/jsontest/randomdata),它 仍然 将请求发送到我的站点的HTTP版本。 自然,由于请求将转到其他协

  • 问题内容: 我需要编写一个Python脚本,该脚本向同一站点发出多个HTTP请求。除非我错了(而且我很可能会这样),否则urllib会为每个请求重新进行身份验证。出于某种原因,我将不进行讨论,我需要能够进行一次身份验证,然后将该会话用于其余的请求。 我正在使用python 2.3.4 问题答案: 如果要保留身份验证,则需要重用cookie。我不确定urllib2在python 2.3.4中是否可用

  • 问题内容: 我正在使用JSF 2.0和primefaces。我有一个页面,其中包含一个表单中的多个输入和一个按钮,该按钮使用ajax将新记录添加到表中。一切正常。然后,我使用JavaScript添加了客户端验证。这是命令按钮的代码: 如果验证失败,它将按预期工作,并且不会在表中添加该记录。通过验证时出现问题:添加了记录,但重新加载了页面(ajax无法正常工作)。如果我删除了ajax,可以再次使用。

  • 我正在编写一个简单的脚本,涉及CAS、jSpring Security检查、重定向等。我想使用Kenneth Reitz的python请求,因为这是一个很棒的工作!然而,CAS需要通过SSL进行验证,所以我必须首先通过这一步。我不知道Python requests需要什么?这个SSL证书应该驻留在哪里?

  • 我试图使用android HttpUrlConnection进行POST请求。首先,我从这里使用GET请求的示例: http://developer.android.com/training/basics/network-ops/connecting.html#http-客户 它工作得非常好(例如,我得到了google.com页面)。然后我做了一些更改以发出POST请求:更改POST上的请求方法: