Вы не можете, когда он не работает на том же 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.
Или, если это ПОСТ:
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 может быть чрезвычайно полезен в этом.