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.