Download URL 43KB Jan 15 2013 12:41:48 PM
Document related concepts
no text concepts found
Transcript
URL URL significa Uniform Resource Locator, es decir, localizador uniforme de recurso. Sistema unificado de identificación de recursos en la red. Las direcciones se componen de protocolo, FQDN, y dirección local del documento dentro del servidor. Este tipo de direcciones permite identificar objetos WWW, gopher, ftp, etc. Acrónimo de Universal Resource Locator (Localizador Universal de Recursos /Identificador Universal de Recursos). Sistema unificado de identificación de recursos en la red. Es el modo estándar de proporcionar la dirección de cualquier recurso en Internet. Crear una URL La forma más fácil de crear una URL es a partir de la cadena que utilizamos en cualquier navegador convencional. Por ejemplo si queremos hacer una URL de la dirección http://www.cs.buap.mx, su código sería el siguiente. URL url_csBUAP = new URL("http://www.cs.buap.mx") Otra forma de crear una URL, es a partir de otra URL, esta nueva URL se le conoce como una URL relativa. Este tipo de URL se ven mucho en los códigos de las páginas web, cuando un vinculo hace referencia a un archivo que se encuentra dentro del mismo dominio, ya no es necesario incluir toda la dirección, sino solo una parte de ella (generalmente solo el nombre del archivo, en el caso de que se encuentren en el mismo directorio). Por ejemplo si queremos crear una URL de la dirección http://www.cs.buap.mx/La_Comunidad.html a partir de la creada antes url_csBUAP, el código sería el siguiente: URL url_csComunidad = new URL(url_csBUAP, "La_Comunidad.html") Estos son todos los constructores de la clase URL. URL(String direccion) URL(String protocolo, String host, int puerto, String archivo) URL(String protocolo, String host, int puerto, String archivo, URLStreamHandler handler) URL(String protocolo, String host, String archivo) URL(URL context, String direc_relativa) URL(URL context, String direc_relativa, URLStreamHandler handler) Si construyes una URL utilizando cualquier de los constructores anteriores, se puede lanzar una excepción MalFormedURLException, ya sea porque los elementos del constructor son nulos o el protocolo es desconocido. Java te obliga a capturar dicha excepción cada vez que quieras crear una nueva instancia de URL. try { URL url = new URL(. . .) } catch (MalformedURLException exc) { // Codigo para el manejador de excepciones} Las clase URL contiene todos los métodos necesarios para obtener información sobre los componentes de la URL creada, alguno de ellos son: String getProtocol() que nos devuelve el protocolo. String getHost() que nos de devuelve el host. int getPort() devuelve el número de puerto de la URL. Si el puerto no está seleccionado, devuelve -1. String getFile() devuelve el componente nombre del fichero de la URL. String getRef() devuelve el componente referencia de la URL4.1. Otro método importante, es el que sirve para redefinir una URL sin necesidad de crear una nueva instancia, los método son: set(String protocol, String host, int port, String file, String ref) set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref) y para construir una representación en cadena de la URL, podemos utilizar el método toExternalForm() o toString(), que nos devuelve una cadena que representa a la url. Una URL es una dirección a un archivo en la red generalmente. Como ya se comentó en las preliminares de streams, para poder acceder a alguna información uno debe crear un stream de entrada, que nos permita acceder a esa información. Afortunadamente, a partir de una URL nosotros podemos crear un stream que nos conecte a ese objeto remoto para poder leer su contenido. Consideremos este código: import java.net.*; import java.io.*; class OpenStreamTest { public static void main(String[] args) { try { URL yahoo = new URL("http://www.yahoo.com/"); DataInputStream dis = new DataInputStream(yahoo.openStream()); 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); } } } Como se puede observar, creamos un streams de datos de tipo byte (DataInputStream) a partir del stream de entrada (InputStream) hacia el fichero de la URL proporcionado por el método openStream(). El resto del código solo lee el contenido como si fuera un archivo cualquiera. El compilador de java obliga a capturar la excepción del tipo IOException cada vez que usamos el método openStream(), por tal razón, fue necesario añadirlo. Conectarse a una URL Una vez creado la URL, podemos invocar el método openConnection() para conectarnos a ella. Ya conectado, habremos hecho un enlace de comunicación entre un programa Java y la URL a través de la Red. El método openConnection() en realidad crea un objeto URLConnection para realizar acciones como leer o escribir a través de la conexión. Por lo tanto para poder hacerlo es necesario aprender a manejar las instancias de la clase java.net.URLConnection. El siguiente código hace lo mismo que el anterior, solo que esta vez crea el stream hacia el archivo de la URL, mediante la instancia URLConnection que regresa el método openConnection() y no desde la URL directamente. 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); } } } Durante el curso se explicará con algunos ejemplo el porqué conviene abrir muchas veces la conexión. Uso del modelo Cliente-Servidor La mayoría de los programas en red son del modelo Cliente-Servidor, en dicho modelo el servidor proporciona algún tipo de servicio, desde los más simples como ser un espejo 4.2, hasta una más compleja como hacer consultas a bases de datos, entre otros. En este modelo, el Cliente hace uso del Servidor para realizar sus tareas o acceder a información que solo el servidor tiene, y el servidor solo trata de responder a cada una de las consultas que le hace el cliente. Dicho modelo también nos permite simular el paralelismo, ya que podemos hacer uso de varios servidores para poder realizar cierta tarea. En java se pueden manejar dos tipos de protocolos el UDP y el TCP para la transferencia de datos. Cada uno con sus propias ventajas y desventajas. El UDP es rápido, pero no proporciona un canal de comunicación fiable, ya que no verifica si los datos fueron recibidos satisfactoriamente, este tipo de conexión es muy común cuando vemos un archivo de video en vivo en la red (unas partes se ve, otras parte no tan bien, otras ni se ve, etc.). El TCP es más lento, pero este si nos proporciona un canal de comunicación fiable punto a punto, y este es el protocolo más comunmente utilizado en las aplicaciones cliente-servidor. Un socket es un punto final en un enlace de comunicación de dos vías entre dos programa que se ejecutan en red. En un programa cliente-servidor un socket nos ayuda a representar las conexiones entre un programa cliente y uno servidor. En el lado del cliente se utiliza la clase Socket y en el del servidor el ServerSocket para representar dichas conexiones. Antes de entrarnos a fondo, cómo comunicarnos en java, primero veamos como actúa cada una de las partes (el cliente y el servidor) en el modelo Cliente-Servidor. El Cliente actúa de la siguiente forma. 1. Establece una conexión con el servidor (Crea un socket con el servidor). 2. Mandar mensajes al servidor o Esperar un mensaje de él.(Consultas) 3. Esperar su respuesta o contestarle(existen casos en que este paso no es necesario). 4. Repetir los pasos 2 y 3 mientras sea necesario. 5. Cerrar la conexión con el servidor. El servidor actúa así. 1. Inicializa un puerto de comunicación, en espera de clientes que intenten conectarse a él (Crea un serverSocket). 2. Una vez que se conecta alguien, crea un hilo de ejecución para este usuario mientras que el thread principal vuelve al paso 1. Esto comunmente se hace para que el servidor puede atender a varios clientes al mismo tiempo. 3. Se comunica con el cliente mediante el socket creado entre el cliente y él. 4. Espera que el cliente se vaya o lo bota el mismo servidor (Cierrra el socket entre ellos) y elimina el thread de comunicación entre ellos. Los detalles se le anexarán posteriormente.