Ajax Follow Java Serverlet Redirect - PullRequest
0 голосов
/ 13 июня 2019

Я делаю определенный ajax-запрос к серверу Java следующим образом:

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-сервер завершаетсяего работа и возвращает определенный URL и набор данных внутри объекта JSON в запрос ajax, где запрос ajax, в свою очередь, проанализирует эти данные и сделает определенный запрос POST по указанному URL.

Что я хочу сделать

Я хочу сделать это , не возвращая данные на клиентскую сторону , то есть сделать запрос от серверного Java-сервера напрямуюurl но запрос ajax со стороны клиента также должен следовать этому запросу .(Пользователь должен быть перенаправлен на указанный URL-адрес)

1 Ответ

1 голос
/ 13 июня 2019

Я понимаю, что вы хотите сделать внутренний POST-запрос в вашем сервлете и переслать или перенаправить клиента в соответствии с тем, что вы получили.

activity

Клиентская сторона

Может быть достаточно простой формы.Отправить с 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);
}

Опубликуйте свои данные на некотором 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
*/

Надеюсь, это поможет.

...