Jelenlegi hely

22.2.1 URL objektum létrehozása

URL objektumot legegyszerűbben egy olyan sztringből tudunk előállítani, ami ember számára olvasható formában tartalmazza az URL címet. Ez általában olyan alak, hogy más is felhasználhatja az URL-t. Például a Gamelan oldal URL-e, ami Java forrásokat használ, a következőképpen néz ki:

http://www.gamelan.com/[/codefilter_code]

A Java programban a következőt kell használni, hogy URL objektumot hozzunk létre:

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

A fenti URL objektum egy abszolút URL. Az abszolút URL minden információt tartalmaz, ami szükséges lehet, hogy elérjük a forrást. Ezen kívűl létre lehet hozni objektumokat relatív URL címmel is.

Relatív URL létrehozása

A relatív URL-eket gyakran a HTML fájlokon belül használjuk. Például tegyük fel, hogy írtunk egy HTML fájlt, aminek a neve JoesHomePage.html. Az oldalon belül vannak linkek más oldalakra, pl. PicturesOfme.html és MyKids.html, amik ugyanazon a gépen és ugyanabban a könyvtárban vannak, mint a JoesHomePage.html fájl. A linkek meghatározhatóak fájlnévként, amit a következő programrészlet mutat be:

<a href="PicturesOfMe.html">Pictures of Me</a>
<a href="MyKids.html">Pictures of My Kids</a>

Ezek relatív URL címek, ahol az URL arra a szerverre hivatkozik, ahol a JoesHomePage oldal is található.

A Java programokban létrehozhatunk URL objektumokat relatív URL-ből is. Például tegyük fel, hogy ismerünk két URL-t a Gamelan oldalról.

http://www.gamelan.com/pages/Gamelan.game.html
http://www.gamelan.com/pages/Gamelan.net.html

Hozzunk létre URL objektumot ezekből az oldalakból, hivatkozva a közös könyvtárukra (http://www.gamelan.com/pages/), mit itt:

URL gamelan = new URL("http://www.gamelan.com/pages/");
URL gamelanGames = new URL(gamelan, "Gamelan.game.html");
URL gamelanNetwork = new URL(gamelan, "Gamelan.net.html");

Ez a kódrészlet az URL azon konstruktorát használja, amivel létrehozhatunk egy URL objektumot egy másik alapján. A konstruktor általános alakja a következő:

URL(URL baseURL, String relativeURL)

Az első paraméter egy URL objektum, ami az új URL bázisát jelzi. A második paraméter egy sztring, ami specifikálja a bázisra hivatkozó forrás nevét. Ha a baseURL nincs megadva, a konstruktor abszolút URL-ként kezeli a relativeURL sztringet. Viszont, ha a relativeURL sztring egy abszolút URL, a konstruktor figyelmen kívül hagyja a baseURL-t.

Ez a konstruktor akkor is hasznos lehet, ha olyan URL objektumot akarunk létrehozni, amiben van horgony (anchor). Tegyük fel, hogy a Gamelan.network.html fájl tartalmaz egy horgonyt, amit BOTTOM-nak hívnak, és a fájl aljára mutat. A következő kód a relatív URL konstruktort használja az objektum létrehozására:

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

Más URL konstruktorok

Az URL osztály tartalmaz két másik konstruktort is az URL objektumok létrehozásához. Ezek a konstruktorok akkor hasznosak, ha olyan URL-ekkel dolgozunk, mit például a HTTP, ami tartalmaz hosztnevet, fájlnevet, portszámot és hivatkozást (horgonyt) is. Ez a két konstruktor akkor is hasznos lehet, ha nincs egy olyan sztringünk, ami tartalmazza a komplett URL-t, de ismerjük néhány összetevőjét.

Például feltételezzük, hogy egy hálózat-tallózó panelt fejlesztünk éppen, ami hasonlóan működik, mint egy fájltallózó, vagyis a felhasználó választhat protokollt, hosztnevet, portot és fájlnevet. Létrehozhatunk URL-t a panel komponenseiből. Az első konstruktor az URL-t a protokollból, a hosztnévből, és a fájlnévből állítja elő. Az alábbi példa a Gamelan.net.html fájlból (ami a gamelan oldalon található meg) csinál URL-t.

new URL("http", "www.gamelan.com", "/pages/Gamelan.net.html");

Ez ekvivalens a következővel:

new URL("http://www.gamelan.com/pages/Gamelan.net.html");

Az első paraméter a protokoll, a második a hosztnév és az utolsó a fájl elérési útja. A fájlnévnek perjellel kell kezdődnie. Ez jelzi, hogy a fájl gyökere a hosztnévben van megadva. A következő konstruktor egy portszámmal több paramétert tartalmaz az előzőhöz képest:

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

Ez egy URL objektumot csinál a következő URL-nek:

http://www.gamelan.com:80/pages/Gamelan.network.html[/codefilter_code]

Ha a fenti konstruktorok egyikével hozunk létre URL objektumot, a toString vagy toExternalForm paranccsal létrehozhatunk egy sztringet, amely tartalmazza a teljes URL címet.

MalformedURLException

A konstruktorok mindegyike MalformedURLException kivételt ad vissza, ha valamelyik paraméter null, vagy ismeretlen a protokoll. Ezt úgy tudjuk lekezelni, ha a konstruktort try/catch blokkba rakjuk, mit a következő kódban:

try {
    URL myURL = new URL(. . .)
} catch (MalformedURLException e) {
    . . .
        // Kivételkezelő kód
    . . .
}

Megjegyzés: Az URL objektumok egyszer írhatóak. Miután létrehoztunk egyet, nem lehet megváltoztatni az attribútumait (protokoll, hosztnév, fájlnév vagy portszám). Érdemes azt is megemlíteni, hogy az URL objektumok – hasonlóan a korábbi File objektumokhoz – a létrejöttükkor nem ellenőrzik az URL elérhetőségét, érvényességét stb., mivel az URL-nek egyenlőre csak egy logikai reprezentációja.