Vous ne pouvez pas le faire quand cela ne s'exécute pas dans le même ServletContext
ou le même/clustered serveur web où les webapps sont configurées pour partager le ServletContext
(dans le cas de Tomcat, vérifiez l'option crossContext
).
Vous devez envoyer une redirection en utilisant HttpServletResponse.sendRedirect()
. Si votre préoccupation actuelle est de réutiliser les paramètres de la requête sur la nouvelle URL, il suffit de les renvoyer.
response.sendRedirect(newURL + "?" + request.getQueryString());
Ou s'il s'agit d'une requête POST, envoyez une redirection HTTP 307, le client réappliquera les mêmes paramètres de requête POST sur la nouvelle URL.
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
response.setHeader("Location", newURL);
Mise à jour selon les commentaires, cela ne semble pas être une option non plus puisque vous souhaitez masquer l'URL. Dans ce cas, vous devez laisser le servlet jouer en tant que proxy. Vous pouvez le faire avec un client HTTP, par exemple le java.net.URLConnection
fourni par Java SE (mini tutoriel ici) ou le plus pratique Apache Commons HttpClient.
S'il s'agit d'une requête GET, faites simplement :
InputStream input = new URL(newURL + "?" + request.getQueryString()).openStream();
OutputStream output = response.getOutputStream();
// Copie.
Ou s'il s'agit d'une requête POST :
URLConnection connection = new URL(newURL).openConnection();
connection.setDoOutput(true);
// Définir et/ou copier les en-têtes de requête ici en fonction de la requête actuelle ?
InputStream input1 = request.getInputStream();
OutputStream output1 = connection.getOutputStream();
// Copie.
InputStream input2 = connection.getInputStream();
OutputStream output2 = response.getOutputStream();
// Copie.
Remarquez que vous devrez éventuellement capturer/remplacer/mettre à jour les liens relatifs dans la réponse HTML, le cas échéant. Jsoup peut être extrêmement utile pour cela.