Información general
Inicio
Quienes somos?
 
Áreas
JAVA MOVIL
WAP
MOVIL OS
TICA
 
Tutoriales
Tutorial General
Tutorial WML
 
AnteriorContenidoSiguiente

Aplicaciones para Dispositivos Móviles

Autores (2003)
María Fernanda Dulcey
Andrés Fernando Piamba
Javier Alexander Hurtado

3.6. Otro ejemplo: Conexiones HTTP con MIDP

Este ejemplo fue desarrollado por Eric Giguere en Deciembre 18 del 2000. Es bastante interesante debido al tema que trata. La conectividad HTTP es uno de los requerimientos del Perfil de Información de Dispositivo Móvil (MIDP). Un dispositivo con capacidad MIDP debe estar habilitado para interactuar con un servidor web a través de requerimientos HTTP convencionales. Si la red no soporta requerimientos HTTP directamente, entonces debe enrutar sus peticiones a través de una gateway. Pero esto es totalmente tranparente para el desarrollador de la aplicación.

En MIDP se puede interactuar con la red usando el framework de Conexión Genérica. Sin embargo, esto solo es verdad para algunos perfiles de la configuración CLDC. Este framework es un conjunto de clases e interfaces definidas por la configuración CLDC que reemplazan la mayoría de las clases de J2SE en los paquetes java.io y java.net.

Para hacer una solicitud o requerimiento HTTP se usa el método Connector.open y una URL convencional forzando a que el resultado sea del tipo HttpConnection mediante un cast de la siguiente manera:

import javax.microedition.io.*;

HttpConnection conn = Connector.open("http://www.java.sun.com/jdc");

La interface HttpConnection define todos los métodos comúnes necesarios para realizar peticiones HTTP y procesar las respuestas. Entre esos métodos podemos encontrar setRequestMethod, getHeaderField y openInputStream. Esta interface hace lo necesario para interactuar con cualquier web site en Internet.

Algo que se debe tener en cuenta es que no siempre se consigue la respuesta que se espera cuando se conecta a un web site. En particular, en algunos sitios web redireccionan a otra URL. De esta manera, se debe estar preparado para manejar redirecciones y de esta forma seguir las redirecciones sucesivas hasta obtener el o los datos que realmente desea.

Aqui tenemos una clase sencilla llamada HttpConnectionHelper que utiliza la interface HttpConnection para seguir redirecciones a web sites automaticamente:


import java.io.*;
import javax.microedition.io.*;

public class HttpConnectionHelper {

public interface Callback {
void prepareRequest( String originalURL, HttpConnection conn ) 
throws IOException;
}

public static HttpConnection connect( String url ) 
throws IOException {
return connect( url, null );
}

public static HttpConnection connect(String url, Callback callback ) 
throws IOException {
HttpConnection conn = null;
String originalURL = url;

while( url != null ){
HttpConnection conn = (HttpConnection) Connector.open( url );

if( callback != null ){
callback.prepareRequest( originalURL, conn );
}

int rc = conn.getResponseCode();

switch( rc ){
case HttpConnection.HTTP_MOVED_PERM:
case HttpConnection.HTTP_MOVED_TEMP:
case HttpConnection.HTTP_SEE_OTHER:
case HttpConnection.HTTP_TEMP_REDIRECT:
url = conn.getHeaderField( "Location" );
if( url != null && url.startsWith( "/*" ) ) {
StringBuffer b = new StringBuffer();
b.append( "http://" );
b.append( conn.getHost() );
b.append( ':' );
b.append( conn.getPort() );
b.append( url );
url = b.toString();
}
conn.close();
break;
default:
url = null;
break;
}
}
return conn;
}
}

Para usar esta clase, se debe llamar al método connect, pasando como parámetro la URL original. Ejemplo:


HttpConnection conn = HttpConnectionHelper.connect( 
"http://java.sun.com/jdc" );
int rc = conn.getResponseCode();

if ( rc == HttpConnection.HTTP_OK ){
InputStream in = conn.openInputStream();
// hacer algo con la respuesta...
} else {
// codigo para la respuesta inesperada
}

Cuando se invoca el método connect, este se encarga de establecer una conexión con la URL original y obtien el código de respuesta HTTP. Si el código de respuesta es el código de redirección HTTP_TEMP_REDIRECT, el método connect obtiene la nueva URL de la cabecera Location en la respuesta HTTP y se conecta a esa URL. El método continua hasta obtener un código de respuesta de no redirección. En ese momento, el método devuelve un objeto HttpConnection al destino final.

En algunos casos especiales tales como cuando se desea hacer un request utilizando el método Post en lugar del método Get, se puede usar el método connect con dos parámetros. El primer parámetro es la URL y el segundo parámetro es un objeto que implementa la interface HttpConnectionHelper.Callback.


class MyCallback implements HttpConnectionHelper.Callback {

public void prepareRequest( String originalURL, HttpConnection conn ) 
throws IOException {
conn.setRequestMethod( HttpConnection.POST );
conn.setRequestProperty( "User-Agent", "Profile/MIDP-1.0 Configuration/CLDC-1.0" );
conn.setRequestProperty( "Content-Language", "en-US" );
}
}

HttpConnection conn = 
HttpConnection.connect( "http://java.sun.com/jdc", new MyCallback() );

Si se define un método callback, este se llamará cada vez que se realiza una conexión antes de que se obtenga el código de respuesta. Esto permite modificar el requerimiento HTTP antes de que sea ejecutado.


Referencias

  • http://java.sun.com/j2me/
  • http://wireless.java.sun.com/
  • http://www.corej2me.com/
  • http://www.billday.com/


AnteriorContenidoSiguiente
Facultad de Ingeniería en Electrónica y Telecomunicaciones
Universidad del Cauca
Información: Webmaster
Copyright © - 2006