2010-02-18 11 views
2

Je suis nouveau à servlet. J'utilise le code suivant dans servlet.then déployé sur Jboss 4.1. backup_database_configuration_location est l'emplacement du fichier de propriétés. Mais il ne peut pas être trouvé. comment je peux spécifier les répertoires dans le fichier de guerre? Merci d'avanceComment puis-je spécifier les répertoires dans le fichier war?

try { 
    backupDatabaseConfiguration = new Properties(); 
    FileInputStream backupDatabaseConfigurationfile = new FileInputStream(backup_database_configuration_location)); 
    backupDatabaseConfiguration.load(backupDatabaseConfigurationfile); 
    backupDatabaseConfigurationfile.close(); 
} catch (Exception e) { 
    log.error("Exception while loading backup databse configuration ", e); 
    throw new ServletException(e); 
} 

Répondre

2

Si elle est placée dans le webcontent, puis utiliser ServletContext#getResourceAsStream():

InputStream input = getServletContext().getResourceAsStream("/WEB-INF/file.properties")); 

Le getServletContext() métho d est hérité de HttpServlet. Il suffit de l'appeler tel quel dans la servlet.

Si elle est placée dans le classpath, puis utilisez ClassLoader#getResourceAsStream():

InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("file.properties"); 

La différence avec Class#getResourceAsStream() est que vous n'êtes pas dépendant de la classe qui a chargé la classe (ce qui est peut-être un autre que le thread utilise, si la classe est en fait une classe utilitaire empaquetée dans un fichier JAR et que le chargeur de classe particulier peut ne pas avoir accès à certains chemins de chemin de classe).

1

Où se trouve votre fichier de propriétés? Est-ce directement dans votre disque dur, ou dans un fichier JAR?

Vous pouvez essayer de récupérer le fichier en utilisant la méthode getResourceAsStream():

configuration = new Properties(); 
configuration.load(MyClass.class.getResourceAsStream(backup_database_configuration_location)); 

(ou bien sûr, remplacez MyClass par le nom de votre classe actuelle)

+0

C'est l'approche que j'utilise, bien qu'il y ait des choses à noter: a) Vous devriez fermer l'InputStream après la méthode .load. b) Dans une classe, getResourceAsStream sera relatif à ce ClassLoader. Cela signifie que si votre fichier se trouve dans /WEB-INF/classes/com/example/config.properties, vous devrez passer "/com/example/config.properties" dans getResourceAsStream. – Clinton

+0

@Clinton Pour le point a: Oui, bien sûr. Je n'ai pas écrit le bloc 'try {} catch' non plus;) – romaintaz

Questions connexes