gpt4 book ai didi

java - 在@POST 之后将响应从 REST 发送到 JSP

转载 作者:行者123 更新时间:2023-11-29 04:56:07 25 4
gpt4 key购买 nike

我有一个 JSP 页面(客户端)

<form action="http://localhost:8080/REST-WS/rest/token" method="POST">
<label for="email">Email</label>
<input name="email" />
<br/>
<label for="password">Password</label>
<input name="password" />
<br/>
<input type="submit" value="Submit" />
</form>

它指向 REST Web 服务(服务器端)中的一个函数

@POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Code verify(@FormParam("email") String email,
@FormParam("password") String password,
@Context HttpServletResponse servletResponse) throws IOException {
Code code = generateRandomCode(email,password);
return token;
}

问题是我想从服务器端响应包含随机生成代码的客户端。

首先,它会被重定向到另一个JSP页面,然后客户端可以从服务器接收随机生成的代码。

我该怎么做?

最佳答案

问题是您不能在重定向中发送任意 Java 对象。不过,您可以将数据添加到查询参数中。例如

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response post(@FormParam("name") String name,
@FormParam("email") String email) {

String message = "Hello " + name + ". Your email is " + email;
URI uri = UriBuilder.fromPath("/index.jsp")
.queryParam("message", message)
.build();
return Response.seeOther(uri).build();
}

在这里,您从 jsp 页面的位置构建一个 URI,并将查询参数添加到 URI 的末尾。所以重定向将转到

http://localhost:8080/index.jsp?message=<the message>

index.jsp 页面中,您可以使用 request.getParameter("message") 获取参数。例如

<h1><%= request.getParameter("message") %></h1>

使用 JSP 和 Jersey 的另一个选择是实现 Jersey 提供支持的 MVC。你可以看看this answer ,尽管示例使用 Maven(以获取所有必需的 jar)。如果您有兴趣但不知道如何使用 Maven,请告诉我,我会看看是否可以帮助您获得所需的所有 jar。


更新

Ajax 示例。

最容易上手的 Javascript 库(如果您没有经验)是 jQuery .我不会对代码给出太多解释,这有点超出范围。我会阅读一些教程(W3Schools 有一些很好的入门指南),并且到处都有答案可以回答您的问题。

这是一个完整的工作 html 页面。只需将 var url = "/api/submit"; 更改为您要将请求发送到的任何端点。

<!DOCTYPE html>
<html>
<head>
<title>Ajax Example</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
$(document).ready(function(){
var url = "/api/submit";

$("#submitBtn").click(function(e) {
e.preventDefault();

var formData = $("#nameForm").serialize();
$.ajax({
url: url,
data: formData,
dataType: "json",
type: "POST",
success: function(data) {
var message = data.message;
var date = data.date;

var h1 = $("<h1>").text(message);
var h3 = $("<h3>").text(date);

$("#content").empty()
.append(h1).append(h3);
},
error: function(jqxhr, status, errorMsg) {
alert(status + ": " + errorMsg);
}
});
});
});
</script>
</head>
<body>
<div id="content">
<form id="nameForm">
First Name: <input type="text" name="fname"/><br/>
Last Name : <input type="text" name="lname"/><br/>
<button id="submitBtn">Submit</button>
</form>
</div>
</body>
</html>

这里是测试资源类

@Path("submit")
public class FormResource {

public static class Model {
public String message;
public String date;
}

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Model post(@FormParam("fname") String fname,
@FormParam("lname") String lname) {

String message = "Hello " + fname + " " + lname;
Model model = new Model();
model.message = message;
model.date = new Date().toString();
return model;
}
}

您需要确保您有一个 JSON 提供程序来处理 JSON Pojo 序列化,否则它将无法工作(模型 将无法序列化为 JSON)。

关于java - 在@POST 之后将响应从 REST 发送到 JSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33712809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com