Ответ 1
Вы не можете, если он не запускается на том же ServletContext
или том же/кластерном веб-сервере, где веб-приложения настроены для совместного использования ServletContext
(в случае Tomcat, установите флажок crossContext
).
Вы должны отправить перенаправление HttpServletResponse.sendRedirect()
. Если ваша актуальная проблема заключается в повторном использовании параметров запроса на новом URL-адресе, просто отправьте их по почте.
response.sendRedirect(newURL + "?" + request.getQueryString());
Или, когда это POST, отправьте HTTP 307 перенаправление, клиент повторно применит те же параметры запроса POST на новый URL.
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
response.setHeader("Location", newURL);
Обновить в соответствии с комментариями, что, по-видимому, не является вариантом, так как вы хотите скрыть URL. В этом случае вы должны позволить сервлету играть за прокси. Вы можете сделать это с помощью HTTP-клиента, например. Java SE предоставил java.net.URLConnection
(мини-учебник здесь) или более удобный Apache Commons HttpClient.
Если он GET, просто выполните:
InputStream input = new URL(newURL + "?" + request.getQueryString()).openStream();
OutputStream output = response.getOutputStream();
// Copy.
Или если это POST:
URLConnection connection = new URL(newURL).openConnection();
connection.setDoOutput(true);
// Set and/or copy request headers here based on current request?
InputStream input1 = request.getInputStream();
OutputStream output1 = connection.getOutputStream();
// Copy.
InputStream input2 = connection.getInputStream();
OutputStream output2 = response.getOutputStream();
// Copy.
Обратите внимание, что вам, возможно, потребуется захватить/заменить/обновить относительные ссылки в ответе HTML, если таковые имеются. Jsoup может быть очень полезным в этом.