我有一个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页面,然后客户端可以从服务器接收随机生成的代码。
我该怎么做?
答案 0 :(得分:2)
问题是您无法在重定向中发送任意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的另一个选择是实现MVC,Jersey提供支持。您可以查看this answer,但示例使用Maven(以获取所有必需的jar)。如果您有兴趣并且不知道如何使用Maven,请告诉我,我会看看是否可以帮助您获得所需的所有罐子。
最简单的Javascript库入门(如果您没有经验)是jQuery。我不会真正对代码做出太多解释,这有点超出了范围。我会通过一些教程(W3Schools有一些很好的入门指南),并且有SO的答案可以回答你的问题。
这是一个完整的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序列化,否则它将无法工作(Model
将无法进行JSON升级)。