Trouver Fichier dans les Servlet.

Trouver Fichier dans les Servlet. - Java - Programmation

Marsh Posté le 19-07-2006 à 09:32:53    

Bonjour à tous,
Je développe actuellement une application web pour voir comment ça fonctionne. J'ai une hiérarchie de classe telles que celle-ci :
 
-> logs
-> html
-> import
-> style
-> jscript
-> WEB-INF
    -> src
    -> classes
    -> lib
-> META-INF
 
J'ai une classe Commun qui contient uniquement des attributs et méthodes statiques. Cette classe et ses méthodes sont souvent appelées par les Servlets. Cette classe Commun doit pouvoir accéder en lecture aux fichiers des répertoires html, logs et import. Cependant, je ne sais pas comment faire pour établir le chemin vers les fichiers mis à part coder en dur (comme une brute) les chemins vers ces répertoires. Alors quand je passe d'une machine windows à une Linux, il faut que je change le chemin à chaque fois...
 
Avez vous une idée à me proposer ? Est ce que ma hiérarchie de dossier est idéale ? Pour info, j'utilise l'IDE eclipse. Merci d'avance pour vos propositions ;-)

Reply

Marsh Posté le 19-07-2006 à 09:32:53   

Reply

Marsh Posté le 19-07-2006 à 09:42:33    

ton source à pas trop sa place dans web-inf...
 
sinon, tu veux faire quoi sur ces fichiers Ô_o ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 19-07-2006 à 09:45:07    

Je dois le mettre ou mon dossier source ?
Et c'est juste pour lire les fichiers (de type xml par exemple pour les analyser ensuite...)

Reply

Marsh Posté le 19-07-2006 à 09:56:14    

pour lire des xml, mais les dans un répertoire de source, tu y accèderas par Class.getResourceAsStream(). Et mets tes répertoires de sources où tu veux, mais WEB-INF ne me semble pas être un bon endroit. tr-- me contre-dira peut-être...


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 19-07-2006 à 10:07:43    

Mais je n'ai pas que des fichiers XML.. j'ai des fichiers html à lire aussi...

Reply

Marsh Posté le 19-07-2006 à 10:15:12    

pkoi tu veux les lires ? spas un peu le boulot du server d'appli ? :)


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 19-07-2006 à 10:23:05    

Autre question :  
Pour accéder à mon appli en local je vais sur http://localhost/SuiviBudget/Login
 
J'arrive sur une page pour me connecter.
Cependant, en tapant http://localhost/SuiviBudget/Login/../style/, j'arrive à lister le contenu de mon répertoire style. Et idem pour les répertoires html, import, logs...
 
Comment faire pour éviter ce petit probléme ?

Reply

Marsh Posté le 19-07-2006 à 10:59:46    

up

Reply

Marsh Posté le 19-07-2006 à 11:08:43    

configure ton serveur (je crois)


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 19-07-2006 à 11:52:59    

quand tu dis configure ton serveur : c'est configurer le fichier web.xml de l'appli ou les fichiers de conf du serveur en lui-même

Reply

Marsh Posté le 19-07-2006 à 11:52:59   

Reply

Marsh Posté le 19-07-2006 à 13:37:51    

le serveur, pas l'appli. en même temps, pas sûr hein...
 
google ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 19-07-2006 à 17:53:44    

fait un :  
Thread.currentThread().getContextClassLoader().getResourceAsStream(file)
 
avec file = tonNomDeFichier
ensuite ton fichier tu le places dans /WEB-INF/classes
 
(pratique quand tu build avec ANT en plus...)

Reply

Marsh Posté le 19-07-2006 à 17:58:04    

petit detail
Quand tu build avec ANT déplace tes fichiers vers classes
comme ça tu t'embete pas à foutre le bordel dans ton env de dev

Reply

Marsh Posté le 19-07-2006 à 19:54:35    

arg !! mais ça serait pas un tout petit peu dégueux ??!
 
tu veux dupliquer tous les fichiers ???
 
brasseld > qu'est-ce que tu veux faire avec les fichiers HTML ??!


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-07-2006 à 09:44:32    

En fait pour le moment mon appli c'est du (gros) bourrin. Je voudrais bien mettre en place quelque chose de propre mais je ne sais pas trop comment me lancer... Surtout je ne veux pas de Struts car ça m'a l'air trés compliqué pour une application relativement simple et de petite taille. connaissez vous une adresse qui traite des JSP / Servlet, les communications entre Servlet et JSP, les objets qui sont placés en session par les servlets pour les afficher via les JSP. Est-il impropre d'avoir plusieurs Servlets ? Je ne vois pas trop comment utiliser un pattern du type MVC proprement...
Si vous avez des adresses utiles.

Reply

Marsh Posté le 20-07-2006 à 09:51:36    

brasseld a écrit :

connaissez vous une adresse qui traite des JSP / Servlet, les communications entre Servlet et JSP, les objets qui sont placés en session par les servlets pour les afficher via les JSP


euh...
je crois que tu devrais refaire quelques tuto, y a des chose qui ont dû t'échaper je pense.


Message édité par brisssou le 20-07-2006 à 09:54:05

---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-07-2006 à 10:03:50    

Pourquoi ? exemples ?
Tu as de bons tuto à me proposer ?


Message édité par brasseld le 20-07-2006 à 10:04:28
Reply

Marsh Posté le 20-07-2006 à 10:06:34    

ben, ta servlet, son taf, c'est de mettre des données dans la request (ou la session, mais le moins possible, pour pas surcharger...) et ensuite de diriger le tout vers une JSP qui va utiliser les attributs mis en request/session.
En gros, ce que tu demandais, c'est un tuto J2EE.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-07-2006 à 10:12:54    

C'est ce que je voulais faire comprendre... je comprends ce principe. Est ce que c'est crade d'avoir pas mal de Servlets ou il vaut mieux en avoir une seule qui dispatch bien les requetes ?

Reply

Marsh Posté le 20-07-2006 à 11:26:04    

Vous avez sous la main de bonnes adresses pour des tutos ?

Reply

Marsh Posté le 20-07-2006 à 11:40:22    

servlet:

Code :
  1. public class ServletBidon extends HttpServlet {
  2.   public void doGet(HttpServletRequest request,
  3.               HttpServletResponse response)
  4.         throws IOException, ServletException {
  5.     String message = "c'est ça que j'dis !";
  6.     request.setAttribute("message", message);
  7.       getServletContext().getRequestDispatcher("maJsp.jsp" ).forward(request, response);
  8.   }
  9. }


 
maJsp.jsp:

Code :
  1. ...
  2. mon message, c'est : <%=request.getAttribute("message" );%>
  3. ...


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-07-2006 à 11:44:54    

Je comprends bien ce systéme. Mais lorsqu'il y a énormément d'informations ? Par exemple, je récupére une liste d'informations de ma BDD. Je récupére un ResultSet. Je balance directement mon ResultSet à ma JSP où il y a une opération intermédiaire ?

Reply

Marsh Posté le 20-07-2006 à 11:57:47    

non.
 
La c'est un pb de design, regarde le MVC. Mais en gros, ton resultSet, il représente des objet de ton model, donc tu en tires une List d'objects, tu mets la liste dans la request, et tu traites ta liste dans la jsp.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-07-2006 à 12:04:20    

Donc je dois avoir une correspondance entre un objet Java et une table de ma BDD. Comme pour le framework Hibernate. Mais si je veux simplement quelques éléments d'une table avec quelques données d'une autre table, je dois créer un type d'objet pour chaque type de list que je veux créer ?
Je sais pas si j'ai été clair...

Reply

Marsh Posté le 20-07-2006 à 13:27:02    

tu peux gruger avec une map, si tu veux gagner du temps, mais envoyer le resultSet, c'est le mal, enfin je pense.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-07-2006 à 14:07:55    

j'ai lu vite mais visiblement personne n'a donné la répons eà la question initiale.
 
Tu peux récupérer le répertoire d'installation de ta webapp en faisant servletContext.getRealPath("/" ).

Reply

Marsh Posté le 20-07-2006 à 14:09:26    

brasseld a écrit :

Donc je dois avoir une correspondance entre un objet Java et une table de ma BDD. Comme pour le framework Hibernate. Mais si je veux simplement quelques éléments d'une table avec quelques données d'une autre table, je dois créer un type d'objet pour chaque type de list que je veux créer ?
Je sais pas si j'ai été clair...


ca dépend à quel point tu veux que ton trux soit propre ...

Reply

Marsh Posté le 20-07-2006 à 14:18:51    

benou a écrit :

j'ai lu vite mais visiblement personne n'a donné la répons eà la question initiale.
 
Tu peux récupérer le répertoire d'installation de ta webapp en faisant servletContext.getRealPath("/" ).


 
 
comme c'était pour faire des trucs crades (et que je connaissais pas la réponse  :whistle: )...


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-07-2006 à 14:26:16    

Si ça pouvais être maintenable un maximum sans utiliser Struts.
Merci pour la réponse sur le getRealPath.
Et concernant la protection des dossiers import, html et style pour éviter d'y accéder depuis la servlet ?
Un bean est-il uniquement une relation entre un formulaire html et une classe Java ou ça peut-être autre chose ?
 
Ce que j'aimerai bien faire c'est : ma servlet récupére les données formulaires, les mets dans un bean. Le bean contient une méthode de validation pour vérifier ses attributs. Si le bean est ok, la servlet effectue une opération (enregistrement dans ls BDD) sinon elle réaffiche le formulaire avec les données contenues dans le bean. C'est propre ça ?

Reply

Marsh Posté le 20-07-2006 à 14:26:57    

---> C'est pas crade puisque que quand tu buildes, tu ne buildes pas dans ton projet WEB voyons !!! :) :) :)
 
tu crées un war à part que tu déplois dans ton serveur d'appli non ???
yaura aucune duplication de fichier... tes fichiers ne seront pas au meme endroit dans ton war mais tu t'en fiches.... t'es pas dans ton serveur d'appli !
 
En plus c'est plus standard de tout mettre dans /WEB-INF/classes qui est nécessairement dans ton classpath !!... il suffirait que il y ai des problèmes de droits unix ou je ne sais quoi pour que tu sois bloqué !!
 
Enfin bon, j'ai fait ça dans mes appli web et je l'ai vu dans une bonne dizaine d'autres... (applications de production pour des grandes boites.... pas des applis merdiques des tests...)
 

Reply

Marsh Posté le 20-07-2006 à 14:33:27    

chai pas si tu as bien tout lu, mais on lui proposait de mettre les JSP et autres dans le classpath à un moment...


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-07-2006 à 14:34:10    

brasseld > oui, c'est plutôt propre je crois. Mais pkoi tu penses du mal de Struts ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-07-2006 à 14:40:40    

Je ne pense pas de mal de Struts, mais mon projet est déjà bien trop avancé pour mettre en place Struts maintenant (surtout que je n'ai aucune notion sur ce framework pour le moment).
 
A quel couche du MVC fait parti un bean ? Ce sont des objets métiers ?
 
Autre question : j'ai un formulaire html dans lequel lorsque je clique sur un bouton il me rajoute des lignes de champs de saisie. Le bean qui représente ce formulaire, comment doit-il se présenter ? Je crée un bean pour une ligne de mon formulaire et un bean qui est un ensemble (un vecteur) des beans de ligne ?

Reply

Marsh Posté le 20-07-2006 à 14:45:12    

brisssou a écrit :

chai pas si tu as bien tout lu, mais on lui proposait de mettre les JSP et autres dans le classpath à un moment...


 :heink:

Reply

Marsh Posté le 20-07-2006 à 14:53:12    

brasseld a écrit :


Et concernant la protection des dossiers import, html et style pour éviter d'y accéder depuis la servlet ?


si il y a un truc auquel tu veux pouvoir accéder depuis le code d'une servlet, mais que tu veux cacher à l'extérieur (qu'un utilisateur lambda ne puisse pas y accéder en tappant l'url), il faut que tu le mettes, soit dans le rep WEB-INF, soit ailleur sur le disque. Si tu le met dans WEB-INF et que tu as juste besoin de lire le fichier, le plus simple, plutôt que de passer par  un getRealPath, c'ets de faire un servletContext.getResourceAsStream
 
 
 

brasseld a écrit :


Un bean est-il uniquement une relation entre un formulaire html et une classe Java ou ça peut-être autre chose ?


ca peut être plein de trucs. un bean c'est qu'une classe java qui respectent certaines règles ... Mais t'embête pas tro pavec ça et t'oblige pas à en mettre partout si tu n'y est pas contraint.
 
 

brasseld a écrit :


Ce que j'aimerai bien faire c'est : ma servlet récupére les données formulaires, les mets dans un bean. Le bean contient une méthode de validation pour vérifier ses attributs. Si le bean est ok, la servlet effectue une opération (enregistrement dans ls BDD) sinon elle réaffiche le formulaire avec les données contenues dans le bean. C'est propre ça ?


Un bean (en tout cas dans un contexte web) c'est là pour contenir les données. C'est pas là pour les valider. Ca c'est à ton modèle de le faire. Vu que tu utilises pas de framework web, ca peut être ta servlet ou un autre objet, peut importe, comme ça t'arrange.  
Ne te sent pas non plus obligé de mettre les données de ton formulaire dans un bean si ca ne te sert à rien.
 
Si tu veux effectivement repasser des données depuis ta servlet à la JSP pour réafficher le formulaire, là ca a un sens de passer ces données dans un bean (que tu mettras en attribut de la request).
L'avantage du bean, c'est aussi de pouvoir utiliser des librairies comme la JSTL pour faire une JSP toute propre

Reply

Marsh Posté le 20-07-2006 à 15:07:39    

benou a écrit :


Un bean (en tout cas dans un contexte web) c'est là pour contenir les données. C'est pas là pour les valider. Ca c'est à ton modèle de le faire. Vu que tu utilises pas de framework web, ca peut être ta servlet ou un autre objet, peut importe, comme ça t'arrange.  
Ne te sent pas non plus obligé de mettre les données de ton formulaire dans un bean si ca ne te sert à rien.
 
Si tu veux effectivement repasser des données depuis ta servlet à la JSP pour réafficher le formulaire, là ca a un sens de passer ces données dans un bean (que tu mettras en attribut de la request).
L'avantage du bean, c'est aussi de pouvoir utiliser des librairies comme la JSTL pour faire une JSP toute propre


 
Ok, pour les dossiers et fichiers à protéger...
Quand vous parlez du modéle, c'est un ensemble d'objet qui représente soit des objets provenant de BDD, soit des beans ?
 
En fait, pour commencer, mon chef m'a dit qu'il ne voulait pas d'un truc bien compliqué. Alors il voulait que je fasse des requetes sur une BDD MySQL puis une fois que j'ai récupéré les résultats, je lisais un fichier html qui contenait des tag que je remplaçais ensuite par mes résultats issus de la BDD. Bref moi ça me saoule de faire ça et je voudrais faire quelque chose de plus propre tout de même. Parceque là, il faut faire des lectures de fichiers, faire des remplacements de chaîne via les pattern puis les afficher.... c'est vraiment du bourrin quoi. Donc j'aimerai m'orienter sur quelque chose de propre et de maintenable.
 
Si j'utilise des beans avec des pages jsp toute simple pour le moment, j'aurai des difficultés par la suite à utiliser les librairies JSTL ? Car je serai peut-être court en temps...
 
En tout cas merci pour vos conseils ;-)

Reply

Marsh Posté le 20-07-2006 à 15:13:47    

Décidemment, j'ai beaucoup de questions.
Je veux créer un objet bean par rapport à un formulaire. Ma jsp envoie la requete à ma servlet. Est ce que c'est la servlet qui s'occupe de charger les données de la request dans le bean ou est-ce qu'il peut y avoir dans le bean une methode du style loadData(HttpServletRequest req) throws... ??

Reply

Marsh Posté le 20-07-2006 à 15:18:12    


 
une réponse qu'il a eu quand il disait vouloir lire les fichiers HTML depuis le code java :
 

twingocerise a écrit :

fait un :  
Thread.currentThread().getContextClassLoader().getResourceAsStream(file)
 
avec file = tonNomDeFichier
ensuite ton fichier tu le places dans /WEB-INF/classes
 
(pratique quand tu build avec ANT en plus...)



---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-07-2006 à 15:20:28    

n'écoute pas ton chef, ce que tu veux faire, c'est afficher en HTML des info sorties de ta BDD. Donc, tu vas pas t'amuser à parser un fichier HTML pour le remplir, c'set crétin, tu vas simplement utiliser une JSP...
 
pour ta dernière question, la servlet est dans son rôle si elle rempli ton bean. je crois :whistle:


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 20-07-2006 à 15:21:15    

Ce petit probléme a été réglé, ne vous prenez pas la tête pour si peu ;-)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed