J'écris un Java servlet que je veux installer sur de nombreuses instances de Tomcat sur différents serveurs. Le servlet utilise des fichiers statiques qui sont emballés avec le fichier war sous WEB-INF. Il s'agit du répertoire structure dans une installation typique:
- Tomcat
-- webapps
--- myapp
---- index.html
---- WEB-INF
----- web.xml
----- classes
------ src
------- .....
----- MY_STATIC_FOLDER
------ file1
------ file2
------ file3
Comment puis-je connaître le chemin absolu de MY_STATIC_FOLDER, afin de pouvoir lire les fichiers statiques?
Je ne peux pas compter sur le "dossier actuel" (ce que j'obtiens dans un nouveau fichier (".")) Car cela dépend de l'endroit où le serveur Tomcat a été démarré, ce qui est différent dans chaque installation!
Vous pouvez utiliser ServletContext#getRealPath()
pour convertir un chemin de contenu Web relatif en chemin de système de fichiers disque absolu.
String relativeWebPath = "/WEB-INF/static/file1.ext";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
File file = new File(absoluteDiskPath);
InputStream input = new FileInputStream(file);
// ...
Cependant, si votre seule intention est d'en retirer un InputStream
, mieux vaut utiliser ServletContext#getResourceAsStream()
à la place car getRealPath()
peut retourner null
chaque fois que WAR n'est pas développé sur le système de fichiers de disque local (Tomcat le fait par défaut, mais est configurable pour ne pas le faire!):
String relativeWebPath = "/WEB-INF/static/file1.ext";
InputStream input = getServletContext().getResourceAsStream(relativeWebPath);
// ...
C'est après tout beaucoup plus robuste que l'approche Java.io.File
.