Résolvez des problèmes de chemin dans Java Web:
Les chemins utilisés en Java sont divisés en deux types: chemins absolus et chemins relatifs. En fin de compte, Java ne peut utiliser des chemins absolus que pour trouver des ressources. Toutes les méthodes de recherche de ressources sur les chemins relatives ne sont que quelques méthodes pratiques. Mais c'est l'API qui nous aide à construire un chemin absolu en bas pour trouver des ressources!
Lors du développement d'applications Web, vous devez souvent obtenir le chemin physique du webroot actuel dans le serveur.
S'il s'agit d'un servlet, d'une action, d'un contrôleur ou d'un filtre, d'un écouteur, d'interceptor et d'autres classes connexes, nous n'avons qu'à obtenir le servletContext, puis à utiliser servletContext.getRealPath ("/") pour obtenir l'adresse physique de l'application actuelle sur le serveur.
Si le servletContext ne peut pas être récupéré dans la classe, il y a deux façons de le faire:
1. Utilisez le mécanisme de chargement de la classe de Java pour appeler xxx.class.getClassloader (). GetResource (""); Méthode pour obtenir ClassPath, puis traiter pour obtenir le répertoire WebRoot. Cette méthode ne peut prendre effet que sous webroot / web-inf / classes. Si la classe est emballée dans un fichier JAR, la méthode sera invalide. À l'heure actuelle, la méthode suivante doit être utilisée.
2. L'idée de Spring Framework. Dans Web-inf / web.xml, créez un paramètre de WebApprootKey, spécifiez une valeur (par défaut est webApp.root) comme valeur de clé, puis exécutez la chaîne webApprootKey = getServletContext (). GetRealPath ("/"); par l'auditeur, le filtre ou le servlet. Écrivez ensuite le webapp.root correspondant à WebApprootKey comme clé et valeur dans les propriétés du système Propriétés du système. Ensuite, le chemin physique de Webroot est obtenu via System.getProperty ("webApp.root") dans le programme.
Selon la deuxième idée, nous pouvons l'élargir davantage. Cependant, pour les applications déployées dans un serveur, si ce n'est pas vos besoins, veuillez le lire.
Voici quelques façons d'obtenir le chemin de classe et le chemin absolu vers la classe actuelle. Vous pouvez utiliser certaines de ces méthodes pour obtenir le chemin absolu vers les ressources dont vous avez besoin:
1 et 1
DebitnoSeAction.class.getResource ("")Ce que vous obtenez, c'est le répertoire URI du fichier de classe FileTest.class actuel. Sans vous inclure!
comme:
fichier: / d: / eclipse / springtest / webroot / web-inf / classes /
atcarnet / src / com / evi / modules / atacarnet / action /
2
DebitnoteAction.Class.getResource ("/")Ce que vous obtenez, c'est le chemin URI absolu du chemin de classe actuel.
comme:
fichier: / d: / eclipse / springtest / webroot / web-inf / classes /
3 et 3
Thread.currentThread (). GetContextClassloadher (). GetResource ("")Ce que vous obtenez est aussi le chemin d'uri absolu du chemin de classe actuel
comme:
fichier: / d: / eclipse / springtest / webroot / web-inf / classes /
4
DebitNoteAction.Class.getClassloader (). GetResource ("")ou
Classloader.getSystemResource ("")Ce que vous obtenez est également le chemin d'uri absolu du chemin de classe actuel.
comme:
fichier: / d: / eclipse / springtest / webroot / web-inf / classes /
5. Obtenez le chemin relatif du serveur
System.getProperty ("user.dir")Par exemple: e: / /apache-tomcat-5.5.16/apache-tomcat-5.5.16/bin
Je recommande d'utiliser thread.currentThread (). GetContextClassloader (). GetResource ("") pour obtenir la notation URI du chemin absolu du chemin de classe actuel
6. Obtenez le chemin absolu du projet
Généralement utilisé
request.getRealPath ("/")ou
request.getRealPath ("/ config /")Mais il n'est pas recommandé d'utiliser request.getRealPath ("/"). Vous pouvez essayer la méthode servletContext.getRealPath ("/") pour obtenir le chemin absolu vers le répertoire racine de l'application Web
Il est très facile d'obtenir le fichier SRC, car SRC est le répertoire relatif par défaut. Par exemple, si vous dites que vous souhaitez obtenir le fichier test.java dans le répertoire com sous SRC, vous avez seulement besoin de cela pour être suffisant.
Fichier f = nouveau fichier (com / test.java);
Mais si je veux obtenir des fichiers qui ne sont pas dans le répertoire SRC ou le répertoire WebRoot, j'ai besoin de les obtenir du même niveau de SRC ou de webroot, par exemple, Doc
Ma méthode dure est implémentée comme ceci:
String path = this.getServletContext (). GetRealPath ("/"); Properties p = new Properties (); P.Load (new FileInputStream (nouveau fichier (path.substring (0, (path.lastIndexof ("// webroot") + 1)) + "doc / db.properties"))); System.out.println (p.getProperty ("drivername"));Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!