Я понимаю, что вы хотите сделать внутренний 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);
}
Опубликуйте свои данные на некотором 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
*/
Надеюсь, это поможет.