Trouver Fichier dans les Servlet. - Java - Programmation
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...)
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...
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...
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 ?
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
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...)
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
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 ??!
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.
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.
Marsh Posté le 20-07-2006 à 10:03:50
Pourquoi ? exemples ?
Tu as de bons tuto à me proposer ?
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.
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 ?
Marsh Posté le 20-07-2006 à 11:26:04
Vous avez sous la main de bonnes adresses pour des tutos ?
Marsh Posté le 20-07-2006 à 11:40:22
servlet:
Code :
|
maJsp.jsp:
Code :
|
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 ?
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.
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...
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("/" ).
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 ? |
ca dépend à quel point tu veux que ton trux soit propre ...
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. |
comme c'était pour faire des trucs crades (et que je connaissais pas la réponse )...
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 ?
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...)
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 ?
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... |
Marsh Posté le 20-07-2006 à 14:53:12
brasseld a écrit : |
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 : |
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 : |
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
Marsh Posté le 20-07-2006 à 15:07:39
benou a écrit : |
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 ;-)
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... ??
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 : |
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
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 ;-)
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 ;-)