2010-04-06 12 views
0

Il y a beaucoup de questions semblables, mais, sans doute, le mien est un peu différent:Java WebApp: ressource de chargement de .jar situé dans WEB-INF

Quelle est la bonne façon de charger des ressources à l'intérieur de .jar fichier situé dans le dossier WEB-INF/lib (si je connais le nom du fichier jar et le nom de la classe à laquelle appartient la ressource), alors que l'application Web est en cours d'exécution? Dois-je utiliser getServletContext().getResourceAsStream(?) à cet effet ou le <name-of-known-class>.getResourseAsStream(?), et quel chemin dois-je spécifier ici?

Ainsi, la structure est:

/WEB-INF 
    /classes 
     /some/package/name 
      ?.class #some Java code or Servlet that tries to read 'required-file.xml' 
    /lib 
     /<jar-with-known-name>.jar 
      /another/package/with/known/name 
       SomeKnownClass.class 
       required-file.xml 
+0

http://stackoverflow.com/questions/2552793/reading-xml-file-inside-a-jar-package http://stackoverflow.com/questions/2504272/shipping-java-code- avec-data-cuit-dans-le-pot http://stackoverflow.com/questions/861500/url-to-load-resources-from-the-classpath-in-java http://stackoverflow.com/ questions/1108434/howto-load-a-resource-from-web-inf-directory-of-a-web-archive Questions qui semblent similaires Ma différence: Je spécifie habituellement 'getServletContext.getResourceAsStream ('/ WEB- INF/classes/blah/blah/resource.xml ') 'pour charger les ressources qui ne sont pas dans' .jar's. Si ce n'est pas faux, quel est le chemin à suivre? –

Répondre

3

Vous devez utiliser <name-of-known-class>.getResourseAsStream(?), qui charge des ressources en utilisant le classloader "local". Dans le cas d'une webapp, cela utilisera le chargeur de classe de la webapp.

La méthode getServletContext().getResourceAsStream(?) renvoie des ressources webapp relatives à la racine de l'application web et ne peut pas regarder à l'intérieur des fichiers JAR. Pour cette méthode, javadoc décrit le chemin que vous devez spécifier, mais vous pouvez essentiellement utiliser des chemins relatifs à la classe connue, par ex.

SomeKnownClass.class.getResourceAsStream("required-file.xml"); 
+1

Merci! Maintenant, je sais la bonne façon :). –