Comment puis-je obtenir le nom de l'application web en Java EE?
Comment puis-je obtenir le nom de l'application web en Java EE?
Je suis très à l'aise avec Java autonomes, mais Java EE est nouveau pour moi. Je suis à écrire du code personnalisé à brancher à un tiers Java EE d'un ensemble de rapports. J'ai plusieurs instances déployées sur le même serveur Tomcat, j'ai donc quelque chose comme:
C:\ +-- tomcat6 +-- webapps +-- app1 +-- app2
Ainsi, lorsque l'utilisateur passe à, disons, http://example.com/app1/viewReport, je veux être en mesure d'obtenir la "app1". (Et non pas par l'analyse de l'URL, de préférence.)
Aussi, si il y avait un moyen d'obtenir la racine de app1 (dans cet exemple, C:\tomcat6\webapps\app1), ce serait très bien aussi.
Vous devez vous connecter pour publier un commentaire.
1. Obtenir le "nom"
Il est appelé le chemin de contexte. Si vous le code est en cours d'exécution au sein de la web app contexte de demande, vous pouvez l'obtenir en appelant
HttpServletRequest#getContextPath()
.2. L'accès physique/ressource réelle
Si vous essayez d'accéder au contenu d'un fichier de ressources dans votre webapp, vous êtes mieux d'utiliser un de:
ServletContext#getResource(String)
ServletContext#getResourceAsStream(String)
Il est également possible d'obtenir le chemin d'accès physique sur le disque d'un fichier de ressources, étant donné le chemin d'accès relatif à l'application web à l'aide de
ServletContext#getRealPath(String)
, mais ce n'est pas fiable (ne fonctionne pas toujours si vous déployez vous webapp comme une GUERRE, par exemple).3. L'accès du chemin de classe, des ressources
Par votre commentaire, vous avez essayé d'accéder à une ressource au sein de l' /WEB-INF/classes répertoire. Que WEB-INF/classes/* est là une application web spécifique des classes d'aller, vous pouvez simplement accéder comme si l'on avait accès à tout le classpath de ressources Java SE demande. Encore une fois, en supposant que votre code s'exécute dans le contexte de l'application web, vous pouvez simplement utiliser les éléments suivants:
Dans votre cas, vous voudrez probablement utiliser ce dernier, et puis charger le fichier de Propriétés via les Propriétés#load(InputStream).
Quelque chose le long des lignes de:
webapps/myapp/WEB-INF/classes/reportCustom.properties
. est-ce un moyen plus simple de le faire? dans le passé, j'ai eu du Système.getProperty("myapp.la racine"), avec une chaîne codée en dur, qui est une propriété de web.xml qui donne le chemin d'accès racine. Mais ensuite, je trouve que nous avons besoin de l'appui de plusieurs instances sur le même Tomcat, donc je ne sais pas ce que "myapp" sera appelée.Depuis le fichier est dans le
classes
répertoire, vous pouvez le charger à l'aide de la Chargeur de classe (l'habitude de Java mécanisme de chargement des fichiers sur le chemin de la classe). Il est probablement préférable d'utiliser le contexte du chargeur de classe.