[Resolu] [JAVA] Lecture d'un fichier HTML

Bonjour à tous :
Alors voilà j’ai un problème,

J’ai une arborescence comme ceci :[ul]
[li]/test[list][/li][li]/servlet[/li][li]/HTML[list][/li][li]accueil.html[/li][/ul]
[/list]
[/list]Je veux lire le fichier « accueil.html » depuis ma servlet.

Voici la méthode doGet() de ma servlet:

BufferedReader in = new BufferedReader(new FileReader("/test/HTML/accueil.html")); String s; String message = ""; while ( (s = in.readLine()) != null) { message = message + s + "\n"; } in.close(); System.out.println(message);
et l’erreur qu’il me sort:

[code]StandardWrapperValve[Servlet]: « Servlet.service() » pour la servlet Servlet a généré une exception

java.io.FileNotFoundException: \test\HTML\accueil.html (Le chemin d’accès spécifié est introuvable)[/code]

Alors en fait je voulais savoir si quelqu’un pourrait m’éclairer sur ce que je fait de faux ou si il y a mieux comme méthode pour lire une page HTML. Merci :stuck_out_tongue:

Le problème est simple tu indiques un chemin absolu pour ta page html “/test/HTML/accueil.html” et le file reader ne trouve pas le fichier ce qui est normal.

Maintenant je ne sais pas trop quelle est la bonne solution à utiliser, mais grâce à un MaClasse.class.getRessourceAsStream("/test/HTML/accueil.html") ca pourrait marcher mais comme il s’agit de Servlet et non pas d’un programme client classique, je ne sais pas comment l’appliquer. Cherches de ce coté.

Bah oui, c’est ça qu’il faut faire.
En gros :

BufferedReader in = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("/test/HTML/accueil.html"))); // Suite de ton traitement...

Dis nous si ça marche mieux comme ça…

[quote=« ZGoblin, post:2, topic: 27388 »]Le problème est simple tu indiques un chemin absolu pour ta page html « /test/HTML/accueil.html » et le file reader ne trouve pas le fichier ce qui est normal.[/quote]En fait « /test » est mon module Web (déclaré dans le fichier Web.xml).
Si, par exemple, je fais un response.sendRedirect("/test/HTML/accueil.html") depuis ma servlet, ça fonctionne :’(

[quote=« rorotaz, post:3, topic: 27388 »]BufferedReader in = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("/test/HTML/accueil.html"))); // Suite de ton traitement...[/quote]
Alors j’ai essayé avec un InputStreamReader, mais j’ai un nullPointException à la création de celui ci.

InputStreamReader inputStreamReader = [b]new[/b] InputStreamReader([b]this[/b].getClass().getResourceAsStream("test/HTML/accueil.html")); BufferedReader in = [b]new[/b] BufferedReader(inputStreamReader);Le nullPointerException apparait lors de la création de l’InputStreamReader.

PS: Merci de vos réponses :stuck_out_tongue:

En fait il te faut surtout remapper le chemin web en chemin local. Pour cela tu dois avoir une classe quelquepart qui remappe ton “path webserver” et “path absolu filesystem”. Je sais pas ou tu peux la trouver en Java, mais en ASP.Net c’est Server.MapPath("/test/machin/chose/bidule.jpg") et ca retourne un truc comme c:\monsiteweb\test\machin\chose\bidule.jpg. Enfin je suis sur qu’il existe un equivalent en JSP/Java…

Pas trop le temps de tester, mais ça doit se faire par un truc comme ça :

URL url = this.getClass().getResource("/mon/fichier.html"); String cheminSurLeDisque = url.toExternalFrom();

Sinon, la classe URL dispose d’autres méthodes pour trouver ce chemin. C’est à tester donc…

Et un bête chemin relatif genre “…/HTML/index.html”, ça ne fonctionnerait pas ?

Surtout pas, c’est moche, très moche.

Comme dit GloP, il faut trouver l’outil qui convertit le Path du Serveur en Path absolu.

Eureka :stuck_out_tongue: j’ai enfin trouvé ce qu’il me fallait.

Voilà mon BufferedReader : BufferedReader in = new BufferedReader(new FileReader(getServletContext().getRealPath("/HTML/accueil.html")));
En fait ce que je fais c’est la methode java de ce que GloP fait en asp sauf erreur :stuck_out_tongue:
Merci