Trabajo en Red

Si has utilizado satisfactoriamente openConnection() para inicializar comunicaciones con una URL, tendr�s una referencia a un objeto URLConnection. La clase URLConnection contiene muchos m�todos que permiten comunicarse con la URL a trav�s de la red. URLConnection es una clase centrada sobre HTTP -- muchos de sus m�todos son �tiles s�lo cuando trabajan con URLs HTTP. Sin embargo, la mayor�a de los protocolos URL permite leer y escribir desde una conexi�n por eso esta p�gina ense�a como leer y escribir desde una URL a trav�s de un objeto URLConnection.

.�Leer desde un objeto URLConnection

El siguiente programa realiza la misma funci�n que el mostrado en Leer Directamente desde una URL. Sin embargo, mejor que abrir directamente un stream desde la URL, este programa abre expl�citamente una conexi�n con la URL, obtiene un stream de entrada sobre la conexi�n, y lee desde el stream de entrada.

import java.net.*;
import java.io.*;

class ConnectionTest {
    public static void main(String[] args) {
        try {
            URL yahoo = new URL("http://www.yahoo.com/");
            URLConnection yahooConnection = yahoo.openConnection();
            DataInputStream dis = new DataInputStream(yahooConnection.getInputStream());
            String inputLine;

            while ((inputLine = dis.readLine()) != null) {
                System.out.println(inputLine);
            }
            dis.close();
        } catch (MalformedURLException me) {
            System.out.println("MalformedURLException: " + me);
        } catch (IOException ioe) {
            System.out.println("IOException: " + ioe);
        }
    }
}

La salida de este programa deber�a ser id�ntica a la salida del programa que abr�a directamente el stream desde la URL. Puedes utilizar cualquiera de estas dos formas para leer desde una URL. Sin embargo, algunas veces leer desde una URLConnection en vez de leer directamente desde una URL podr�a ser m�s �til ya que se puede utilizar el objeto URLConnection para otras tareas (como escribir sobre la conexi�n URL) al mismo tiempo.

De nuevo, si en vez de ver la salida del programa, se viera el siguiente mensaje error.

IOException: java.net.UnknownHostException: www.yahoo.com

Podr�as tener activado un proxy y el programa no podr�a encontrar el servidor de www.yahoo.com.

.�Escribir a una URLConnection

Muchas p�ginas HTML contienen forms -- campos de texto y otros objeto GUI que le permiten introducir datos en el servidor. Despu�s de teclear la informaci�n requerida e iniciar la petici�n pulsando un bot�n, el navegador que se utiliza escribe los datos en la URL a trav�s de la red. Despu�s de que la otra parte de la conexi�n (normalemente un script cgi-bin) en el servidor de datos, los procesa, y le env�a de vuelta una respuesta, normalmente en la forma de una nueva p�gina HTML. Este esenario es el utilizado normalmente por los motores de b�squeda.

Muchos scripts cgi-bin utilizan el POST METHOD para leer los datos desde el cliente. As�, escribir sobre una URL frecuentemente es conocido como posting a URL. Los scripts del lado del servidor utilizan el m�todo POST METHOD para leer desde su entrada estandard.

Nota:

Algunos scripts cgi-bin del lado del servidor utilizan el m�todo GET METHOD para leer sus datos. El m�todo POST METHOD es m�s r�pido haciendo que GET METHOD est� obsoleto porque es m�s vers�til y no tiene limitaciones sobre los datos que pueden ser enviados a trav�s de la conexi�n.

Tus programas Java tambi�n pueden interactuar con los scripts cgi-bin del lado del servidor. S�lo deben poder escribir a una URL, as� proporcionan los datos al servirdor. Tu programa puede hacer esto siguiendo los siguientes pasos.

  1. Crear una URL.
  2. Abrir una conexi�n con la URL.
  3. Obtener un stream de salida sobre la conexi�n. Este canal de entrada est� conectado al stream de entrada estandard del script cgi-bin del servidor.
  4. Escribir en el stream de salida.
  5. Cerrar el stram de salida.

Hassan Schroeder, un miembro del equipo de Java, escribi� un script cgi-bin, llamado backwards, y est� disponible en la Web site de, java.sun.com. Puedes utilizar este script para probar el siguiente programa de ejemplo.Si por alguna raz�n no puedes obtenerlo de nuestra Web; puedes poner el script en cualquier lugar de la red, llam�ndolo backwards, y prueba el programa localmente.

El script de nuestra Web lee una cadena de la entrada estandard, invierte la cadena, y escribe el resultado en la salida estandard. El script requiere una entrada de la siguiente forma: string=string_to_reverse, donde string_to_reverse es la cadena cuyos caracteres van a mostrarse en orden inverso.

Aqu� tienes un programa de ejemplo que ejecuta el script backwards a trav�s de la red utilizando un URLConnection.

import java.io.*;
import java.net.*;

public class ReverseTest {
    public static void main(String[] args) {
        try {
            if (args.length != 1) {
                System.err.println("Usage:  java ReverseTest string_to_reverse");
                System.exit(1);
            }
            String stringToReverse = URLEncoder.encode(args[0]);

            URL url = new URL("http://java.sun.com/cgi-bin/backwards");
            URLConnection connection = url.openConnection();

            PrintStream outStream = new PrintStream(connection.getOutputStream());
            outStream.println("string=" + stringToReverse);
            outStream.close();

            DataInputStream inStream = new DataInputStream(connection.getInputStream());
            String inputLine;

            while ((inputLine = inStream.readLine()) != null) {
                System.out.println(inputLine);
            }
            inStream.close();
        } catch (MalformedURLException me) {
            System.err.println("MalformedURLException: " + me);
        } catch (IOException ioe) {
            System.err.println("IOException: " + ioe);
        }
    }
}

Examinemos el programa y veamos como trabaja. Primero, el programa procesa los argumentos de la l�nea de comandos.

if (args.length != 1) {
    System.err.println("Usage:  java ReverseTest string_to_reverse");
    System.exit(1);
}
String stringToReverse = URLEncoder.encode(args[0]);

Estas l�neas aseguran que el usuario proporciona uno y s�lo un argumento de la l�nea de comandos del programa y lo codifica. El argumento de la l�nea de comandos es la cadena a invertir por el script cgi-bin backwards. El argumento de la l�nea de comandos podr�a tener espacios u otros caractetes no alfanum�ricos. Estos caracteres deben ser codificados porque podr�an suceder varios procesos en la cadena en el lado del servidor. Esto se consigue mediante la clase URLEncoder.

Luego el programa crea el objeto URL -- la URL para el script backwards en java.sun.com.

URL url = new URL("http://java.sun.com/cgi-bin/backwards");

El programa crea una URLConnection y abre un stream de salida sobre esa conexi�n. El stream de salida est� filtrado a trav�s de un PrintStream.

URLConnection connection = url.openConnection();
PrintStream outStream = new PrintStream(connection.getOutputStream());

La segunda l�nea anterior llama al m�todo getOutputStream() sobre la conexi�n. Si no URL no soporta salida, este m�todo lanza una UnknownServiceException. Si la URL soporta salida, este m�todo devuelve un stream de salida que est� conectado al stream de entrada estandard de la URL en el lado del servidor -- la salida del cliente es la entrada del servidor.

Luego, el programa escribe la informaci�n requerida al stream de salida y cierra el stream.

outStream.println("string=" + stringToReverse);
outStream.close();

Esta l�nea escribe en el canal de salida utilizando el m�todo println(). Como puedes ver, escribir datos a una URL es tan sencillo como escribir datos en un stream. Los datos escritos en el stream de salida en el lado del cliente son la entrada para el script backwards en el lado del servidor. El programa ReverseTest construye la entrada en la forma requirida por el script mediante la concatenaci�n string= para codificar la cadena.

Frecuentemente, como en este ejemplo, cuando escribe en una URL est� pasando informaci�n al script cgi-bin que lee la informaci�n que usted escribe, realiza alguna acci�n y luego env�a la informaci�n de vuelta mediante la misma URL. Por lo que querr�s leer desde la URL despu�s de haber escrito en ella. El programa ReverseTest los hace de esta forma.

DataInputStream inStream = new DataInputStream(connection.getInputStream());
String inputLine;

while (null != (inputLine = inStream.readLine())) {
    System.out.println(inputLine);
}
inStream.close();

Cuando ejecutes el programa ReverseTest utilizando Invierteme como argumento, deber�as ver esta salida.

Invierteme
 reversed is.
emetreivnI

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP