Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Problema sendRedirect y HttpURLConnection

Buenas a todos,

utilizo HttpURLConnection para comprobar conexión contra una url determinada y en el caso de que la haya ejecuto sendRedirect para redireccionar a esa url. El problema es que al usar el sendRedirect después de comprobar conexión contra esa url, la llamada se hace dos veces.
El código es el siguiente:

URL u = new URL(direccion);
HttpURLConnection con = (HttpURLConnection)u.openConnection();
con.setRequestMethod("HEAD");
con.connect() ;
int code = con.getResponseCode() ;
con.disconnect();
con.setFollowRedirects(false);
con.setUseCaches(false);
con.setInstanceFollowRedirects(false);
if(code == HttpURLConnection.HTTP_OK){
response.sendRedirect();
}

Si pruebo a lanzar el sendRedirect sin hacer la comprobación de conectividad, la redirección se realiza sólo una vez.
¿Tenéis alguna idea de lo que puede estar pasando?
Muchas gracias por adelantado

marzo 26, 2014 | Registered Commentershakermaker82

Buenas,

Es que estas haciendo dos llamadas HTTP a la direccion indicada. Una llamada http HEAD (que te devuelve solo las cabeceras) y otra GET (la redireccion en si misma).


Un saludo

marzo 27, 2014 | Unregistered CommenterUnoPorAhi

Gracias por tu respuesta,
pero , ¿cual sería la solución para evitar las dos llamadas? Porque el requestMethod por defecto viene a POST y de este modo también me hace 2 llamadas.

marzo 27, 2014 | Registered Commentershakermaker82

No hagas una llamada HTTP solicitando un recurso web para comprobar la conexion. Si de verdad necesitas hacer dicha comprobacion puedes simplemente abrir un socket al puerto del host servidor (80?) y comprobar si conecta

Un saludo

marzo 27, 2014 | Unregistered CommenterUnoPorAhi

Bien, y no se podría usar la clase HttpURLConnection sin evitar que se redireccione dos veces? Es que llamo a otra aplicación que esta en otra máquina, otro contexto... y necesita comprobar la conexión con la url, no con el host.
¿Algo así como un con.setRequestMethod("DELETE") posterior al getResponseCode() podría valer?

marzo 27, 2014 | Registered Commentershakermaker82

Todo lo que pongas despues del getResponseCode no sirve para nada porque la peticion ya ha sido realizada.

Para verificar si existe un recurso concreto se haria con el HEAD como comentas.

No especificas ni das ningun contexto en relacion al verdadero problema. A que tipo de recurso intentas redirigir? A que te refieres con que redirige dos veces?


Un saludo

marzo 27, 2014 | Unregistered CommenterUnoPorAhi

Actualmente desde la aplicación A llamo a la aplicación B (mediante response.sendRedirect)para mostrar una serie de imágenes. Antes de hacer la llamada a B, necesito comprobar si existe comunicación con ella para que en el caso de que no existe no realizar la llamada.

El problema que me estoy encontrando, es que desde que he añadido la clase HttpURLConnection para realizar esta comprobación, el sendRedirect esta redireccionando por duplicado a la aplicación B, la esta llamando dos veces (seguramente sea por lo que comentas anteriormente), lo que impide que se muestre la imagen que quiero, ya que en la segunda llamada machaca lo anterior (por un número de sesión que trata interiormente).
Gracias por tu ayuda.

marzo 27, 2014 | Registered Commentershakermaker82

Buenas,

Entonces entiendo que estas llamando a algun tipo de contenido dinamico (php, java, .NET... ) y no a recursos estaticos como un html, imagen, etc por lo que no hay idempotencia entre llamadas y la sesion es importante como comentas.

En este caso, no te queda otra que currartelo bien para hacer que funcione. Las dos llamadas hay que realizarlas si o si, pero de debe enlazar una con otra. Para ello deberias capturar la cookie de sesion que devuelve la primera llamada y establecerla en la llamada a la redireccion. De este modo, al ir en la misma sesion los resultado deberian ser coherentes.

http://www.java-forums.org/networking/13137-how-do-you-get-set-cookies-httpurlconnection.html

http://stackoverflow.com/questions/9836959/response-with-a-addcookie-and-send-redirect


Un saludo

marzo 27, 2014 | Unregistered CommenterUnoPorAhi