Gyakorlati alapok III.

Az URL és műveletei

 

A Uniform Resource Locator egy olyan univerzális hivatkozás, amely egy, az Interneten elérhető erőforrásra mutat. Az URL 2 fő komponensből áll:

  1. Protokollazonositó (Protocol identifier),

  2. Erőforrás neve (Resource name).

Elemezzük ki például Java-oktatási honlapom egyik URL-jét:

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

Figyelem! Ez az erőforrás nem létezik!
 

http://informatika-programozas.hu/teszt.html#LETOLTES

A fentieket le tudjuk ellenőrizni futtatható Java-kóddal is. Az összes, hálózattal kapcsolatos Java-rutin meglepetésszerűen a java.net csomagban található. Így van lehetőségünk többek között URL-t, mint önálló objektumot is létrehozni és felhasználni, valamint a Java-rendszer az objektumhoz további, specifikus, nagyon hasznos metódusokat is rendelkezésre bocsát. Az alábbi Java-kód önmagáért beszél, hiszen a felhasznált metódusok az URL fent ismertetett alapvizsgálatát végzik el:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.net.*;

public class Main {
public static void main(String[] args) throws Exception {
    URL url = new URL("http://informatika-programozas.hu:80/teszt.html#LETOLTES");
    System.out.println("protocol = " + url.getProtocol());
    System.out.println("host = " + url.getHost());
    System.out.println("filename = " + url.getFile());
    System.out.println("port = " + url.getPort());
    System.out.println("ref = " + url.getRef());
    }
}

 

Végeredmény:

protocol = http
host = informatika-programozas.hu
filename = /teszt.html
port = 80
ref = LETOLTES

 

A fenti kódban észrevehetjük a portszámot, amely HTTP-protokoll esetén mindig 80. Külön kiírása akár el is hagyható, ekkor azonban – mivel nem lesz megállapítható portszám-, a getPort() függvény -1 visszatérési értéket ad vissza:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.net.*;

public class Main {
public static void main(String[] args) throws Exception {
    URL url = new URL("http://informatika-programozas.hu/teszt.html#LETOLTES");
    System.out.println("protocol = " + url.getProtocol());
    System.out.println("host = " + url.getHost());
    System.out.println("filename = " + url.getFile());
    System.out.println("port = " + url.getPort());
    System.out.println("ref = " + url.getRef());
    }
}

 

Végeredmény:

protocol = http
host = informatika-programozas.hu
filename = /teszt.html
port = -1
ref = LETOLTES

 

A következő kérdés, hogy mi történik abban az esetben, ha rossz az URL?

Ekkor valójában egy jól előrelátható hibára számítunk. A helyzet ismerős lehet, hiszen pontosan erre való a kivételkezelés. Rossz URL esetén MalformedURLException nevű kivétel fog keletkezni, amelyet lehetőségünk van try-catch blokk-kal lekezelni.


Az alábbi kódban szándékosan pontatlan URL-t adunk meg (htp), de a hibát elkapjuk és a catch ágban hibaüzenettel lekezeljük:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.net.*;

public class Main {
public static void main(String[] args) throws Exception {
    boolean joURL = true;
    try {
        URL url = new URL("htp://informatika-programozas.hu:80/teszt.html#LETOLTES");
    }

    catch (MalformedURLException e) {
        System.out.println("Rossz URL!");
        joURL = false;
    }
    if(joURL) {
        System.out.println("Jó URL!");
        }
    }
}

 

Végeredmény:

Rossz URL!

 

Érdemes kísérleteznünk a fenti kóddal, miszerint kivételkezelésnél a Java alkotói milyen hibákat definiáltak. Például kivétel keletkezik az alábbi esetekben (ha minden más jó):

Viszont jó például:

Érdekesség:

A kód a fenti URL-t jónak minősítette, bár nincsen benne domain tartományi név (.hu)!

 

Az URL objektum a beépített metódusokon keresztül természetesen ennél jóval többre képes. Amint az URL valós reprezentációja egy, az Interneten elérhető erőforrásnak, tulajdonképpen a Javában is egyfajta hálózati kiindulópont, hiszen például az openConnection() metódusával önálló hálózati csatlakozást képes kezdeményezni. Ezt a következő fejezetben nézzük meg.