2010-01-06 5 views
8

J'ai une servlet déployée en tant que guerre dans JBoss 4.0.2. J'ai un fichier de propriétés pour l'application déployée. Où dois-je mettre ce fichier? Sous le répertoire conf dans le dossier jboss server \ default \ conf? Comment charger ce fichier de propriétés de manière portable?Charger le fichier de propriétés dans une servlet Java déployée dans JBoss en tant que guerre

+0

Le projet qui en a besoin a été annulé, donc je n'ai jamais suivi. – Carlosfocker

Répondre

17

Pour charger ce fichier de propriétés dans un portable de manière, la meilleure façon serait de le mettre sur le chemin de classe de l'application Web (que ce soit dans un JAR sous WEB-INF/lib/ ou sous WEB-INF/classes/ ou sur le serveur d'application classpath si vous voulez pour être en mesure de modifier ce fichier sans reconditionner votre application Web) et d'utiliser Class#getResourceAsStream(String).

Le code suivant obtient un InputStream pour un fichier de propriétés qui se trouve dans le même package que le servlet dans lequel le code est exécuté:

InputStream inStream = Thread.currentThread().getContextClassLoader() 
       .getResourceAsStream("myfile.properties"); 

Ensuite, load(InputStream) dans un objet Properties (sauter la gestion des exceptions) :

Properties props = new Properties(); 
props.load(inStream); 
1

Le meilleur endroit pour le mettre est sous le propre doc-racine web-apps, comme « ./WEB-INF/myapp.properties », à savoir par rapport à l'endroit où le conteneur de servlet déballer votre fichier .war ou .ear. Vous pouvez fournir le fichier de propriétés directement dans le .war.

Le ServletContext a une méthode getRealPath(String path) qui renvoie le chemin réel dans le système de fichiers. En utilisant le chemin réel, vous pouvez le charger dans une collection Properties.

Mise à jour Le code dans votre commentaire essaie de rechercher vrai chemin pour «/», vous devez demander le chemin relatif à votre fichier de propriétés, comme dans:

String propertiesFilePath = getServletContext().getRealPath("WEB-INF/application.properties"); 
Properties props = properties.load(new FileInputStream(propertiesFilePath)); 
+0

J'ai donc essayé ce qui suit: Propriétés de chaîneFilePath = getServletContext(). GetRealPath ("/") + Fichier.separator + "WEB-INF" + Fichier.separator + "application.properties"; properties.load (nouveau FileInputStream (propertiesFilePath)); Je reçois une exception FileNotFoundException. Je ne vois pas ce que j'ai fait de mal. – Carlosfocker

2

Si le fichier de propriétés peut être déployé avec l'application en faire partie de votre arborescence source. Cela entraînera le fichier de propriétés à être dans le dossier WEB-INF/classes.

Cela peut ensuite être lu à l'aide

Properties properties = loadProperties("PropertyFileName.properties", this.getClass()); 
... 

public static Properties loadProperties(String resourceName, Class cl) { 
    Properties properties = new Properties(); 
    ClassLoader loader = cl.getClassLoader(); 
    try { 
     InputStream in = loader.getResourceAsStream(resourceName); 
     if (in != null) { 
      properties.load(in); 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return properties; 
} 
4

Il suffit de mettre la main sur ServletContext puis

InputStream stream = getServletContext().getResourceAsStream("/WEB-INF/log4j.properties"); 
Properties props = new Properties(); 
props.load(stream); 

Cela fonctionnera toujours, que vous déployez une guerre ou la guerre a explosé.

Questions connexes