--
--
** oubliez le message ci-dessus
j'ai décidé de me lancer dans les servlets. J'ai installé Tomcat et ça à l'air de tourner. Cependant il doit y avoir une bulle dans ma config:
dans l'applet, j'envoie un fichier vers la servlet
et la le code de la servlet:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 private boolean serializeToServlet(File xml) { boolean pass = false; try { URL url = new URL(getDocumentBase(), "servlet/ServletLisFichier"); URLConnection connexion = url.openConnection(); connexion.setDoOutput(true); ObjectOutputStream oos = new ObjectOutputStream(connexion.getOutputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(connexion.getInputStream())); oos.writeObject(xml); String answer = br.readLine(); pass = "OK".equalsIgnoreCase(answer); } catch (Exception e) { pass = false; e.printStackTrace(); JOptionPane.showMessageDialog(this, e.getClass()+": "+e.getMessage(),"Erreur", JOptionPane.ERROR_MESSAGE); } return pass; }
j'ai aussi crée un répertoire WEB-INF à la racine du site (dans le répertoire 'webapps/ROOT/xxx' de tomcat) qui contien un fichier web.xml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { ObjectInputStream ois = new ObjectInputStream(request.getInputStream()); PrintWriter pw = new PrintWriter(response.getOutputStream()); Object o = null; try { o = ois.readObject(); } catch (ClassNotFoundException e) { e.printStackTrace(); } pw.println("OK"); pw.close(); ois.close(); File xml = (File) o; xml.createNewFile(); }
... et j'ai mis 'ServletLisFichier.class' dans le répertoire 'classes'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?xml version="1.0" encoding="ISO-8859-1"?> <web-app> <servlet> <servlet-name>ServletLisFichier</servlet-name> <servlet-class>ServletLisFichier</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletLisFichier</servlet-name> <url-pattern>/index.jsp</url-pattern> </servlet-mapping> </web-app>
Mais à l'exécution, j'ai une erreur "FileNotFoundException" sur "http://localhost:8080/monsite/servlet/ServletLisFichier". Je pense que cela vient du fichier web.xml mais je ne vois pas le problème, à vrai dire je n'ai pas trouvé de descriptif détaillé sur la structure du fichier web.xml dans une utilisation de tomcat...
- me plz !
C'est peut etre parce que je ne suis pas bien reveiller ...
mais tu ne te serais pas tromper dans l'URL
essaie plutot de faire
http://localhost:8080/monsite/ServletLisFichier
hello wace,
l'url de ma page jsp c'est en fait http://localhost:8080/monsite/index.jsp . Et j'arrive à y accéder (j'ai testé et ça tourne)
Le problème, c'est que dans cette page jsp, je lance une applet qui, en fin de traitement, doit communiquer avec une servlet (elle renvoie un fichier xml en fait -> voir code).
Et donc, au moment de communiquer avec la servlet je me retrouve avec l'erreur "FileNotFoundException" sur "http://localhost:8080/monsite/servlet/ServletLisFichier" (l'erreur est générée par l'applet, au moment où je crée mon BufferedReader avec l'InputStream de la connexion)
Et donc d'après moi cela vient de mon fichier web.xml, qui ne me semble pas complet
Une idée ?
Hello,
je pense aussi que tu as un problème dans le fichier web.xml :
Selon ton post, tu essaies d'accéder à ta servlet en utilisant son nom dans l'URL. Je ne pense pas que ce soit bien, je pense que tu devrais utiliser l'URL définie dans le tag "url-pattern" que je redéfinirait sans l'extension en , par exemple, "/ServletLisFichier".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <?xml version="1.0" encoding="ISO-8859-1"?> <web-app> <servlet> <!-- Défini le nom utilisé pour le mapping en interne --> <servlet-name>ServletLisFichier</servlet-name> <!-- Défini ta classe (si /WEB-INF/classes/ServletListFichier.class, ne devrait pas poser de problèmes) --> <servlet-class>ServletLisFichier</servlet-class> </servlet> <servlet-mapping> <!-- Nom de ta servlet que tu as défini dans le tag "servlet-name"--> <servlet-name>ServletLisFichier</servlet-name> <!-- URL pour accéder à ta servlet -> pas utiliser d'extension (.jsp pas bien!!) --> <url-pattern>/index.jsp</url-pattern> </servlet-mapping> </web-app>
Je ne sais pas si ce qui te pose problème mais bon, essaie...
@+
Est-ce que ce n'est pas ta méthode de conenxion qui ne vas pas? Perso pour communiquer avec des servlets j'utilise httpClients de jakarta qui permet de générer des requêtes http "propres".
Parce que là j'ai l'impression que tu attaques direct une url à laquelle tu essayes d'envoyer un fichier mais sans respecter le protocole de la méthode POST.
Dis moi ce que tu en penses, je vais attaquer le même genre de problème (applet java qui doit ouvrir une page grâce à une url, lire son contenu, envoyer un form en POST et afficher son résultat) alors le max d'infos c'est le mieux.
pour tout vous dire, j'essaie de reproduire l'exemple de cette adresse:
http://emmanuel-remy.developpez.com/...vletSocket.htm
bon j'ai remplacé la chaine de caractère par un objet de type File que je sérialise dans le flux mais ça devrait pas changer beaucoup le schmilblick
je vais essayer de modifier le web.xml comme me l'a indiqué ptitjack. Mais bon comme j'ai pas mal de problème avec Tomcat ici je vais devoir attendre d'être chez moi pour faire un test concluant
si vous voyez le problème ou si vous avez d'autres suggestions n'hésitez pas
Ptitjack a raison, il faut appeler la servlet par l'url par laquelle tu l'as mappée, et pas par son nom.
Et evite d'appeler l'url en .jsp parceque c'est trompeur (mais peut etre veux tu tromper).
Tu peux l'appeler ./bidule.servlet ou ./bidule ça n'a pas d'importance, du moment que tu mets ce nom dans l'appel. Mais ça Pitijack l'a déjà dit.
A plus
Florian
non, pas plus que çaEnvoyé par Flobel
bon là j'ai réussi à résoudre mon pb avec Tomcat au taf'.
J'ai modifié le fichier web.xml comme ceci:
en faisant comme ça, l'url de ma servlet devient quoi ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?xml version="1.0" encoding="ISO-8859-1"?> <web-app> <servlet> <servlet-name>ServletLisFichier</servlet-name> <servlet-class>ServletLisFichier</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletLisFichier</servlet-name> <url-pattern>/ServletLisFichier</url-pattern> </servlet-mapping> </web-app>
./servlet/ServletLisFichier ou alors
./ServletLisFichier
:
bon a vu de nez je dirais la 2ème (parce que la 1ère marche pas lol) mais pourrais-je avoir confirmation ?
PS: c'est un peu la prise de tête ces servlets !!
Beuh non!!!Envoyé par Pill_S
Sinon, ton URL devient :
http://localhost:8080/context/ServletLisFichier avec context qui est défini dans le fichier de configuration de tomcat pour ton context.
Meuh non, c'est pas prise de tête avec Tomcat...
dans le fichier de config de tomcat ? lequel ?Envoyé par ptitjack
et sinon, 'servlet' c'est pas un contexte par défaut ?
Dans le fichier server.xml qui se trouve dans le répertoire conf de ta distribution Tomcat.
Tu as un tag qui se nomme host qui contient les informations relatives à ton serveur tomcat, et dans ce tag, il peut exister un tag context qui va définir un de tes contextes de ton serveur Tomcat.
Par défaut, le répertoire déployé par Tomcat est le répertoire webapps de ta distribution Tomcat, les contextes déployés étant les répertoires ou les fichiers .war contenus dans ce dernier.
Pour accéder à un context déployé par défaut, tu dois prendre comme URL :
http://localhost:8080/monrep/maServlet
avec monrep qui est le répertoire contenu dans webapps qui contient ton appli web et /maServlet qui est ce que tu as défini comme url-mapping pour ta servlet dans ton fichier web.xml
Ouf, j'espère avoir été compréhensible et ne pas avoir dit trop de bêtises...
@+
pour moi c'est clair :-)Envoyé par ptitjack
j'essaie tout ça ce soir, mnt je dois partir pour 2 périodes d'anglais m'enfin c pas grave ça me fera une petite pause
Oki merci à tous pour vos réponses, le problème venait bien de mon fichier web.xml et est maintenant résolu
Maintenant que je comprend mieux Tomcat je vais pouvoir faire de sacrés bons trucs !
tu avais raison ptitjack, c'est pas tant prise de tête que ça, une fois qu'on arrive tourner la première c'est gagné
Mon cher Pill_S, j'ai peut-être un chtit truc pour toi pour mieux comprendre Tomcat, mais peut-être que tu connais déjà ce site :
http://etudiant.univ-mlv.fr/~mroussea/tomcat/tomcat.php
Vachement bien fait...
@+
merci pour le lien
il me sera certainement utile dans pas très longtemps
Bonjour,
J'avais moi aussi un problème de chargement de ma servlet sur le même exemple, et je viens d'en trouver la raison:
Mon dossier sources et mon dossier classes ne se trouvaient pas dans le dossier WEB-INF.
Pourriez vous m'expliquer pourquoi ces dossiers DOIVENT se trouver à cet emplacement, et si c'est paramétrable.
Si tel est le cas, j'imagine que c'est dans le répertoire d'installation de tomcat, mais où ?
Merci.
Partager