Copiar el encabezado de solicitud del objeto de solicitud al objeto URLConnection
-
23-09-2019 - |
Pregunta
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
URL url = new URL("http://localhost:8080/testy/Out");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
PrintWriter out = response.getWriter();
for(Enumeration e = request.getHeaderNames(); e.hasMoreElements();) {
Object o = e.nextElement();
String value = request.getHeader(o.toString());
out.println(o + "--is--" + value + "<br>");
connection.setRequestProperty((String) o, value);
}
connection.connect();
}
Escribí el código anterior en un servlet para publicar un formulario, así que algunas ubicaciones alternativas que este servlet, pero no está funcionando. Está bien usar la conexión.
Solución
Creo que estás buscando
RequestDispatcher rd;
rd = getServletContext().getRequestDispatcher("pathToServlet");
rd.forward(request, response);
Otros consejos
URLConnection
se ejecuta perezosamente. Es decir, no lo hará Realmente Dispare la solicitud HTTP hasta que obtenga información sobre la respuesta HTTP. P.ej
int responseCode = httpUrlConnection.getResponseCode();
o
InputStream responseBody = urlConnection.getInputStream();
o
String statusHeader = urlConnection.getHeaderField(null);
los connection.connect();
es por cierto completamente superfluo. Ya está ejecutado en el momento en que llamaste url.openConnection();
. También el connection.setRequestMethod("POST");
es completamente superfloso, el connection.setDoOutput(true)
ya hace eso.
Dicho esto, si el objetivo se encuentra realmente en el mismo contexto de la aplicación web alojado en la misma máquina, entonces hay mucho Mejores formas de invocarlo que crear una conexión HTTP con él, como reenviar o redirigir la solicitud.