====== Δουλεύοντας με 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() );
}
}
}