Vert.x:如何发送post请求?
Vert.x: How to send a post request?
我的第一个 Vertx Web 应用程序:
我希望在 localhost.8080/Test 获取 index.html 然后找到检索数据的方法,但是 该页面没有' t 显示
我有一个 RequestResponseExample class:
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>
我认为您发送了一个 GET
请求,但是您处理了 return html 文件的 POST
请求。
我认为首先你必须处理 GET
请求,即 return html 页面,并为表单编写路由。
解决方案
将 router.post(
更改为 router.get(
。
描述
目前,您正在将路由器配置为仅处理 HTTP POST
请求。也就是说,它被配置为响应这样的 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 的上下文中执行,你必须创建你的 class 的实例,然后你必须部署它:
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
我的第一个 Vertx Web 应用程序:
我希望在 localhost.8080/Test 获取 index.html 然后找到检索数据的方法,但是 该页面没有' t 显示
我有一个 RequestResponseExample class:
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>
我认为您发送了一个 GET
请求,但是您处理了 return html 文件的 POST
请求。
我认为首先你必须处理 GET
请求,即 return html 页面,并为表单编写路由。
解决方案
将 router.post(
更改为 router.get(
。
描述
目前,您正在将路由器配置为仅处理 HTTP POST
请求。也就是说,它被配置为响应这样的 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 的上下文中执行,你必须创建你的 class 的实例,然后你必须部署它:
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