Manipuler des objets java.net.URL

Sommaire du document

Bien que sauver une URL sous forme de chaîne de caractères semble sans conséquences, il est préférable de considérer une URL comme un objet (“Oriented Object Minded”[3]), dont nous pouvons manipuler les champs tels que protocole, nom d'hôte, port, requête, etc.

La classe java.net.URL est une abstraction d'une URL dont les instances sont utilisées pour référer ou pour accéder à un objet sur l'Internet. Au lieu d'utiliser l'héritage pour les instances des différentes sortes d'URL, la classe URL utilise le strategy pattern, pour lequel le gestionnaire de protocole (“protocol handler”) représente la stratégie.

 

Créer un objet URL

Une URL est immutable.

Nous ne devons pas nous préoccuper des détails du protocole utilisé, du format des données qui seront récupérées, ni de la manière de communiquer avec le serveur.

Un objet URL peut être construit depuis une chaîne de caractères, ou en spécifiant les champs individuels (protocole, nom d'hôte, port, requête, etc.). Nous pouvons aussi spécifier qu'une URL est relative à une autre URL.

Les 6 constructeurs à notre disposition sont suceptibles de lancer une exception de type MalformedURLException si nous tentons de créer un objet URL ayant un protocole non supporté. Les protocoles supportés dépendent de l'implémentation. Si nous désirons utiliser un protocole qui n'est pas supporté par la machine virtuelle Java (JVM), nous devons installer un gestionnaire de protocole (“protocol handler”).

Le code suivant affiche les protocoles supportés en utilisant l'exception levée.


Code Java (SupportedJVMProtocols) (44 lignes) :
  1. package protocols;
  2.  
  3. import java.net.MalformedURLException;
  4. import java.net.URL;
  5. import java.util.Iterator;
  6. import java.util.Set;
  7. import java.util.TreeSet;
  8.  
  9. public class SupportedJVMProtocols {
  10. private Set protocols = new TreeSet();
  11.  
  12. public SupportedJVMProtocols(){
  13. protocols.add("http://www.gaudry.be/");
  14. protocols.add("mailto:infobrol@ibelgique.com");
  15. protocols.add("telnet://localhost:8080/");
  16. protocols.add("file://C://temp");
  17. protocols.add("gopher://info.asu.edu/");
  18. protocols.add("nfs://acides.adn/arn/shemas/");
  19. protocols.add("rmi://metalab.inc.edu/RenderEngine");
  20. protocols.add("verbatim:http://www.adc.org/");
  21. protocols.add("jdbc:mysql://purine.guanine.edu:3306/News");
  22. }
  23.  
  24. public void search(){
  25. Iterator itr = protocols.iterator();
  26. String urlString = null;
  27. while(itr.hasNext()){
  28. try{
  29. urlString = (String)itr.next();
  30. URL url = new URL(urlString);
  31. System.out.println(url.getProtocol() + " is supported");
  32. }
  33. String protocol = urlString.substring(0, urlString.indexOf(':'));
  34. System.out.println(protocol + " is not supported");
  35. }
  36. }
  37. }
  38.  
  39. public static void main(String[] args) {
  40. SupportedJVMProtocols s = new SupportedJVMProtocols();
  41. s.search();
  42. }
  43. }

Ce qui devrait donner plus ou moins ceci :

file is supported
gopher is supported
http is supported
jdbc is not supported
mailto is supported
nfs is not supported
rmi is not supported
telnet is not supported
verbatim is supported

 

 

Récupérer des données depuis une URL

Trois manières s'offrent à nous pour accéder aux données par un objet URL :

  • La méthode openStream() nous retourne l'information au travers d'un objet InputStream.
  • La méthode openConnection() nous retourne un objet URLConnection.
  • Les méthodes getContent() et getContent(Class[] classes) nous retournent le contenu.

 

Méthode openStream()

La méthode openStream() nous permet de nous connecter à la ressource référencée par l'URL, en effectuant les transactions nécessaires entre le client et le serveur (“hand-shaking”[6]). Cette méthode nous retourne l'information par le biais d'un InputStream.

Par cette méthode, nous n'avons aucun accès aux en-têtes HTTP, ni aucune information relative au protocole. Les données ne sont donc pas interprétées, et sont récupérées telles qu'elles sont lues sur la ressource. Nous ne pouvons donc obtenir aucune information sur l'encodage des données que nous retourne le flux. Par exemple, dans le cas de la lecture d'une page Web, nous devons mettre en place un parseur pour extraire la balise meta spécifiant l'encodage, dans l'en-tête du document si cette dernière est présente.

 

Méthode openConnection()

La méthode openConnection() nous offre la possibilité d'accéder aux headers HTTP, ce que ne nous permettait pas la méthode openStream(). openConnection() ouvre pour nous un socket vers l'URL spécifiée, et nous retourne une connexion ouverte vers la ressource désirée, au travers d'un objet URLConnection. Nous pouvons donc communiquer directement avec le serveur.

 

Méthode getContent()

Les méthodes getContent() et getContent(Class[] classes) nous permettent de récupérer le contenu référencé par l'URL, et tentent de créer à partir du flux un objet dont le type est déterminé par le type MIME.

Avec la méthode getContent(), nous pouvons peu aisément déterminer le type d'objet que nous récupèrerons. Il est alors préférable d'utilmiser la méthode getContent(Class[] classes), en combinaison avec un test instanceof pour déterminer quelle classe dans le tableau est retournée.

 

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Notes

  1. a,b,c,d,e,f,g,h,i,j,k Uniform Resource Locator : correspond à « localisateur uniforme de ressource” en français

  2. a,b,c,d,e,f,g,h,i,j,k URL : “Uniform Resource Locator” (en français, « localisateur uniforme de ressource »)

  3.  Oriented Object Minded : correspond à « conçeption orienté-objet” en français

  4.  Java irtual Machine : correspond à « machine virtuelle Java” en français

  5.  JVM : “Java irtual Machine” (en français, « machine virtuelle Java »)

  6.  hand-shaking : correspond à « poignée de mains” en français

  7.  hand-shaking : « Bonjour, c'est moi le client ! » « Ah salut c'est toi, moi c'est le serveur »

  8. a,b Hypertext Transfer Protocol : correspond à « protocole de transfert hypertexte” en français

  9. a,b HTTP : “Hypertext Transfer Protocol” (en français, « protocole de transfert hypertexte »)

  10.  Hypertext Markup Language : correspond à « langage de balisage hypertexte” en français

  11.  HTML : “Hypertext Markup Language” (en français, « langage de balisage hypertexte »)

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-480
Document créé le 24/10/05 23:00, dernière modification le Vendredi 17 Juin 2011, 11:12
Source du document imprimé : http:///www.gaudry.be/java-url.html
St.Gaudry©07.01.02
Outils (masquer)
||
Recherche (afficher)
Recherche :

Utilisateur (masquer)
Apparence (afficher)
Stats (afficher)
15838 documents
455 astuces.
550 niouzes.
3107 definitions.
447 membres.
8121 messages.

Document genere en :
0,17 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
Un optimiste est un monsieur qui croit qu'une dame a terminé sa conversation téléphonique parce qu'elle dit au revoir.

Marcel Achard
 
l'infobrol
Nous sommes le Mercredi 22 Novembre 2017, 17:27, toutes les heures sont au format GMT+1.00 Heure, heure d'hiver