====== Δουλεύοντας με URLs ======
Τα [[wp>Uniform_resource_locator|URL]]s (Uniform Resource Locators), είναι διαδικτυακές διευθύνσεις οι οποίες προϋποθέτουν την ύπαρξη ενός διαδικτυακού πρωτοκόλλου στο επίπεδο της εφαρμογής (π.χ http, ftp) το οποίο υλοποιείται πάνω από την [[http://en.wikipedia.org/wiki/Internet_protocol_suite|TCP/IP στοίβα]]. 
Κάθε URL έχει τα εξής χαρακτηριστικά.
  * **πρωτόκολλο:** το είδος το πρωτοκόλλου που θα χρησιμοποιηθεί (π.χ. http, ftp κλπ)
  * **host name:** η IP διεύθυνση ή το Domain Name στο οποίο θα γίνει η σύνδεση.
  * **port:** η πόρτα στην οποία θα γίνει η σύνδεση.
  * **pathname:** το τμήμα του URL μετά το hostname και πριν τις παραμέτρους
  * **parameters:** οι παράμετροι του URL.
  * **ref:** (html specific) Μία αναφορά σε ένα συγκεκριμένο σημείο μέσα στο αρχείο html, η οποία παραπέμπει σε μία συγκεκριμένη θέση μέσα στο αρχείο.
Με βάση τα παραπάνω το παρακάτω URL αναλύεται ως εξής
http://inf-server.inf.uth.gr:8888/courses/CE325/doku.php?id=java:urls&priority=max#writting_to_urls
  * πρωτόκόλλο   --> 'http'
  * hostname     --> 'inf-server.inf.uth.gr'
  * port number  --> '8888'
  * pathname     --> '/courses/CE325/doku.php'
  * parameters   --> 'id=java:urls&priority=max'
  * reference    --> 'writting_to_urls'
===== Δημιουργώντας ένα URL =====
Μπορείτε να δημιουργήσετε ένα αντικείμενο του τύπου URL με τους παρακάτω τρόπους
  * με χρήση της απόλυτης διεύθυνσης
URL myURL = new URL("http://example.com/pages/");
  * με χρήση ενός //base URL// και μία σχετική διεύθυνση σε σχέση με αυτό όπως παρακάτω (θεωρήστε ως myURL, το URL που ορίστηκε παραπάνω):
URL page1URL = new URL(myURL, "page1.html");
URL page2URL = new URL(myURL, "page2.html");
  * με χρήση των επιμέρους στοιχείων του URL, όπως παρακάτω
URL yourURL = new URL("http", "example.com", 80, "pages/page1.html"); 
Όλοι οι κατασκευαστές της κλάσης URL μπορούν να δημιουργήσουν ένα [[http://docs.oracle.com/javase/7/docs/api/java/net/MalformedURLException.html|MalformedURLException]] εάν το πρωτόκολλο που εισάγεται δεν είανι σωστό ή ένα από τα ορίσματα έχει τιμή NULL. Θα πρέπει να διαχειριστείτε το συγκεκριμένο Exception μέσε ένα try/catch block.
===== Αναλύοντας ένα URL με βάση το API της κλάσης =====
import java.net.*;
import java.io.*;
public class DecomposeURL {
    public static void main(String[] args) throws Exception {
        URL aURL = new URL("http://example.com:80/docs/books/tutorial"
                           + "/index.html?name=john&sirname=smith#flushing");
        System.out.println("protocol = " + aURL.getProtocol());
        System.out.println("authority = " + aURL.getAuthority());
        System.out.println("host = " + aURL.getHost());
        System.out.println("port = " + aURL.getPort());
        System.out.println("path = " + aURL.getPath());
        System.out.println("query = " + aURL.getQuery());
        System.out.println("filename = " + aURL.getFile());
        System.out.println("ref = " + aURL.getRef());
    }
}
Το αποτέλεσμα εκτέλεσης του παραπάνω κώδικα είναι το εξής
protocol = http
authority = example.com:80
host = example.com
port = 80
path = /docs/books/tutorial/index.html
query = name=john&sirname=smith
filename = /docs/books/tutorial/index.html?name=john&sirname=smith
ref = flushing
===== Χρησιμοποιώντας την κλάση URL για να ανοίξουμε ένα απομακρυσμένο resource =====
import java.net.*;
import java.io.*;
public class URLReader {
  public static void main(String[] args) {    
    URL url=null;
    try {   
      url = new URL(args.length>0 ? args[0] : "http://feeds.bbci.co.uk/news/rss.xml");
      BufferedReader in = new BufferedReader(
        new InputStreamReader(url.openStream()) );
      String inputLine;
      while ((inputLine = in.readLine()) != null) {
        System.out.println(inputLine);
      }
      in.close();
    } 
    catch(MalformedURLException ex) {
      System.out.println("Malformed URL: +"+ args[0] );
      ex.printStackTrace();
    }
    catch(IOException ex) {
      System.out.println("Error while reading or writing from URL: "+url.toString() );
    }
  }
}
To παραπάνω θα μπορούσε να γραφεί ισοδύναμα ως εξής με χρήση ενός αντικειμένου [[http://docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html|URLConnection]].
import java.net.*;
import java.io.*;
public class URLConnectionReader {
  public static void main(String[] args) {    
    URL url=null;
    try {   
      url = new URL(args.length>0 ? args[0] : "http://feeds.bbci.co.uk/news/rss.xml");
      URLConnection urlcon = url.openConnection();
      BufferedReader in = new BufferedReader(
        new InputStreamReader(urlcon.getInputStream()) );
      String inputLine;
      while ((inputLine = in.readLine()) != null) {
        System.out.println(inputLine);
      }
      in.close();
    } 
    catch(MalformedURLException ex) {
      System.out.println("Malformed URL: +"+ args[0] );
      ex.printStackTrace();
    }
    catch(IOException ex) {
      System.out.println("Error while reading or writing from URL: "+url.toString() );
    }
  }
}