La clase URL contiene contructores y métodos para la manipulación
de URL (Universal Resource Locator): un objeto o servicio
en Internet. El protocolo TCP necesita dos tipos de información:
la dirección IP y el número de puerto. Vamos a ver
como podemos recibir pues la página Web principal de nuestro
buscador favorito al teclear:
http://www.yahoo.com
En primer lugar, Yahoo tiene registrado su nombre, permitiendo
que se use yahoo.com como su dirección IP, o lo
que es lo mismo, cuando indicamos yahoo.com es como si
hubiesemos indicado 205.216.146.71, su dirección IP real.
La verdad es que la cosa es un poco más complicada que
eso. Hay un servicio, el DNS (Domain Name Service), que
traslada www.yahoo.com a 205.216.146.71, lo que nos permite
teclear www.yahoo.com, en lugar de tener que recordar su
dirección IP.
Si queremos obtener la dirección IP real de la red en que
estamos corriendo, podemos realizar llamadas a los métodos
getLocalHost() y getAddress(). Primero, getLocalHost()
nos devuelve un objeto iNetAddress, que si usamos con getAddress()
generará un array con los cuatro bytes de la dirección
IP, por ejemplo:
InetAddress direccion = InetAddress.getLocalHost(); byte direccionIp[] = direccion.getAddress();
Si la dirección de la máquina en que estamos corriendo
es 150.150.112.145, entonces:
direccionIp[0] = 150 direccionIp[1] = 150 direccionIp[2] = 112 direccionIp[3] = 145
Una cosa interesante en este punto es que una red puede
mapear muchas direcciones IP. Esto puede ser necesario
para un Servidor Web, como Yahoo, que tiene que soportar
grandes cantidades de tráfico y necesita más de
una dirección IP para poder atender a todo ese tráfico.
El nombre interno para la dirección 205.216.146.71, por
ejemplo, es www7.yahoo.com. El DNS puede trasladar una
lista de direcciones IP asignadas a Yahoo en www.yahoo.com.
Esto es una cualidad útil, pero por ahora abre un agujero
en cuestión de seguridad.
Ya conocemos la dirección IP, nos falta el número
del puerto. Si no se indica nada, se utilizará el que se
haya definido por defecto en el fichero de configuración
de los servicios del sistema. En Unix se indican en el fichero
/etc/services, en Windows-NT en el fichero services
y en otros sistemas puede ser diferente.
El puerto habitual de los servicios Web es el 80, así que
si no indicamos nada, entraremos en el servidor de Yahoo
por el puerto 80. Si tecleamos la URL siguiente en un navegador:
http://www.yahoo.com:80
también recibiremos la página principal de Yahoo.
No hay nada que nos impida cambiar el puerto en el que residirá
el servidor Web; sin embargo, el uso del puerto 80 es casi estándar,
porque elimina pulsaciones en el teclado y, además, las
direcciones URL son lo suficientemente difíciles de recordar
como para añadirle encima el número del puerto.
Si necesitamos otro protocolo, como:
ftp://ftp.microsoft.com
el puerto se derivará de ese protocolo. Así el puerto
FTP de Microsoft es el 21, según su fichero services
.
La primera parte, antes de los dos puntos, de la URL, indica el
protocolo que se quiere utilizar en la conexión con el
servidor. El protocolo http (HyperText Transmission Protocol),
es el utilizado para manipular documentos Web. Y si no se especifica
ningún documento, muchos servidores están configurados
para devolver un documento de nombre index.html.
Con todo esto, Java permite los siguientes cuatro constructores
para la clase URL:
public URL( String spec ) throws MalformedURLException; public URL( String protocol,String host,int port,String file ) throws MalformedURLException; public URL( String protocol,String host,String file ) throws MalformedURLException; public URL( URL context,String spec ) throws MalformedURLException;
Así que podríamos especificar todos los componenetes
del URL como en:
URL( "http","www.yahoo.com","80","index.html" );
o dejar que los sistemas utilicen todos los valores por defecto
que tienen definidos, como en:
URL( "http://www.yahoo.com" );
y en los dos casos obtendríamos la visualización
de la página principal de Yahoo en nuestro navegador.
|
[Anterior] [Indice] [Siguiente] |