Ce n'servletcontext.getRealPath(“/”) de la moyenne et de quand dois-je utiliser
Dans l'extrait suivant:
ServletContext context = request.getServletContext();
String path = context.getRealPath("/");
Ce n' /
dans la méthode getRealPath()
représenter? Quand devrais-je utiliser?
- qui est appelé comme
WebApplicationContext
. par exemple, Vous avez une application nomméeTestWebApp
puis/
donnerait chemin jusqu'àTestWebApp
- C'est la racine de votre application web.
Vous devez vous connecter pour publier un commentaire.
Introduction
La
ServletContext#getRealPath()
est destiné à convertir un contenu web chemin (le chemin d'accès dans la GUERRE élargie structure des dossiers sur le serveur du système de fichier du disque) à un strict système de fichier du disque chemin.La
"/"
représente le contenu web racine. I. e. il représente laweb
dossier comme dans le dessous de la structure du projet:Donc, en passant à la
"/"
àgetRealPath()
vous retournez l'absolu de disque système de fichiers le chemin de la/web
dossier de l'élargissement de la GUERRE de fichier du projet. Quelque chose comme/path/to/server/work/folder/some.war/
de laquelle vous devriez être capable de continuer à utiliser dansFile
ouFileInputStream
.Noter que la plupart des démarreurs ne semblent pas voir/rendrez compte que vous pouvez réellement passer l'ensemble du contenu web chemin et qu'ils utilisent le plus souvent
au lieu de
Ne jamais écrire des fichiers dans il
Également noter que même si vous pouvez écrire de nouveaux fichiers à l'aide de
FileOutputStream
, toutes les modifications (par exemple les nouveaux fichiers ou les fichiers modifiés) sera perdu chaque fois que la GUERRE est redéployé; avec la simple raison que tous ces changements ne sont pas contenus dans le fichier WAR. Donc, tous les partants qui tentent d'enregistrer les fichiers téléchargés dans il y a tout faux.En outre,
getRealPath()
retournera toujoursnull
ou un de tout à fait inattendu chemin d'accès lorsque le serveur n'est pas configuré pour étendre le fichier WAR dans le système de fichier du disque, mais au contraire par exemple de la mémoire comme un système de fichiers virtuel.getRealPath()
est portables; vous feriez mieux de ne jamais l'utiliserUtilisation
getRealPath()
soigneusement. Il y a en fait pas judicieux monde réel de cas d'utilisation pour elle. Si vous avez réellement besoin est d'obtenir unInputStream
de la ressource web, de mieux utiliser lesServletContext#getResourceAsStream()
au lieu de cela, ce sera un travail, indépendamment de la façon dont la GUERRE est élargi. Donc, si par exemple vous souhaitez unInputStream
deindex.jsp
, puis faire pas faire:Mais au lieu de faire:
Ou si vous avez l'intention d'obtenir une liste de toutes les ressources web, des chemins, de l'utilisation
ServletContext#getResourcePaths()
à la place.Vous pouvez obtenir une ressource
URL
viaServletContext#getResource()
. Ce sera le retour denull
lorsque la ressource n'existe pas.Ou si vous avez l'intention d'enregistrer un fichier téléchargé, ou de créer un fichier temporaire, puis voir ci-dessous "Voir aussi" des liens.
Voir aussi:
ServletConfig#getServletContext().getRealPath(".")
?getResourceAsStream("/WEB-INF/filename.ext")
ougetResourcePaths("/WEB-INF")
. La clé est de spécifier un webcontent chemin relatif à partir avec/
.Une application web de chemin de contexte est le répertoire qui contient l'application web du répertoire WEB-INF. Il peut être considéré comme la "maison" de l'application web. Souvent, lors de l'écriture d'applications web, il peut être important d'obtenir le véritable emplacement de ce répertoire dans le système de fichiers, car cela vous permet de faire des choses telles que la lecture à partir de fichiers ou d'écrire dans des fichiers.
Cet emplacement peut être obtenu via le ServletContext de l'objet getRealPath() la méthode. Cette méthode peut être passé en paramètre de Chaîne de valeur Fichier.séparateur pour obtenir le chemin d'accès en utilisant le système d'exploitation du fichier séparateur ("/" pour UNIX, "\" pour Windows).
Il y a aussi un changement entre Java 7 et Java 8. Certes, il implique un type d'appel obsolète, mais j'ai dû ajouter un "/" pour obtenir notre programme de travail! Voici le lien d'en discuter Pourquoi ne servletContext.getRealPath renvoie la valeur null sur tomcat 8?
Ma Méthode: