Les classes URL, URLConnection, URLStreamHandler, et URLStreamHandlerFactory nous permettent d'intecepter et de gérer les protocoles en Java. La manière dont ces classes interagissent peut sembler confuse, et un moyen de comprendre comment cela fonctionne est de résumer la séquence d'évènements :
Le constructeur de l'objet URL tente de trouver un URLStreamHandler en passant la partie protocole, de manière statique, à la méthode URLStreamHandler getURLStreamHandler(String protocol)[1] de la classe URL.
/** * Returns the Stream Handler. * @param protocol the protocol to use */ if (handler == null) { boolean checkedWithFactory = false; // Use the factory (if any) if (factory != null) { handler = factory.createURLStreamHandler(protocol); checkedWithFactory = true; } // Try java protocol handler if (handler == null) { packagePrefixList new sun.security.action.GetPropertyAction( protocolPathProp,"")); if (packagePrefixList != "") { packagePrefixList += "|"; } // REMIND: decide whether to allow the "null" class prefix // or not. packagePrefixList += "sun.net.www.protocol"; StringTokenizer packagePrefixIter = while (handler == null && packagePrefixIter.hasMoreTokens()) { String packagePrefix = packagePrefixIter.nextToken().trim(); try { try { if (cl != null) { cls = cl.loadClass(clsName); } } if (cls != null) { } // any number of exceptions can get thrown here } } } synchronized (streamHandlerLock) { // Check again with hashtable just in case another // thread created a handler since we last checked if (handler2 != null) { return handler2; } // Check with factory if another thread set a // factory since our last check if (!checkedWithFactory && factory != null) { handler2 = factory.createURLStreamHandler(protocol); } if (handler2 != null) { // The handler from the factory must be given more // importance. Discard the default handler that // this thread created. handler = handler2; } // Insert this handler into the hashtable if (handler != null) { handlers.put(protocol, handler); } } } return handler; }
Explications :
Notion avancée
Au lieu d'appeller openConnection(), le programme peut appeller getContent() ou getInputStream(). Dans ce cas, l'objet URLStreamHandler instanciera un objet URLConnection de la classe appropriée. Quoi qu'il en soit, au lieu de retourner l'objet URLConnection lui-même, l'URLStreamHandler retourne le résultatde getContent() de URLConnection ou la méthode getInputStream().Le programme utilise les méthodes de la classe URLConnection pour interagir avec la ressource distante.
Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.
17 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.
Recherche (afficher)
Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
Citation (masquer)