0

我的第一个 Vertx Web 应用程序:

我希望在localhost.8080/Test获取 index.html然后找到一种方法来检索数据,但页面不显示

我有一个 RequestResponseExample 类:

public class RequestResponseExample extends AbstractVerticle {

    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();

        Router router = Router.router(vertx);

        router.post("/Test").handler(rc -> rc.response().sendFile("index.html"));

        vertx.createHttpServer()
            .requestHandler(router)
            .listen(8080);
    }

}

还有我的 Html 代码 index.html

<html>
<head>
  <meta charSet="UTF-8">
  <title>OTP Authenticator Verification Example Page</title>
</head>
<body>
<form action="/" method="post" encType="multipart/form-data">
  <div>
    <label>Code:</label>
    <input type="text" name="code"/><br/>
  </div>
  <div>
    <input type="submit" value="Submit"/>
  </div>
</form>
</body>
</html>

4

2 回答 2

2

解决方案

更改router.post(router.get(

描述

目前,您将路由器配置为仅处理 HTTPPOST请求。这意味着,它被配置为响应这样的 HTTP 请求:

POST /Test

但是当您尝试localhost.8080/Test在浏览器中打开时,它会向您的服务器发送这样的请求:

GET /Test

这就是为什么你必须告诉路由器处理GET而不是POST请求。

附加信息:GET并且POST被称为HTTP request methods。如果您想了解更多相关信息,我建议您阅读以下文章:https ://developer.mozilla.org/en-US/docs/Web/HTTP/Methods

关于垂直

在您的代码中,您可以删除extends AbstractVerticle它,它将以相同的方式工作。如果您希望您的代码在 Verticle 的上下文中执行,您必须创建您的类的一个实例,然后您必须部署它:

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.BodyHandler;

public class RequestResponseExample extends AbstractVerticle {

    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();

        vertx.deployVerticle(new RequestResponseExample());
    }

    @Override
    public void start(){
        Router router = Router.router(vertx);

        router.get("/Test").handler(rc -> rc.response().sendFile("index.html"));
        router.post().handler(BodyHandler.create());
        router.post("/").handler(rc -> System.out.println(rc.request().formAttributes().get("code")));

        vertx.createHttpServer()
            .requestHandler(router)
            .listen(8080);
    }

}

由于我看到您有点困惑,您可能还想阅读以下有关 Verticles 的文章:https ://vertx.io/docs/vertx-core/java/#_verticles

于 2022-02-07T08:50:57.597 回答
1

我认为您发送了一个GET请求,但是您处理了一个POST返回 html 文件的请求。我认为首先你必须处理一个GET返回 html 页面的请求,并且还要为表单编写一个路由。

于 2022-02-06T16:18:42.533 回答