servlet redireccionar objeto función ejemplo cuál java web-services rest servlets requestdispatcher

redireccionar - requestdispatcher java ejemplo



Cómo reenviar el requestdispatcher a una URL remota (3)

No puede reenviar una solicitud a una URL que sea externa a su aplicación web. Probablemente desee enviar un redireccionamiento a esta URL. Ver HttpServletResponse.sendRedirect() .

Ver diferencia entre JSP hacia adelante y redirigir

Tengo una página HTML http://www.mywebapp.com/sample.html que se usa desde el servidor remoto. paso la URL HTML como un formulario oculto como este en el mismo formulario HTML,

<form action="/myservlet?userid=12345" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="Submit"> <input type="hidden" name="url" value="http://www.mywebapp.com/sample.html"/> </form>

En mi servlet obtuve la URL oculta http://www.mywebapp.com/sample.html y String fieldValue = http://www.mywebapp.com/sample.html como String fieldValue = http://www.mywebapp.com/sample.html

Ahora cuando intento RequestDispatcher y reenvio la página a la URL oculta como esta,

RequestDispatcher rd = req.getRequestDispatcher(fieldValue); rd.forward(req, resp);

estoy recibiendo ERROR 404 .

¿Alguien puede sugerirme una idea para resolver esto?

EDITADO

Lo que exactamente quiero hacer es, desde un servidor remoto, una página HTML solicitará a mis servicios web REST. La respuesta del servicio web estará en la salida JSON. Ahora quiero enviar esta respuesta JSON al formulario HTML solicitado (es decir, a la página HTML del servidor remoto)

¿Alguien puede sugerir una idea para resolver esto? Su ayuda será apreciada.



Si necesita reenviar la solicitud en lugar de redirigir (por ejemplo, si la URL remota solo es accesible para el servidor y no para el usuario), es posible hacer su propio reenvío. En su servlet, puede realizar una solicitud a la URL remota y escribir el InputStream desde esa solicitud al OutputStream en su servlet. Sin embargo, es posible que desee buscar y manejar cualquier error con la solicitud y asegurarse de que las transmisiones estén cerradas correctamente. También necesitaría reenviar manualmente cualquier parámetro de la solicitud al nuevo.

El enfoque básico sería:

URL url = new URL("http://www.externalsite.com/sample.html"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); String postParams = "foo="+req.getParameter("foo"); DataOutputStream paramsWriter = new DataOutputStream(con.getOutputStream()); paramsWriter.writeBytes(postParams); paramsWriter.flush(); paramsWriter.close(); InputStream remoteResponse = conn.getInputStream(); OutputStream localResponder = resp.getOutputStream(); int c; while((c = remoteResponse.read()) != -1) localResponder.write(c); remoteResponse.close(); localResponder.close(); conn.disconnect();

Obviamente, esto no maneja la solicitud de varias partes en su ejemplo, pero le da una idea básica sobre cómo lograr lo que desea. Recomiendo usar los componentes HTTP de Apache para hacer la solicitud en lugar de HttpURLConnection, ya que hará que la solicitud multiparte con el archivo sea más fácil de lograr (imagino que tendrías que crear manualmente el cuerpo multipart / form-data con HttpURLConnection) . Se puede encontrar un ejemplo de cómo hacer la solicitud en ¿Cómo puedo hacer una solicitud POST multipart / form-data usando Java? . Se puede obtener un InputStream desde HttpEntity llamando a getContent () (que sería el equivalente a conn.getInputStream () en el ejemplo).

Escribir el InputStream en OutputStream también se puede lograr más fácilmente con el método Apache Commons IO IOUtils.copy ().

EDITAR: Es posible utilizar req.getInputStream () para obtener el cuerpo de solicitud sin formato y escribirlo en paramsWriter.writeBytes () pero no lo he probado, por lo que no hay garantía de que funcione. No estoy seguro de qué contiene exactamente req.getInputStream () para una solicitud posterior.