This shows you the differences between two versions of the page.
|
java:urls [2015/03/24 08:24] gthanos [Δουλεύοντας με URLs] |
java:urls [2016/02/26 11:15] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Δουλεύοντας με URLs ====== | ||
| - | Τα URLs (Uniform Resource Locators), είναι διαδικτυακές διευθύνσεις οι οποίες προϋποθέτουν την ύπαρξη ενός πρωτοκόλλου στο επίπεδο της εφαρμογής το οποίο υλοποιείται πάνω από την [[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 αναλύεται ως εξής | ||
| - | <code> | ||
| - | 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' | ||
| - | </code> | ||
| - | |||
| - | |||
| - | |||
| - | ===== Δημιουργώντας ένα URL ===== | ||
| - | |||
| - | Μπορείτε να δημιουργήσετε ένα αντικείμενο του τύπου URL με τους παρακάτω τρόπους | ||
| - | * με χρήση της απόλυτης διεύθυνσης | ||
| - | <code java> | ||
| - | URL myURL = new URL("http://example.com/pages/"); | ||
| - | </code> | ||
| - | * με χρήση ενός //base URL// και μία σχετική διεύθυνση σε σχέση με αυτό όπως παρακάτω (θεωρήστε ως myURL, το URL που ορίστηκε παραπάνω): | ||
| - | <code java> | ||
| - | URL page1URL = new URL(myURL, "page1.html"); | ||
| - | URL page2URL = new URL(myURL, "page2.html"); | ||
| - | </code> | ||
| - | * με χρήση των επιμέρους στοιχείων του URL, όπως παρακάτω | ||
| - | <code java> | ||
| - | URL yourURL = new URL("http", "example.com", 80, "pages/page1.html"); | ||
| - | </code> | ||
| - | |||
| - | Όλοι οι κατασκευαστές της κλάσης URL μπορούν να δημιουργήσουν ένα [[http://docs.oracle.com/javase/7/docs/api/java/net/MalformedURLException.html|MalformedURLException]] εάν το πρωτόκολλο που εισάγεται δεν είανι σωστό ή ένα από τα ορίσματα έχει τιμή NULL. Θα πρέπει να διαχειριστείτε το συγκεκριμένο Exception μέσε ένα try/catch block. | ||
| - | |||
| - | ===== Αναλύοντας ένα URL με βάση το API της κλάσης ===== | ||
| - | |||
| - | <code java 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()); | ||
| - | } | ||
| - | } | ||
| - | </code> | ||
| - | |||
| - | Το αποτέλεσμα εκτέλεσης του παραπάνω κώδικα είναι το εξής | ||
| - | <code> | ||
| - | 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 | ||
| - | </code> | ||
| - | |||
| - | ===== Χρησιμοποιώντας την κλάση URL για να ανοίξουμε ένα απομακρυσμένο resource ===== | ||
| - | |||
| - | <code java 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() ); | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | </code> | ||
| - | |||
| - | To παραπάνω θα μπορούσε να γραφεί ισοδύναμα ως εξής με χρήση ενός αντικειμένου [[http://docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html|URLConnection]]. | ||
| - | <code java 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() ); | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | </code> | ||