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 :

[servlet][applet] communication pour echanger des infos


Sujet :

Applets Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 33
    Points : 18
    Points
    18
    Par défaut [servlet][applet] communication pour echanger des infos
    bonjour,
    je voudrais (comme le titre l'indique) echanger des infos entre une applet et une servlet
    j'ai deja trouver des choses sur le net , du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dans l'applet
     
    URL            monUrl = new URL("http://monServeur/maServlet");
    URLConnection monUrlc = monUrl.openConnection();
    InputStream        in = monUrlc.getInputStream();
    DataInputStream   dis = new DataInputStream(in);
    monResultat = dis.read();
     
    Dans la servlet
     
    OutputStream out = rep.getOutputStream();
    DataOutputStream dos = new DataOutputStream(out);
    dos.write("Resultat_Servlet");
    dos.close();
    mais en fait, moi j'ai pas mal de donnees a recuperer depuis ma servlet, et je me demandais, si on ne peut pas utiliser les sessions, ou quelque chose dans le genre

    merc de votre aide

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    en fait, je n'arrive meme pas a envoyer de donnees de mon applet a ma servlet

  3. #3
    Membre averti Avatar de guignol
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Points : 339
    Points
    339
    Par défaut
    http://mindy.cs.bham.ac.uk/AppletServletExample/

    fin du topic ?

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    merci bien, mais j'avais deja trouve ce code la, mais en fait il doit y avoir un truc que je pige pas
    en fait, moi je voudrais qu'a la fin du traitement de mon applet, ca envoye des infos a une servlet, et que donc ma servlet s'execute (et si elle s'execute, elle devrait rediriger vers une jsp, et donc mon navigateur devrait m'afficher ma nouvelle page)

    voici donc le code de mon applet (a la fin du traitement)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    try{
    	URL servletURL = new URL("http://localhost:8080/fotocom/EnvoiMail.do");
    	URLConnection servletConnection = servletURL.openConnection();
    	servletConnection.setDoOutput(true);
    	servletConnection.setUseCaches(false);
     
    	PrintStream out = new PrintStream(servletConnection.getOutputStream());
    	out.println("toto");
    	out.close();
     
    }catch(Exception e){
    	e.printStackTrace();
     
    }
    et le code de ma 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
    package fotocom;
     
    import java.io.BufferedReader;
    import javax.servlet.http.*;
    import org.apache.struts.action.*;
     
    public class EnvoiMailAction extends BaseAction {
    	public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception {
    		HttpSession session = request.getSession(true); 
     
    		try{
    			StringBuffer msgBuf = new StringBuffer();
    		    BufferedReader fromApplet = request.getReader();
    		    String line;
    		    while ((line=fromApplet.readLine())!=null) {
    		      if (msgBuf.length()>0) msgBuf.append('\n');
    		      msgBuf.append(line);
    		    }
    		    fromApplet.close();
     
    		}catch(Exception e){
    			e.printStackTrace();
    		}
     
    		return (findSuccess(mapping));
    	}
    }
    donc la ma servlet ne s'execute pas

    merci de me donner un coup de main

  5. #5
    Membre averti Avatar de guignol
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Points : 339
    Points
    339
    Par défaut
    Pour la redirection, ça ne se fait pas automatiquement. Il faut rajouter un bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getServletContext().getRequestDispatcher("/" + url).forward(request, response);
    avec url comme nom de la page que tu veux appeler.

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    j'utilise Struts, donc "return (findSuccess(mapping)); " fait l'affaire

    mais de toute facon c'est au niveau de mon applet que rien ne se passe apparement

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    A mon humble avis, ta redirection ne fonctionne pas car le client qui interroge la servlet n'est pas le navigateur à proprement parler mais l'applet.
    C'est donc l'applet qui recoit la réponse (et la notion de "redirection" ca ne lui dis pas grand chose).

    J'avais fait qq chose dans ce style (et qui fonctionne) :
    La servlet :
    (la classe Vigenere sert au cryptage)
    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
    28
     protected void doGet(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
     
        // ce qu'envoie l'applet
        String input=request.getParameter("ql");
     
        // par défaut : on suppose que le login échoue
        String redirect="KO?page=login.html";	
     
        HttpSession session=request.getSession();
     
        // la clef unique de cryptage, générée à la demande et gardée en session.
        String k=(String)session.getAttribute("k");
        // on décrypte le texte recu de l'applet
        String decrypte=vg.getPhrase(input,k);
     
        // en dur ici, on test le couple login+mot de passe
        if (decrypte.equals("DF9000000043mpasse")){
            // si OK : on renvoie ce code
            redirect=vg.getEncryptedPhrase("OK?page=accueil.html",k);
        }
     
        PrintWriter out=response.getWriter() ;
        out.print(redirect);
        out.close() ;
     
     
    }
    L'applet (je te passe le côté Swing ;-) ) :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    private void loginMouseClicked(java.awt.event.MouseEvent evt) {
     
    	statut.setForeground(new java.awt.Color(153, 102, 0));
     
            statut.setText("statut : interrogation du serveur ...");
     
    	URL uGreetings;
    	String sGreetings="Bye bye";
     
     
    	// kl = la clef de cryptage
    	String kl="";
    	try{
    		URL kU=new URL(serveur+path+keyServlet+"?logl="+keyLength);
    		kl=getGreeting(kU);
    	}
    	catch (Exception e)
    	{
    		......
    	}
     
    	Vigenere vg=new Vigenere();
    	String aCrypter="DF"+identifiant.getText()+motDePasse.getText()  ;
     
    	// on crypte login/mot de passe
    	String crypte=vg.getEncryptedPhrase(aCrypter,kl);
     
     
    	try{
    		uGreetings = new URL (serveur+path+loginServlet+"?ql="+crypte);
    		String tmpGreetings=getGreeting(uGreetings);
     
    		if (tmpGreetings.equals("erreur"))
    			sGreetings=tmpGreetings;
    		else
    		        sGreetings=vg.getPhrase(tmpGreetings,kl);
     
    		}
    		catch (Exception e)
    		{
    			....
    		}
     
     
     
    		// si login et mot de passe OK : on teste la chaine de retour
    		if (sGreetings.indexOf("OK")!=-1)
    		{
    		    statut.setForeground(new java.awt.Color(0, 90, 0));
    		    statut.setText("statut : login OK. redirection en cours ...");
    		    String redirect=sGreetings.substring(sGreetings.lastIndexOf("=")+1);
    		    String base=this.getDocumentBase().toString()  ;
    		    URL redirectURL;
     
    		    try
    		    {
    		        String URLstart= base.substring(0,base.lastIndexOf("/")+1);
    		        redirectURL=new URL(URLstart+redirect);
    			// LA PARTIE INTERESSANTE : l'applet fait le redirect vers la page précisée dans le "OK?page=accueil.html"
    		        this.getAppletContext().showDocument(redirectURL);
    		    }
    		    catch (Exception e)
    		    {   
    		        ....
    		    }
     
    		}
    		else if (sGreetings.indexOf("erreur")!=-1)
    		{
    		    statut.setForeground(new java.awt.Color(153, 0, 51));
    		    statut.setText("ERREUR : serveur injoignable ...");
    		}
    		else
    		{
    		    statut.setForeground(new java.awt.Color(153, 0, 51));
    		    statut.setText("statut : coordonnées invalides ...");
    		}
     
    }
     
     
    // petite méthode de lecture du contenu d'une URL
    private String getGreeting(URL u) throws Exception{
     
    	String line=new String("");
    	int endTagIndex;
    	BufferedReader reader=null;
     
    	try{
     
    		reader=new BufferedReader(new InputStreamReader(u.openStream()));
    		 line=reader.readLine();
    	}
    	catch (ConnectException ce)
    	{
    	    ce.printStackTrace() ;
    	    line="erreur";
    	}
    	catch (Exception e)
    	{
    		e.printStackTrace(); 
    	}
    	finally 
    	{
    		if (reader!=null) reader.close();
    	}
     
    	return line;
     
     
    }

    Désolé si y'a bcp de blabla pour rien ;-)

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    ce n'est pas "encore" un probleme de redirection que j'ai, vu que le code qui est dans ma servlet n'est meme pas execute

    merci de votre aide

  9. #9
    Membre averti Avatar de guignol
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Points : 339
    Points
    339
    Par défaut
    http://www.developpez.net/forums/viewtopic.php?t=231285

    Ca parle de signature de l'applet, peut-être que ça joue. Sinon essaie de faire un flush de ton DataOutputStream avant de faire un close().

    Regarde aussi du côté de ton servletConnection.setRequestProperty, c'est peut-être ça la solution.

    Mais je me demande si le mapping struts foutrait pas la m...

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    il ni a aucun soucis au niveau de la signature de l'applet

    et ma servlet n'est toujours pas executée

  11. #11
    Membre averti Avatar de guignol
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Points : 339
    Points
    339
    Par défaut
    Rajoute ça dans ton applet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    servletConnection.setRequestMethod("POST");
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    servletConnection.setRequestMethod("GET");
    Au passage, essaie de mettre ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    servletConnection.getResponseCode(); 
    ...
    servletConnection.setDoInput(true);
    Meme si l'applet ne lis rien à partir de la servlet. Sur le lien que je t'avais mis, le gars faisait du applet->servlet uniquement, et après cette manip, ça marchait.

    Regarde également ce lien : http://www.developpez.net/forums/vie...applet+servlet

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    j'ai repris le code qu'il y avait dans le dernier lien que tu m'as donne, dnas la console j'ai bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tentative de connexion post sun.net.www.protocol.http.HttpURLConnection:http://localhost:8080/fotocom/EnvoiMail.do
    on est connecté
    la requete a été envoyé
    j'ai rajoute une methode "doPost" dans ma servlet, mais la servlet n'est toujours pas executer
    je pense que le fait que j'utilsie Struts pose un probleme quand meme

    merci

Discussions similaires

  1. Applet Java pour dessiner des camemberts
    Par lego22 dans le forum Graphisme
    Réponses: 3
    Dernier message: 06/06/2007, 00h18
  2. Réponses: 2
    Dernier message: 26/01/2007, 14h58
  3. [JSP][Servlet][Applet] communication Applet-Servlet-Jsp
    Par williamv dans le forum Applets
    Réponses: 1
    Dernier message: 06/04/2006, 16h32
  4. [débutant] filtrer un fichier pour afficher des infos
    Par Valichou dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 21/04/2004, 11h44
  5. Script pour envoyer des info a mysql
    Par rhum1 dans le forum Linux
    Réponses: 6
    Dernier message: 15/04/2003, 16h19

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