## Crear una URL

La forma más sencilla de crear un objeto URL es crearlo desde una Cadena que represente la forma "Leible" de la dirección URL. Esta es la forma típica que otra persona utilizaría para decirte una URL. Por ejemplo, para decirle la dirección de Gamelan que contiene una lista de sitios sobre Java, podríamos dártela de la siguiente forma:

    http://www.gamelan.com/

En tu progrma Java, puede utilizar una cadena que contenga el texto anterior para crear un objeto URL:

    URL gamelan = new URL("http://www.gamelan.com/");

El objeto URL anterior representa una URL absoluta. Una URL absoluta contiene toda la información necesaria para alcanzar el recurso en cuestión. También puedes crear objetos URL desde una dirección URL relativa.

### Crear una URL relativa a otra

> Una URL relativa sólo contiene la información suficiente para alcanzar el recurso en relación a (o en el contexto de) otra URL.

> Las epecificaciones de las URL relativas se utilizan frecuentemente en ficheros HTML. Por ejemplo, supon que has escrito un fichero HTML llamado HomePage.html. Dentro de esta página, hay enlaces a otras páginas, graficos.html y Preferencias.html, que están en la misma máquina y en el mismo directorio que HomePage.html. Estos enlaces a graficos.html y Preferencias.html desde HomePage.html podrían especificarse sólo como nombres de ficheros, de la siguiente forma:

>     <a href="graficos.html">graficos</a>
>     <a href="preferencias.html">Preferencias</a>

Estas direcciónes URL son URLs relativas. Esto es, las URL estás especificadas en relación al fichero en el que están contenidas HomePage.html.

En tus programas java, puedes crear un objeto URL desde una especificación URL relativa. Por ejemplo, supon que ya has creado una URL para "http://www.gamelan.com/" en tu programa, y que sabes los nombres de varios ficheros en esa site(Gamelan.network.html, y Gamelan.animation.html). Puedes crear URLs para cada fichero de Gamelan simplemente especificando el nombre del fichero en el contexto de la URL original de Gamelan. Los nombres de ficheros son URLs relativas y están en relación a la URL original de Gamelan.

    URL gamelan = new URL("http://www.gamelan.com/");
    URL gamelanNetwork = new URL(gamelan, "Gamelan.network.html");

Este código utiliza un constructor de la clase URL que permite crear un objeto URL desde un objeto URL (la base) y una URL relativa.

Este constructor también es útil para crear URL llamados anclas (también conocidos como referencias) dentro de un fichero. Por ejemplo, supon que el fichero "Gamelan.network.html" tiene una referencia llamada BOTTOM que está al final del fichero. Puedes utilizar el constructor de URL relativa para crear una URL como esta:

    URL gamelanNetworkBottom = new URL(gamelanNetwork, "#BOTTOM");

La forma general de este constructor de URL es:

    URL(URL URLbase, String URLrelativa)

El primer argumento es un objeto URL que especifica la base de la neva URL, y el segundo argumento es una cadena que especifica el resto del nombre del recurso relativo a la base. Si URLbase es null, entonces este constructor trata URLrelativa como si fuera una especificación de una URL absoluta. Y al revés, si relativeURL es una especificación de URL absoluta, entonces el constructor ignora baseURL.

### Otros Constructores de URL

> La clase URL proporciona dos constructores adicionales para crear un objeto URL. Estos constructores son útiles cuando trabajan con URLs como URLs HTTP, que tienen los componentes del nombre del host, el nombre del fichero, el número de puerto y una referencia en la parte del nombre del recurso de la URL. Estos dos constructores son útiles cuando no se tiene una cadena que contiene la especificación completa de la URL, pero si conocen algunos componentes de la URL.

> Por ejemplo, si has diseñado un navegador con un panel similar al explorador de ficheros que le permite al usuario utilizar el ratón para seleccionar el protocolo, el nombre del host, el número del puerto, el nombre del fichero, puedes construir una URL a partir de estos componentes. El primer constructor crea una URL desde un protocolo, un nombre de host y un nombre de fichero. El siguiente código crea una URL del fichero Gamelan.network.html en la site de Gamelan:

>     URL gamelan = new URL("http", "www.gamelan.com", "/Gamelan.network.html");

> Esto es equivalente a URL("http://www.gamelan.com/Gamelan.network.html"). El primer argumento es el protocolo, el segundo es el nombre del host y el último argumento es el path del fichero. Observa que el nombre del fichero contiene la barra inclinada (/) al principio. Esto indica que el nombre de fichero está especificado desde la raíz del host.

> El último constructor de URL añade el número de puerto a la lista de los argumentos utilizados por el constructor anterior.

>     URL gamelan = new URL("http", "www.gamelan.com", 80, "/Gamelan.network.html");

> Esto crea un objeto URL con la siguiente dirección URL:

>     http://www.gamelan.com:80/Gamelan.network.html

> Si construyes una URL utilizando uno de estos constructores, puedes obtener una cadena que contiene la dirección URL completa, utilizando el método toString() de la clase URL o el método toExternalForm() equivalente.

### MalformedURLException

> Cada uno de los cuatro constructores de URL lanza una MalformedURLException si los argumentos del constructor son nulos o el protocolo es desconocido. Típicamente, se querrá capturar y manejar esta excepción. Así normalmente deberías introducir tu constructor de URL en un par try/catch.

>     try {
>         URL myURL = new URL(. . .)
>     } catch (MalformedURLException e) {
>         . . .
>         // Aquí va el código del manejador de excepciones
>         . . .
>     }

> Puede ver Manejar Errores Utilizando Excepciones para obtener información sobre el manejo de excepciones.

Nota: Las URLs son objetos de "una sóla escritura". Una vez que has creado un objeto URL no se puede cambiar ninguno de sus atributos (protocolo, nombre del host, nombre del fichero ni número de puerto).

Ozito