[Servlet] Pb de connexion au serveur

Pb de connexion au serveur [Servlet] - Java - Programmation

Marsh Posté le 14-04-2004 à 08:49:46    

Bonjour,
 
j'ai créé une applet qui doit communiquer avec un serveur via les servlets
J'ai créé ma classe pour la servlet dont le code est le suivant :
 

Code :
  1. public class ServletMessage extends HttpServlet{
  2.   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
  3.     BufferedReader entree = new BufferedReader(new InputStreamReader(request.getInputStream()));
  4.     String message = entree.readLine();
  5.     String inverse = "";
  6.     for (int i = message.length()-1; i>=0; i--) inverse +=message.charAt(i);
  7.       PrintWriter sortie = new PrintWriter(response.getOutputStream(), true);
  8.       sortie.println(inverse);
  9.   }
  10. }


 
Ensuite, j'ai créé la méthode qui permet de se connecter au serveur et d'envoyer un message. Cette méthode se trouve dans la classe principale de l'applet.
Voici le code de cette méthode :

Code :
  1. class exec implements ActionListener
  2.   {
  3.     public void actionPerformed(ActionEvent e) {
  4.      try {
  5.        URL url = new URL(getDocumentBase(),"ServletMessage" );
  6.        URLConnection connexion = url.openConnection();
  7.        connexion.setDoOutput(true);
  8.        PrintWriter sortie = new  PrintWriter(connexion.getOutputStream(),true);
  9.        sortie.println(t1.getText());
  10.        BufferedReader entree = new BufferedReader(new InputStreamReader(connexion.getInputStream()));
  11.        JOptionPane.showMessageDialog(p1,entree.readLine(),"Réponse",JOptionPane.INFORMATION_MESSAGE);
  12.      }
  13.      catch (IOException erreur) {
  14.        erreur.printStackTrace();
  15.        JOptionPane.showMessageDialog(p1,"Problème pour lancer le traitement","Erreur",JOptionPane.ERROR_MESSAGE);
  16.      }
  17.     }
  18.   }


 
Le problème est que quand je clique sur le bouton qui lance cette méthode, elle va directement dans le catch et donc m'ouvre la popup avec le message d'erreur.
 
J'ai regardé la java doc au niveau de la classe URL mais je ne ccomprend pas tout. Je pense que le pb vient de la connexion via le code :

Code :
  1. URL url = new URL(getDocumentBase(),"ServletMessage" );


"ServletMessage" est le nom de ma classe où je créé le servlet mais je ne suis pas sûr qui faille mettre celà.
 
Est ce que quelqu'un sait d'où vient mon pb ???

Reply

Marsh Posté le 14-04-2004 à 08:49:46   

Reply

Marsh Posté le 14-04-2004 à 09:22:33    


salut,
 
Il faut que tu références l'URL de mapping de ta servlet et pas le nom de la classe
 
dans le web.xml tu as du mettre qqch comme ça :
 
<servlet>
  <servlet-name>nom_de_ma_servlet</servlet-name>
  <servlet-class>package.de.ma.servlet.ServletMessage</servlet-class>
 
...
 
</servlet>
 
puis
 
<servlet-mapping>
  <servlet-name>nom_de_ma_servlet</servlet-name>
  <url-pattern>titi</url-pattern>
</servlet-mapping>
 
Et si ton appli web est déployée sous le contexte /toto, l'url d'accès à ta servlet est : http://[serveur]:[port]/toto/processMessage
 
De ce qui précède, pour que la construction de ton URL fonctionne comme tu l'as écrite il faudrais que l'applet sois incluse dans un HTM situé à une addresse du type http://[serveur]:[port]/toto/tutu.htm

Reply

Marsh Posté le 14-04-2004 à 09:40:21    

Quand tu dis : nom_de_ma_servlet, c'est bien le nom de la classe ?
 
ex :

Code :
  1. <servlet>
  2.   <servlet-name>ServletMessage</servlet-name>
  3.   <servlet-class>projet_applet.ServletMessage</servlet-class>
  4. ...
  5. </servlet>


Sachant que le package que j'aiest projet_applet.
 
Sinon tu me met : <url-pattern>titi</url-pattern>
Il s'agit de l'URL que je lance pour avoir l'applet ?
Pour cà, moi je mets : http://localhost:8080/AppletServlet2/AppletServlet.jsp ?
 
Pour finir, j'ai mis l'applet dans un fichier jsp et non htm, est ce que ca peut poser pb ?
Voilà le code de mon fichier jsp :

Code :
  1. <html>
  2. <head>
  3.  <title>
  4.   Communication Applet - Servlet
  5.  </title>
  6. </head>
  7. <body>
  8. <h2 align="center">Communication Applet - Servlet</h2><hr>
  9. <p align="center">
  10.    <applet
  11.            codebase = "."
  12.            code     = "projet_applet.Applet_Test.class"
  13.            archive  = "Projet_Applet.jar"
  14.            name     = "Applet_Test"
  15.            width    = "1024"
  16.            height   = "768"
  17.            hspace   = "0"
  18.            vspace   = "0"
  19.            align    = "middle">
  20.       </applet>
  21.    </p>
  22.    </body>
  23. </html>


 
 

Reply

Marsh Posté le 15-04-2004 à 10:50:24    

fragsurpatte a écrit a écrit :

Quand tu dis : nom_de_ma_servlet, c'est bien le nom de la classe ?
ex :

Code :
  1. <servlet>
  2.   <servlet-name>ServletMessage</servlet-name>
  3.   <servlet-class>projet_applet.ServletMessage</servlet-class>
  4. ...
  5. </servlet>






 
Le tag servlet-name (obligatoire) sert a donner un nom logique (indépendant du nom+package de ta classe) à ta servlet pour la référencer ailleurs dans le web.xml. ex: les tags servlet-mapping.
Donc tu peux l'appeler comme tu veux et même lui donner le nom de la classe.
 
Exemple de la déclaration de la servlet de stuts:
 

Code :
  1. ...
  2. <servlet-name>action</servlet-name>
  3. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  4. ...


 
et le mapping :
 

Code :
  1. <servlet-mapping>
  2.         <servlet-name>action</servlet-name>
  3.         <url-pattern>*.do</url-pattern>
  4. </servlet-mapping>


 
 

fragsurpatte a écrit a écrit :

 

Code :
  1. Sinon tu me met : <url-pattern>titi</url-pattern>


Il s'agit de l'URL que je lance pour avoir l'applet ?
Pour cà, moi je mets : http://localhost:8080/AppletServlet2/AppletServlet.jsp ?




 
Non, il s'agit de l'url pour accéder à la servlet.
D'après l'url d'appel de la page contenant l'applet, je déduis que le contexte de ton module web est /AppletServlet2. avec le url-pattern ci-dessus, tu accède à la servlet en tapant http://localhost:8080/AppletServlet2/titi
 
Enfin, si tu peux mettre ton applet dans la JSP car elle va être convertie en HTML avant d'être renvoyée au navigateur.


Message édité par pascal34 le 15-04-2004 à 11:01:09
Reply

Sujets relatifs:

Leave a Replay

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