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 :

[Applet - Servlet] Communication : quoi choisir ?


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 [Applet - Servlet] Communication : quoi choisir ?
    Bonjour,

    je suis en train de faire une applet que je voudrais faire communiquer avec une servlet (serveur Tomcat).
    J'ai essayé une méthode assez simple qui fonctionne partiellement. Je souhaiterais bien sûr qu'elle fonctionne totalement. C'est pour celà que j'ai fait une recherche sur le forum, sur la et aussi sur
    mais je trouve toujours des post différents.

    Voila ce que j'ai fait :
    Du coté Servlet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    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();
        PrintWriter sortie = new PrintWriter(response.getOutputStream(), true);
        sortie.println(message);
        sortie.flush();
        sortie.close();
      }
    }
    Du coté applet (utilisé via un bouton)
    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
    24
     
    /*---------------------------------------------------------*/
      /* Méthode qui permet d'executer et d'utiliser une servlet */
      /*---------------------------------------------------------*/
      class exec implements ActionListener
      {
        public void actionPerformed(ActionEvent e) {
     
         try {
           URL url = new URL("http://localhost:8080/AppletServlet2/ServletMessage");
           URLConnection connexion = url.openConnection();
           connexion.setDoOutput(true);
           PrintWriter sortie = new  PrintWriter(connexion.getOutputStream(),true);
           sortie.println("toto");
           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);
         }
        }
      }
    Le pb avec ces 2 bouts de code est que la chaine de caractère qui est renvoyé par la servlet à l'applet est renvoyé inversé.
    Apparemment, le code est bon. Je voudrais avoir des exemples de code qui fonctionne chez vous pour les essayer chez moi.

    Ps : sur le forum, j'ai vu les posts suivants qui diffère quand même de mon code, qu'en pensez vous ?
    http://www.developpez.net/forums/vie...et+httpservlet
    http://www.developpez.net/forums/vie...et+httpservlet
    En ce qui me concerne, pour réaliser ma servlet, je suis allé voir ce post :
    http://emmanuel-remy.developpez.com/...vletSocket.htm

    Dite moi ce que vous en pensez ?
    Venez nombreux sur ce forum, il est génial !!!

  2. #2
    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
    J'ai realisé une communication entre une applet et une servlet recemment et cela n'a pas été sans mal !!

    En regardant ce que j'ai fais je constate que j'ai precisé le type de données qui sont envoyé dans le flux

    moi je suis passé par des objets serialize (meme si j'ai uniquement transferé des String qui sont apres tout des objets comme les autres !!!)

    et j'ai donc precisé le content type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     con.setRequestProperty("Content-Type", "application/octet-stream");
    la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    				  OutputStream outstream = con.getOutputStream();
    				  ObjectOutputStream oos = new ObjectOutputStream(outstream); 
     
    				  oos.writeObject(data_signe);
    				  oos.flush(); 
    				  oos.close();
    et ma chaine arrive dans le bon ordre !!!!
    UML avec VIOLET

  3. #3
    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 n'arrive pas à comprendre à quoi correspond ton code.
    - con , c'est connexion ?
    - les 3 autres lignes correspondent au code de la servlet ?
    Venez nombreux sur ce forum, il est génial !!!

  4. #4
    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
    Oooops excuse moi le con est bien la connexion et ce code vient de l'applet puisque mon but etait d'envoyé une chaine de caractere de l'applet vers la servlet !!!
    UML avec VIOLET

  5. #5
    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 mais tu as koi comme code au niveau de la servlet ?
    Venez nombreux sur ce forum, il est génial !!!

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 28
    Points
    28
    Par défaut
    Le pb avec ces 2 bouts de code est que la chaine de caractère qui est renvoyé par la servlet à l'applet est renvoyé inversé.
    je ne vois pas ou se trouve ton code d inversion???
    il est present sur le lien que tu recommandes mais pas dans ton code.

    Pour un exple qui marche moi, j envoie des fichiers a un serveur pour qu il le sauvegarde, ca ressemble pas mal a ce que tu as deja.


    code 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
    24
    25
    26
    27
        protected void doPost(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
     
            try {
                InputStream input = request.getInputStream();
     
                File file = new File(fileName);
                FileOutputStream writer = new FileOutputStream(file);
     
                int octet;
                while ( (octet = input.read()) != -1)
                    writer.write(octet);
     
                writer.close();
                PrintWriter sortie = new PrintWriter(response.getOutputStream(),
                        true);
                sortie.println("OK");
     
            } catch (Exception e) {
     
                PrintWriter sortie = new PrintWriter(response.getOutputStream(),
                        true);
                sortie.println("Erreur");
     
            }
     
        }


    et cote client


    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
     try {
                URL url = new URL(urlToConnect);
                URLConnection connexion = url.openConnection();
                connexion.setDoOutput(true);
     
                OutputStream outputStream =  connexion.getOutputStream();
     
                //envoi du fichier 
                outputStream.write(FileTool.readBytes(fileToSave));
                outputStream.flush();
     
                BufferedReader entree = new BufferedReader (new InputStreamReader(connexion.getInputStream())) ;
            	System.out.println("SendFile.send() : " + entree.readLine());//recuperation du message retour
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

    Soyez indulgent , c est un premier jet , les erreurs et receptions de message ne sont pas encore bien gere

    et pout info la metode FileTool.readBytes(fileToSave) transforme le fichier (dont on donne le path) en un tableau de bytes..

    a+

  7. #7
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    			InputStream in = request.getInputStream(); 
    			ObjectInputStream inputFromApplet = new ObjectInputStream(in); 
    			String fonction = (String)inputFromApplet.readObject();
    voila le code de la methode doPost de ma servlet !!
    UML avec VIOLET

  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 vois pas ou se trouve ton code d inversion???
    il est present sur le lien que tu recommandes mais pas dans ton code.
    Je suis d'accord, dans mon code, il n'y a pas d'algo d'inversion mais il est quand même inverser.

    Sinon dans ta méthode, à quoi sert exactement FileTool.readBytes dans le sens où je ne vois pas pourquoi tu le transforme en tableau de bytes ?
    Venez nombreux sur ce forum, il est génial !!!

  9. #9
    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
    Citation Envoyé par FreshVic
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    			InputStream in = request.getInputStream(); 
    			ObjectInputStream inputFromApplet = new ObjectInputStream(in); 
    			String fonction = (String)inputFromApplet.readObject();
    voila le code de la methode doPost de ma servlet !!
    Merci pour ton code.
    Sinon je t'ai envoyé un message privé (tu l'as recu) ?
    Venez nombreux sur ce forum, il est génial !!!

  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
    Sinon gatwps, dans ton code de ta servlet, tu as utilisé un File (fileName).
    A quoi correspond t'il ?
    Venez nombreux sur ce forum, il est génial !!!

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 28
    Points
    28
    Par défaut
    Sinon dans ta méthode, à quoi sert exactement FileTool.readBytes dans le sens où je ne vois pas pourquoi tu le transforme en tableau de bytes ?
    elle lit le fichier et le transforme en bytes[] car pas d autres choix pour ecrire dans le flux que bytes[] ou int (où int est un octet)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public abstract void write(int b)
                        throws IOException
     
     
     
    public void write(byte[] b)
               throws IOException
     
     
     
    public void write(byte[] b,
                      int off,
                      int len)
               throws IOException


    Sinon gatwps, dans ton code de ta servlet, tu as utilisé un File (fileName).
    A quoi correspond t'il ?
    au path du fichier que je cree sur le serveur
    exple
    c:/monfichier.txt

  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
    Ok. Je voudrais essayé ton code pour voir mais FileTool est inconnu !!
    Quelle librairie je dois importer ?
    Venez nombreux sur ce forum, il est génial !!!

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 28
    Points
    28
    Par défaut
    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
    24
    25
    26
    /**
             * Cree un tableau de byte a partir d'un fichier. Renvoie null en cas de probleme.
             */
    	public static byte[] readBytes(String filename) {
    		byte b[];
    		File file = new File(filename);
    		long l = file.length();
    		if (l == 0L) {
    			// fichier n'existe pas
    			b = null;
    		} else {
    			try {
    				FileInputStream fileinputstream = new FileInputStream(file);
    				b = new byte[(int) l];
    				int j;
    				for (int i = 0;(long) i < l; i += j) {
    					j = fileinputstream.read(b, i, (int) l - i);
    				}
    				fileinputstream.close();
    			} catch (IOException ioe) {
     
    				b = null;
    			}
    		}
    		return b;
    	}
    8)

  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
    Bon j'ai essayé ton code et rien ne se produit.
    J'ai surement mis des conneries.

    Récapitulons :
    fileToSave est le fichier que tu utilises et fileName est le fichier que tu créé, c ca ?
    Venez nombreux sur ce forum, il est génial !!!

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 28
    Points
    28
    Par défaut
    c ca

    fileToSave existe avant et apres l execution du code cote client
    fileName existe seulement apres l execution du code cote client

    Le probleme vient peut etre des extensions .
    Moi j envoie que des fichiers html donc je sais que filename doit avoir une extension en .html

    d ailleurs si tu as une idee pour gerer l envoi des extensions dans la meme requete je suis preneur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [info] communication Applet <--> Servlet
    Par Shiryu44 dans le forum Applets
    Réponses: 9
    Dernier message: 16/12/2010, 10h32
  2. Réponses: 0
    Dernier message: 16/04/2009, 11h46
  3. [Tomcat]communication applet-servlet
    Par Pill_S dans le forum Servlets/JSP
    Réponses: 16
    Dernier message: 06/04/2005, 18h05
  4. Réponses: 3
    Dernier message: 07/03/2005, 15h08
  5. [Communication APPLET-SERVLET] string -> fichier
    Par meufeu dans le forum Applets
    Réponses: 10
    Dernier message: 06/08/2004, 14h45

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