【问题标题】:Ajax Follow Java Serverlet RedirectAjax 遵循 Java Servlet 重定向
【发布时间】:2019-10-27 19:57:16
【问题描述】:

我正在通过以下方式向 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 完成了它的工作,并将某个 URL 和 JSON 对象内的一组数据返回给 ajax 请求,ajax 请求将依次解析该数据并向指定的 POST 请求网址。

我想做的事

我想这样做不将数据返回到客户端,这意味着从 Java serverlet 直接向url 发出请求,但来自客户端的 ajax 请求也应该遵循该请求。 (用户应该被重定向到指定的 URL)

【问题讨论】:

  • @paul.F-G 不,在我的情况下,我想从 Java 本身发送 POST 请求。
  • 所以您想从 POST 请求中获取 servlet 中的其他数据,然后使用这些数据发送重定向或转发到客户端?您使用的是什么 servlet 容器?
  • 一个基本的 Web 容器,但它是独立运行的。这意味着 JS(客户端)托管在不同的服务器上,而 Java Serverlet 托管在另一台服务器上

标签: java jquery json ajax java-server


【解决方案1】:

我了解到您想在您的 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);
}

将数据发布到 servlet 内的某个 URL

(也许 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
*/

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2017-02-16
    • 2013-02-12
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多