Ajax 关注 Java Servlet 重定向
Ajax Follow Java Serverlet Redirect
我正在通过以下方式向 java serverlet 发出某个 ajax 请求:
var request = $.ajax({
type: "POST",
url: MY_SERVERLET_URL,
data: MY_DATA,
dataType: 'json',
});
request.done(function(msg) {
if (msg.hasOwnProperty("status")) {
var jsonObject = msg["status"].toString();
if (jsonObject == "success") {
// GET RELEVANT URL AND DATA FROM JSON OBJECT AND REDIRECT TO
// THE URL WITH DATA ATTACHED FROM JAVASCRIPT
}
else {
// ERROR
}
}
else {
// ERROR
}
});
request.fail(function(jqXHR, textStatus) {
alert("Error : " + textStatus);
});
我做了什么
目前Java serverlet 完成它的工作并且returns 某个URL
和JSON 对象中的一组数据到ajax 请求,其中 ajax 请求将依次解析该数据并向指定的 url.
发出某个 POST 请求
我想做什么
我想这样做而不向客户端返回数据,意思是从 Java serverlet 直接向 url
但来自客户端的 ajax 请求也应该 遵循该请求 。 (用户应该被重定向到指定的 URL)
我了解到您想在您的 servlet 中发出内部 POST 请求并根据您收到的内容转发或重定向客户端。
客户端
一个简单的表格就足够了。是否使用 XHR 提交。
HTML
<form action="/yourServlet" method="POST">
<input type="hidden" name="data" value="value" />
</form>
服务器端
将参数编码为 queryString
public String getEncodedQueryString(Map<String, String> parameters) {
StringBuilder queryStringBuilder = new StringBuilder("?");
parameters.entrySet().stream().forEach(e -> {
queryStringBuilder.append(e.getKey());
queryStringBuilder.append("=");
try {
queryStringBuilder.append(
URLEncoder.encode(e.getValue() == null ? "" : e.getValue().toString(), StandardCharsets.UTF_8.name())
);
}
catch (UnsupportedEncodingException e1) {
queryStringBuilder.append("");
}
queryStringBuilder.append("&");
});
return queryStringBuilder.toString().substring(0, queryStringBuilder.toString().length()-1);
}
Post 你的数据到你的 servletURL 里面的一些
(也许 URL 也是来自 POST 的参数之一?)
URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true); // POST
connection.setRequestProperty("Accept-Charset", "UTF-8");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
try (OutputStream output = connection.getOutputStream()) {
output.write(getEncodedQueryString(request.getParameterMap()).getBytes(StandardCharsets.UTF_8));
}
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder sb = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) { sb.append(inputLine); }
in.close();
写下你的数据
request.setAttribute("param", sb.toString());
/*
return ResponseBody<> or String or whatever according
to your servlet container like you're doing usually
*/
希望对您有所帮助。
我正在通过以下方式向 java serverlet 发出某个 ajax 请求:
var request = $.ajax({
type: "POST",
url: MY_SERVERLET_URL,
data: MY_DATA,
dataType: 'json',
});
request.done(function(msg) {
if (msg.hasOwnProperty("status")) {
var jsonObject = msg["status"].toString();
if (jsonObject == "success") {
// GET RELEVANT URL AND DATA FROM JSON OBJECT AND REDIRECT TO
// THE URL WITH DATA ATTACHED FROM JAVASCRIPT
}
else {
// ERROR
}
}
else {
// ERROR
}
});
request.fail(function(jqXHR, textStatus) {
alert("Error : " + textStatus);
});
我做了什么
目前Java serverlet 完成它的工作并且returns 某个URL
和JSON 对象中的一组数据到ajax 请求,其中 ajax 请求将依次解析该数据并向指定的 url.
我想做什么
我想这样做而不向客户端返回数据,意思是从 Java serverlet 直接向 url
但来自客户端的 ajax 请求也应该 遵循该请求 。 (用户应该被重定向到指定的 URL)
我了解到您想在您的 servlet 中发出内部 POST 请求并根据您收到的内容转发或重定向客户端。
客户端
一个简单的表格就足够了。是否使用 XHR 提交。
HTML
<form action="/yourServlet" method="POST">
<input type="hidden" name="data" value="value" />
</form>
服务器端
将参数编码为 queryString
public String getEncodedQueryString(Map<String, String> parameters) {
StringBuilder queryStringBuilder = new StringBuilder("?");
parameters.entrySet().stream().forEach(e -> {
queryStringBuilder.append(e.getKey());
queryStringBuilder.append("=");
try {
queryStringBuilder.append(
URLEncoder.encode(e.getValue() == null ? "" : e.getValue().toString(), StandardCharsets.UTF_8.name())
);
}
catch (UnsupportedEncodingException e1) {
queryStringBuilder.append("");
}
queryStringBuilder.append("&");
});
return queryStringBuilder.toString().substring(0, queryStringBuilder.toString().length()-1);
}
Post 你的数据到你的 servletURL 里面的一些
(也许 URL 也是来自 POST 的参数之一?)
URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true); // POST
connection.setRequestProperty("Accept-Charset", "UTF-8");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
try (OutputStream output = connection.getOutputStream()) {
output.write(getEncodedQueryString(request.getParameterMap()).getBytes(StandardCharsets.UTF_8));
}
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder sb = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) { sb.append(inputLine); }
in.close();
写下你的数据
request.setAttribute("param", sb.toString());
/*
return ResponseBody<> or String or whatever according
to your servlet container like you're doing usually
*/
希望对您有所帮助。