java:urls

Δουλεύοντας με 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() );
    }
  }
}
java/urls.txt · Last modified: 2016/02/26 11:15 (external edit)