Maison > Java > javaDidacticiel > Comment puis-je charger des ressources à partir du chemin de classe Java à l'aide d'un protocole URL personnalisé ?

Comment puis-je charger des ressources à partir du chemin de classe Java à l'aide d'un protocole URL personnalisé ?

Mary-Kate Olsen
Libérer: 2024-11-21 20:32:10
original
204 Les gens l'ont consulté

How Can I Load Resources from the Java Classpath Using a Custom URL Protocol?

URL pour charger des ressources à partir du chemin de classe en Java

En Java, diverses ressources peuvent être chargées à l'aide d'une API similaire mais avec des protocoles d'URL différents. Cela permet de découpler le processus de chargement des ressources de l'application et simplifie la configuration des ressources.

Pouvez-vous utiliser un protocole pour obtenir des ressources à l'aide du chargeur de classe actuel, similaire au protocole Jar mais sans spécifier le fichier d'origine ou dossier ?

Implémentation

Cela peut être réalisé en implémentant un URLStreamHandler personnalisé et en l'enregistrant auprès du JVM.

Implémentation de base

  1. Créer un URLStreamHandler : Ce gestionnaire permet l'ouverture de connexion avec l'URL donnée. Il doit étendre la classe URLStreamHandler et implémenter la méthode openConnection. L'implémentation doit utiliser le chargeur de classe fourni pour localiser la ressource et ouvrir une connexion à celle-ci.
  2. Code : Le code Java suivant fournit un exemple d'implémentation du gestionnaire personnalisé :
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
import java.net.URLStreamHandlerFactory;
import java.util.HashMap;
import java.util.Map;

public class ClasspathHandler extends URLStreamHandler {
    private final ClassLoader classLoader;

    public ClasspathHandler(ClassLoader classLoader) {
        this.classLoader = classLoader;
    }

    @Override
    protected URLConnection openConnection(URL u) throws IOException {
        // Locate the resource using the classloader
        URL resourceUrl = classLoader.getResource(u.getPath());
        // Open the connection to the resource
        return resourceUrl.openConnection();
    }
}
Copier après la connexion
  1. Utilisation : Le gestionnaire personnalisé peut être utilisé avec une URL pour charger des ressources à partir de le chemin de classe :

    new URL("classpath:org/my/package/resource.extension").openConnection();
    Copier après la connexion

Enregistrement du gestionnaire JVM

Pour rendre le gestionnaire accessible globalement, enregistrez-le auprès de la JVM à l'aide d'un URLStreamHandlerFactory :

import java.net.URL;
import java.net.URLStreamHandler;
import java.net.URLStreamHandlerFactory;
import java.util.HashMap;
import java.util.Map;

public class ClasspathHandlerFactory implements URLStreamHandlerFactory {
    private final Map<String, URLStreamHandler> protocolHandlers;

    public ClasspathHandlerFactory() {
        protocolHandlers = new HashMap<String, URLStreamHandler>();
        addHandler("classpath", new ClasspathHandler(ClassLoader.getSystemClassLoader()));
    }

    public void addHandler(String protocol, URLStreamHandler handler) {
        protocolHandlers.put(protocol, handler);
    }

    public URLStreamHandler createURLStreamHandler(String protocol) {
        return protocolHandlers.get(protocol);
    }
}
Copier après la connexion

Appelez URL.setURLStreamHandlerFactory() avec la fabrique configurée pour vous inscrire it.

Licence

L'implémentation fournie est publiée dans le domaine public. L'auteur encourage le partage et la publication des modifications.

Notes supplémentaires

Bien que cette approche offre de la flexibilité, il est important de prendre en compte les problèmes potentiels, tels que la possibilité d'enregistrements multiples de JVM Handler Factory et Utilisation par Tomcat d'un gestionnaire JNDI. Par conséquent, il est recommandé de tester dans l’environnement souhaité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal