2009-09-10 7 views
3

Je l'extrait de code de code suivant:Pourquoi ServletContext # getRealPath ("/") renvoie un chemin relatif?

String path = servletContext.getRealPath("/"); 

Maintenant, j'ai eu un rapport d'erreur d'un utilisateur en disant que le chemin de retour n'est pas un chemin absolu. Le chemin renvoyé est 'usr/local/...' au lieu de '/usr/local/...'', donc getRealPath semble renvoyer un chemin relatif.

Je peux le voir, car le chemin retourné est enregistré dans un fichier journal.

Mes caractéristiques sont les suivantes:

  • JBoss 4.0.5.GA
  • Redhat EL 4
  • jdk 1.5.0

Voir here pour la javadoc

+0

Etes-vous sûr que votre enregistrement est pas seulement laisser tomber le premier caractère pour une raison quelconque? Pouvez-vous peut-être déboguer dans l'application et vérifier le résultat de cette façon? Si tout cela échoue, vous pouvez vérifier les rapports de bogue sur ce problème sur Sun. – cjstehno

+0

Non, malheureusement pas. 1: c'est une simple instruction log: log.debug ("path:" + path); 2: Plus tard dans l'application, du code essaie de rechercher un fichier sous ce chemin: new File (servletContext.getRealPath ("/) + ...); un appel sur file.exists() renvoie false. Idée cependant, je vais vérifier les rapports de bogues –

+0

Vous mentionnez que vous utilisez JBoss, mais quel conteneur Web? Il était livré avec Jetty par défaut, mais maintenant Tomcat je pense ... vous pouvez également vérifier dans ce problème sur le base de données de bogues et/ou des forums pour le conteneur Web que vous utilisez réellement puisque c'est leur mise en œuvre ... ne pense pas à cela plus tôt – cjstehno

Répondre

1

Quelque chose comme

String path = new File(servletContext.getRealPath("/")).getAbsolutePath(); 

devrait résoudre votre problème. (Il ne répond pas à votre question si ... ;-))

Cordialement, Jan

+0

Je ne pense pas :) Say servletContext.getRealPath ("/") renvoie 'usr/local/... ' nouveau fichier ("usr/local/...") ne fonctionnera que lorsque le répertoire de travail actuel est/(root). –

+0

L'avez-vous essayé? Il retournera un fichier absolu (il fait sur mon mac avec jetty fonctionnant comme un conteneur de servlet) ;-) – Jan

+0

Cela revient à mon commentaire sur la question ... Je me demande si c'est un problème d'implémentation puisque vous venez de tester Jetty et JBoss utilise Tomcat je crois. Les docs et spec disent que cela devrait fonctionner, mais ils doivent l'implémenter correctement :-) – cjstehno

Questions connexes