La classe java.net.URLStreamHandler

Sommaire du document

La classe abstraite URLStreamHandler permet la gestion d'un protocole spécifique. Nous appelerons cependant rarement directement ses méthodes, car elles sont appelées par d'autres méthodes des classes URL et URLConnection. C'est en surchargeant (“overriding”) les méthodes d'URLStreamHandler que nous pouvons permettre à la classe URL d'utiliser de nouveaux protocoles.

La classe URLStreamHandler définit 4 méthodes d'accès qui peuvent être surchargées par les sous-classes, mais seule la méthode openConnection doit obligatoirement être surchargée car elle est abstraite et ne fournit donc pas d'implémentation par défaut.

 

Méthode openConnection

protected abstract URLConnection openConnection(URL u) throws IOException

La plus importante responsabilité de URLStreamHandler est de créer un objet URLConnection approprié à l'URL par une surcharge de la méthode abstraite openConnection.

La méthode openConnection prend en paramètre une URL. De cette URL, elle peut extraire le protocole, et retourner un objet URLConnection. L'objet URLConnection peut être utilisé pour créer les flux d'entrée et de sortie pour accéder à la ressource pointée par l'URL.


Code Java (Classe Handler pour le protocole brol) (20 lignes) :
  1. import java.io.IOException;
  2. import java.net.URL;
  3. import java.net.URLConnection;
  4. import java.net.URLStreamHandler;
  5.  
  6. public class Handler extends URLStreamHandler{
  7.  
  8. private static final int DEFAULT_PORT = 8241;
  9.  
  10. protected URLConnection openConnection(URL u) throws IOException {
  11. if("prout".equals(u.getProtocol())){
  12. return new ProutURLConnection(u);
  13. }
  14. return null;
  15. }
  16.  
  17. public int getDefaultPort() {
  18. return DEFAULT_PORT;
  19. }
  20. }

Nous pouvons aussi utiliser une classe qui implémente l'interface URLStreamHandlerFactory

  1. /**
  2.  * This BrolURLStreamHandlerFactory allows us to create URL
  3.  * objects that will use the sun.net.www protocol handlers
  4.  * for known schemes. If the scheme is not one of those
  5.  * within the JDK, we create an instance of our BrolHandler
  6.  * and return that. If this factory returned null instead,
  7.  * a MalformedURLException would be thrown for unknown
  8.  * schemes.
  9.  */
  10. import java.net.URLStreamHandler;
  11. import java.net.URLStreamHandlerFactory;
  12.  
  13. public class BrolURLStreamHandlerFactory implements URLStreamHandlerFactory {
  14.  
  15. public URLStreamHandler createURLStreamHandler(String protocol) {
  16. if (protocol.equalsIgnoreCase("ftp")) {
  17. return new sun.net.www.protocol.ftp.Handler();
  18. }
  19. if (protocol.equalsIgnoreCase("gopher")) {
  20. return new sun.net.www.protocol.gopher.Handler();
  21. }
  22. if (protocol.equalsIgnoreCase("file")) {
  23. return new sun.net.www.protocol.file.Handler();
  24. }
  25. if (protocol.equalsIgnoreCase("mailto")) {
  26. return new sun.net.www.protocol.mailto.Handler();
  27. }
  28. if (protocol.equalsIgnoreCase("prout")) {
  29. return new sun.net.www.protocol.prout.Handler();
  30. }
  31. return new sun.net.www.protocol.brol.Handler();
  32. }
  33. }
  1. package sun.net.www.protocol.brol;
  2.  
  3. import java.io.IOException;
  4. import java.net.URL;
  5. import java.net.URLConnection;
  6. import java.net.URLStreamHandler;
  7.  
  8. /**
  9.  * This is a null protocol handler. This handler will allow
  10.  * us to create a URL object for this protocol, but we won't
  11.  * be able to retrieve any data through it.
  12.  */
  13. public class Handler extends URLStreamHandler{
  14.  
  15. /**
  16.   * This method will only return null. Data cannot be
  17.   * obtained from this handler.
  18.   * @param u The URL to obtain data from.
  19.   * @return A null URLConnection.
  20.   */
  21. protected URLConnection openConnection(URL u) throws IOException {
  22. return null;
  23. }
  24. }

 

Méthode parseURL

protected void parseURL(URL u, String spec, int start, int limit)

Une autre responsabilité importante de la classe URLStreamHandler est de diviser la chaîne de caractères représentant l'URL en différentes parties et d'utiliser ces parties pour affecter les valeurs aux différents champs de l'objet URL. La méthode parseURL analyse et divise l'URL puis appelle enfin  la méthode setURL pour assigner les valeurs aux différents champs de l'URL.

La méthode parseURL que Java fournit présume que l'URL ressemble plus ou moins à une URL HTTP :

protocole://www.domaine.com:port/chemin/ressource.ext

Ce comportement fonctionne pour des URL de type FTP ou Gopher, mais pas pour mailto ou news, et encore moins dans le cas d'un protocole que nous créons nous-même, et qui définit sa propre structure d'URL.
Si nous notre « gestionnaire de protocole » (en anglais, “protocol handler”) utilise des URL de type HTTP, nous ne sommes pas obligés de surcharger la methode parseURL. Cependant, si nous devons surcharger la méthode parseURL, nous devons aussi absolument surcharger la méthode toExternalForm qui place les parties de l'URL dans une chaîne de caractères.

  1. public void parseURL(URL u, String spec, int start, int limit){
  2. String protocol = u.getProtocol();
  3. int port = u.getPort();
  4. String host, file, userInfo, query, ref, authority;
  5. host = "";
  6. file = "";
  7. authority = "";
  8.  
  9. if(start<limit){
  10. String address = spec.substring(start,limit);
  11. int atSign = address.indexOf('@');
  12. int questionMark = address.indexOf('?');
  13. int hostEnd = questionMark <=0 ? questionMark&nbsp;: address.length();
  14. if(atSign >= 0){
  15. host = address.substring(atSign+1, hostEnd);
  16. userInfo = address.substring(0, atSign);
  17. }
  18. if(questionMark >= 0 && questionMark < atSign){
  19. query = address.substring(questionMark+1);
  20. }
  21. if(userInfo != null){
  22. authority = userInfo + '@';
  23. }
  24. authority += host;
  25. if(port < 0){
  26. authority += ':' + port;
  27. }
  28. setURL(u, protocol, host, port, authority, userInfo, file, query, ref);
  29. }
  30. }

 

Remarque

La requête est extraite de l'URL, mais nous devons ensuite veiller à la décoder.N'oublions pas non plus qu'au moment de coder l'URL, nous devons veiller à préserver les caractères spéciaux (par exemple, le point d'interrogation qui marque le début des paramètres, le signe & qui permet de séparer les paramètres, etc.).

 

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.

 

Nuage de mots clés

6 mots clés dont 0 définis manuellement (plus d'information...).

Avertissement

Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Notes

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

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

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

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

  5.  File Transfer Protocol : correspond à « protocole de transfert de fichiers” en français

  6.  FTP : “File Transfer Protocol” (en français, « protocole de transfert de fichiers »)

  7.  gestionnaire de protocole : correspond à “protocol handler » en anglais

 

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-488
Document créé le 02/11/05 01:00, dernière modification le Mercredi 28 Juin 2017, 15:26
Source du document imprimé : http:///www.gaudry.be/java-urlstreamhandler.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,43 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
Quand on veut une chose, tout l'Univers conspire à nous permettre de réaliser notre rêve.

Paulo Coelho [L'Alchimiste]
 
l'infobrol
Nous sommes le Jeudi 29 Juin 2017, 04:06, toutes les heures sont au format GMT+1.00 Heure, heure d'été (+1)