2009-07-16 7 views
1

J'ai écrit du code pour lire un fichier dans ma classe Java Servlet. (J'utilise Netbeans sur Windows avec le serveur Tomcat). Cependant, ma servlet ne trouve pas le fichier! Après beaucoup de recherches, j'ai trouvé que je devais placer le fichier que je voulais lire dans le dossier Tomcat/bin. C'est très surprenant. Comment puis-je obtenir le chemin vers mon dossier Webapps /? Supposons que mon projet de site Web s'appelle "Web1". Essentiellement ce que je fais, c'est que j'essaie de lire mon fichier .xsl pour convertir mon document DOM en HTML. Au début, j'ai essayé de placer ce fichier .xsl partout (au même niveau que mon index.jsp, dans le même répertoire que mon fichier de classe de servlet, etc ... mais ne fonctionnait pas du tout)Lecture d'un fichier à partir de Java Servlet

Aussi, quand j'ai fini transform(), mon fichier HTML va aussi dans le dossier Tomcat/bin ~!

Répondre

5

Pouvez-vous utiliser javax.servlet.ServletContext.getRealPath (chemin de chaîne)?

Renvoie une chaîne contenant le chemin réel d'un chemin virtuel donné. Par exemple, le chemin "/index.html" renvoie le chemin absolu du fichier sur le système de fichiers du serveur. Il sera servi par une requête pour "http://host/contextPath/index.html", où contextPath est le chemin contextuel de ce ServletContext .. Le chemin réel retourné sera dans un formulaire approprié à l'ordinateur et au système d'exploitation sur lequel le conteneur de servlet est exécuté, y compris les séparateurs de chemin appropriés. Cette méthode renvoie null si le conteneur de servlet ne peut pas traduire le chemin virtuel vers un chemin réel pour une raison quelconque (par exemple, lorsque le contenu est rendu disponible à partir d'une archive .war).

+0

La technique que vous avez proposée fonctionne ... bien que je me demande s'il existe un moyen d'obtenir un chemin relatif. – sivabudh

0

Où consommez-vous ce XSL? Si à partir de votre code Java, placez le fichier dans src/java/resources afin qu'il se retrouve en haut de votre classpath lorsque le fichier WAR est assemblé /WEB-INF/classes/foo.xsl. Ensuite, vous pouvez utiliser Class # getResource ("foo.xsl") ou même mieux si vous utilisez DOM4J ou équivalent il y a des façons de charger le fichier. Maintenant, s'il vous est JavaScript qui effectue la transformation sur le client qui est une autre histoire

0

Quelque chose comme cela pourrait être plus pratique pour vous:

java.net.URL url = ClassLoader.getSystemResource(file_name); 
    try { 
     InputStream is = url.openStream()); 
     //Read the file and do stuff 
    } catch(IOException e) { 
     System.err.println("Error: could not load the file"); 
    } 

Cela vous permettra d'obtenir un InputStream pour un fichier dans le classpath (dans votre cas, quelque chose dans le dossier webapps). Quant à l'écriture des résultats, je ne suis pas sûr.

Questions connexes