This is an old revision of the document!
Table of Contents
Δουλεύοντας με URLs
Τα URLs (Uniform Resource Locators), είναι διαδικτυακές διευθύνσεις οι οποίες προϋποθέτουν την ύπαρξη ενός διαδικτυακού πρωτοκόλλου στο επίπεδο της εφαρμογής (π.χ http, ftp) το οποίο υλοποιείται πάνω από την 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 μπορούν να δημιουργήσουν ένα MalformedURLException εάν το πρωτόκολλο που εισάγεται δεν είανι σωστό ή ένα από τα ορίσματα έχει τιμή NULL. Θα πρέπει να διαχειριστείτε το συγκεκριμένο Exception μέσε ένα try/catch block.
Αναλύοντας ένα URL με βάση το API της κλάσης
- DecomposeURL.java
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
- URLReader.java
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 παραπάνω θα μπορούσε να γραφεί ισοδύναμα ως εξής με χρήση ενός αντικειμένου URLConnection.
- URLConnectionReader.java
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() ); } } }