IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Applets Java Discussion :

[Débutant][Applet] Communication avec Servlet - IO Exception


Sujet :

Applets Java

  1. #1
    Membre du Club Avatar de gandalf_le_blanc
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 47
    Points
    47
    Par défaut [Débutant][Applet] Communication avec Servlet - IO Exception
    bonjour,

    J'ai créé une applet qui communique avec un serveur Tomcat via Servlet.

    J'ai ma classe principale de mon applet Applet_Test.
    J'ai créé également une classe ServletMessage dont le code assez simple est le suivant :
    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
     
    package projet_applet;
     
    import java.io.*;
    import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
     
    public class ServletMessage extends HttpServlet{
      public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        BufferedReader entree = new BufferedReader(new InputStreamReader(request.getInputStream()));
        String message = entree.readLine();
        String inverse = "";
        for (int i = message.length()-1; i>=0; i--) inverse +=message.charAt(i);
          PrintWriter sortie = new PrintWriter(response.getOutputStream(), true);
          sortie.println(inverse);
      }
    }
    Et dans mon applet, j'ai créé un bouton qui lance la méthode suivante (méthode qui se trouve dans la classe principale Applet_Test).
    Voilà le code de la méthode appelée :
    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
     
    class exec implements ActionListener
      {
        public void actionPerformed(ActionEvent e) {
         try {
           URL url = new URL(getDocumentBase(),"ServletMessage");
           URLConnection connexion = url.openConnection();
           connexion.setDoOutput(true);
           PrintWriter sortie = new  PrintWriter(connexion.getOutputStream(),true);
           sortie.println(t1.getText());
           BufferedReader entree = new BufferedReader(new InputStreamReader(connexion.getInputStream()));
           JOptionPane.showMessageDialog(p1,entree.readLine(),"Réponse",JOptionPane.INFORMATION_MESSAGE);
         }
         catch (IOException erreur) {
             JOptionPane.showMessageDialog(p1,"Problème pour lancer le traitement","Erreur",JOptionPane.ERROR_MESSAGE);
         }
        }
      }
    Le pb est que quand je clique sur mon bouton, j'ai la popup "Problème pour lancer le traitement qui s'affiche et non la popup avec le texte entree.readLine(). En gros, il attrape le catch et non le try.

    Pourquoi ?

  2. #2
    Membre du Club Avatar de gandalf_le_blanc
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 47
    Points
    47
    Par défaut
    Est ce que celà pourrait être un pb de chemin pour le ServletMessage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    URL url = new URL(getDocumentBase(),"ServletMessage");
    ???????

  3. #3
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    Est ce que ta connection est effective, est ce que ton applet est signée, .... ( question déja posé ds un thread précédent) ??

    @+

  4. #4
    Membre du Club Avatar de gandalf_le_blanc
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 47
    Points
    47
    Par défaut
    Mon applet est signée

    Mais le pb ne vient pas de là.
    Tu me demandes si ma connexion est effective mais j'ai laissé un message en disant que le pb devait venir de là !!!!

    Et donc ma question est de savoir si mon code pour URL est bon ou non ???

    Je ne vois pas ce que je peux dire d'autres !!!

  5. #5
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    Fait afficher la stack et colle le résultat.

    erreur.printStackTrace()

  6. #6
    Membre du Club Avatar de gandalf_le_blanc
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 47
    Points
    47
    Par défaut
    Voilà l'erreur qu'il me met !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    java.net.UnknownServiceException: protocol doesn't support output
     
    	at java.net.URLConnection.getOutputStream(URLConnection.java:679)
     
    	at projet_applet.Applet_Test$exec.actionPerformed(Applet_Test.java:329)
    ....
    PS : je n'y pense pas assez à mettre printstack pour voir l'erreur,

  7. #7
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    ok et quelle est le protocol que tu passes ?

    J'ai l'impression que ta construction de l'objet URL n'est pas bonne...

    @+

  8. #8
    Membre du Club Avatar de gandalf_le_blanc
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 47
    Points
    47
    Par défaut
    Je ne m'y connais pas du tout en Servlet. Le code que j'ai fait est tiré d'un tutorial d'ici.

    Donc je ne vois pas du tout ce que tu veux dire par protocole e bien sûr je ne comprend pas l'erreur.


  9. #9
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    La premiere chose a faire c'est d'aller voir comment fonctionne URL:
    http://java.sun.com/j2se/1.4.2/docs/api/java/net/URL.htm
    lil y a 6 constructeur differents

    Ensuite le protocole c la méthode que tu utilises pour envoyer les données, par exemple http, smtp, ftp, .....

    En général une sevlet fonctionne avec HTTP.

    Il faut absolument que tu te formes aux bases de Java.

  10. #10
    Membre du Club Avatar de gandalf_le_blanc
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 47
    Points
    47
    Par défaut
    Ok je suis totalement dans la lune.
    Je ne voyais pas le protocole comme étant ce que c'est. Le protocole que j'utilise est HTTP.

    Ce qui est bizarre alors comme erreur car comme j'ai suivi le tutorial sur les servlets :
    http://emmanuel-remy.developpez.com/...vletSocket.htm

    Il ne devrait pas y avoir ce genre d'erreur !!!!

  11. #11
    Membre du Club Avatar de gandalf_le_blanc
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 47
    Points
    47
    Par défaut
    Ok ca ne répond pas à mon pb ?

    Quelqu'un sait d'où il vient ?

  12. #12
    Membre du Club Avatar de gandalf_le_blanc
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 47
    Points
    47
    Par défaut
    J'ai fait quelques recherches sur et je n'ai pas trouvé grand chose à part des changements à faire sur web.xml !!!

    Mais je ne vosi pas quoi ?

  13. #13
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Quelques questions :
    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
    class exec implements ActionListener 
      { 
        public void actionPerformed(ActionEvent e) { 
         try { 
           URL url = new URL(getDocumentBase(),"ServletMessage");
           URLConnection connexion = url.openConnection(); 
           connexion.setDoOutput(true); 
           PrintWriter sortie = new  PrintWriter(connexion.getOutputStream(),true); 
           sortie.println(t1.getText()); 
           BufferedReader entree = new BufferedReader(new InputStreamReader(connexion.getInputStream())); 
           JOptionPane.showMessageDialog(p1,entree.readLine(),"Réponse",JOptionPane.INFORMATION_MESSAGE); 
         } 
         catch (IOException erreur) { 
             JOptionPane.showMessageDialog(p1,"Problème pour lancer le traitement","Erreur",JOptionPane.ERROR_MESSAGE); 
         } 
        } 
      }
    1- Dans ce code que représente getDocumentBase() ?
    2- En appelant ta servlet via un doGet obtiens tu un résultat ?
    3- Si oui, est-ce le resultat attendu, sinon pourquoi cela ne marche pas (erreur ?))
    4- Essaie d'appeler ton URL comme çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = new URL("http://tonserveur:tonport/tonservletContext/ServletMessage?queryString");

  14. #14
    Membre du Club Avatar de gandalf_le_blanc
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 47
    Points
    47
    Par défaut
    Pour te dire franchement, je ne sais pas à quoi correspond getDocumentBase().

    J'ai regardé un tutorial sur les servlets et il mettait celà donc j'ai pas super cherché à comprendre.
    Ensuite, je suis quand même aller voir sur la java doc et il existe de nombreux paramètres différents à mettre lors de la création de l'URL.

    Voilà ce que je peux te dire.

    Je voudrais bien essayer d'appeler mon URL comme tu me l'as dit mais je voudrais savoir ce que tu appelles : tonservlet -> est ce le nom de mon servlet ? si oui, mon nom de classe est ServletMessage, donc est ce nom que je dois mettre ?
    Ensuite tu mets, tonservletContextn, a quoi ca correspond ?

    Pour finir, je n'ai pas essayé avec un doGet, je vais voir si j'y arrive mais c po gagner !!!!!

  15. #15
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Non tonservletContext , et le nom du contexte dans laquelle se trouve ta servlet.
    En général si tu as un répertoire ROOT dans ton webapps de Tomcat, ton contexte est / sinon c'est en général le nom du répertoire qui est contenu dans webapps.
    Voili, voilou.
    Pour getDocumentBase(), je ne comprends pas d'où cela peut venir.
    Je ne vois pas d'héritage, pas d'implementation de la méthode????
    Où est elle ???

  16. #16
    Membre du Club Avatar de gandalf_le_blanc
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 47
    Points
    47
    Par défaut
    Je comprend pour le contexte.
    Sinon je te fais un rapide rapel de ce que j'ai fait :

    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
     
    public class ServletMessage extends HttpServlet{
      public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        BufferedReader entree = new BufferedReader(new InputStreamReader(request.getInputStream()));
        String message = entree.readLine();
        String inverse = "";
        for (int i = message.length()-1; i>=0; i--) inverse +=message.charAt(i);
          PrintWriter sortie = new PrintWriter(response.getOutputStream(), true);
          sortie.println(inverse);
      }
    }
    Voici le code de la méthode qui est dans la classe principale de mon applet et qui est lancé quand je clique sur un bouton de mon applet
    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
     
     class exec implements ActionListener
      {
        public void actionPerformed(ActionEvent e) {
         try {
           URL url = new URL(getDocumentBase(),"servlet/ServletMessage");
           URLConnection connexion = url.openConnection();
           connexion.setDoOutput(true);
           PrintWriter sortie = new  PrintWriter(connexion.getOutputStream(),true);
           sortie.println(t1.getText());
           BufferedReader entree = new BufferedReader(new InputStreamReader(connexion.getInputStream()));
           JOptionPane.showMessageDialog(p1,entree.readLine(),"Réponse",JOptionPane.INFORMATION_MESSAGE);
         }
         catch (IOException erreur) {
           erreur.printStackTrace();
           JOptionPane.showMessageDialog(p1,"Problème pour lancer le traitement","Erreur",JOptionPane.ERROR_MESSAGE);
         }
        }
      }
    Ce sont les seuls bouts de code qui utilisent la servlet.

    Qu'en penses tu ?
    Me manque t'il quelque chose ?

  17. #17
    Membre du Club Avatar de gandalf_le_blanc
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 47
    Points
    47
    Par défaut
    J'ai fait un test avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    URL url = new URL("http://localhost:8080/AppletServlet2/ServletMessage?queryString");
    Mais ca ne fonctionne pas mieux.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Salut
    getDocumentBase() est une methode de la classe Applet mais dans le code tel que tu nous la donné
    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
     
     class exec implements ActionListener 
      { 
        public void actionPerformed(ActionEvent e) { 
         try { 
           URL url = new URL(getDocumentBase(),"servlet/ServletMessage"); 
           URLConnection connexion = url.openConnection(); 
           connexion.setDoOutput(true); 
           PrintWriter sortie = new  PrintWriter(connexion.getOutputStream(),true); 
           sortie.println(t1.getText()); 
           BufferedReader entree = new BufferedReader(new InputStreamReader(connexion.getInputStream())); 
           JOptionPane.showMessageDialog(p1,entree.readLine(),"Réponse",JOptionPane.INFORMATION_MESSAGE); 
         } 
         catch (IOException erreur) { 
           erreur.printStackTrace(); 
           JOptionPane.showMessageDialog(p1,"Problème pour lancer le traitement","Erreur",JOptionPane.ERROR_MESSAGE); 
         } 
        } 
      }
    Ta classe n'est pas une Applet d'ou la question de zekid mais j'imagine que si le compilateur ne te dit rien c'est que tu as du la réécrire ou alors ta classe est une classe interne de ton applet !!

    Enfin bon a priori le probleme vient du fait que la servlet n'est pas deployé sur tomcat la premiere chose a teste est l'url directement dans ton Browser et voir si ta servlet s'active ou non !!!

  19. #19
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Il faut que tu essaie çà plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = new URL("http://localhost:8080/AppletServlet2/ServletMessage");
    Sinon est ce que ta servlet fonctionne toute seule ?

  20. #20
    Membre du Club Avatar de gandalf_le_blanc
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 47
    Points
    47
    Par défaut
    J'ai essayé avec l'URL que tu m'as donné mais ca ne fonctionne toujours pas.

    Je voudrais bien essayé mais je ne sais pas trop la faire fonctionner seule !!!!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/06/2006, 10h53
  2. [débutant] communication avec un périphérique
    Par Anthony17 dans le forum Delphi
    Réponses: 1
    Dernier message: 18/05/2006, 16h58
  3. [JSP][Servlet][Applet] communication Applet-Servlet-Jsp
    Par williamv dans le forum Applets
    Réponses: 1
    Dernier message: 06/04/2006, 16h32
  4. [servlet][applet] communication pour echanger des infos
    Par jeromejanson dans le forum Applets
    Réponses: 11
    Dernier message: 01/07/2005, 12h14
  5. [débutant][servlet]Problème avec Servlet login
    Par stago dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/05/2005, 00h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo