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 :

Exécution d'une commande sur poste client via une applet


Sujet :

Applets Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 26
    Points : 12
    Points
    12
    Par défaut Exécution d'une commande sur poste client via une applet
    Bonjour,

    J'ai un petit souci avec l'exécution d'une applet.
    Dans mon appli web, j'ai un bouton qui doit lancer un script (Telnet) sur le poste client. Au départ, je me suis orienté vers ActiveX mais cela pose un problème de portabilité. J'ai donc choisi les applets java comme alernative.

    Ca fait pas mal de temps que j'ai décroché du java donc j'ai un peu de mal

    J'ai créé un fichier class qui comporte le code 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
    19
    import java.applet.Applet;
     
    public class ExecuteCommand extends Applet {
     
        public int TelnetConnect() {
            Runtime rt = Runtime.getRuntime();
            try {
             //pour le test
             Process proc = rt.exec("dir c:\\ > c:\\toto.txt");
             return 0;
            }
            catch (java.io.IOException e) {
               return 1;
            }
     
        }
     
     
    }
    Ensuite, j'appelle dans ma page web la méthode TelnetConnect:

    -dans le <head> de ma page, j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script language="javascript">
        function TestApplet(){
            test=document.test.TelnetConnect();
        }
    </script>
    -et dans le <body> j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     <applet codebase="." code="ExecuteCommand" name="test">
    </applet>
     
    <input type="button" name="bt_exec" value="Exécuter le script" onclick="TestApplet()"/>
    D'une part dans ma console javascript, j'ai le message d'erreur "document.test.TelnetConnect is not a function".
    Et d'autre part, je voudrais que mon applet ne soit exécutée que lorsque je clique sur le bouton.

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script type="text/javascript"> 
        function TestApplet(){ 
            test=document.getElementById('test').TelnetConnect(); 
        } 
    </script>
    du coup on rajoute un id a l applet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <applet codebase="." code="ExecuteCommand" name="test" id="test"> 
    </applet> 
     
    <input type="button" name="bt_exec" value="Exécuter le script" onclick="TestApplet()"/>
    pour ne pas exec ton applet, elle sera chargée au demarrage de la page, mais tu peux certainement la masquer en style avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <style>
    #test{
    display: none;
    }</style>
    pour que ca marche va aussi falloir que tu signes ton applet
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Ok merci.
    Je vais regarder du côté des signatures.

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Ca y est, j'ai signé mon applet.
    Du coup, la commande s'exécute bien mais pose un problème.
    En fait rien ne se passe.

    L'objectif est que lorsqu'on clique sur un bouton "Telnet", l'applet se lance et exécute un script sur le poste client.
    Ce script (en Perl) lance un Telnet avec les paramètres passés (login,password et ip de la machine distante).

    Le problème est que l'applet lance bien le script mais il est exécuté en tâche de fond. Donc rien ne se passe à l'écran.

    Voilà le code java:

    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
    import java.applet.Applet;
     
    public class ExecuteCommand extends Applet {
        public String TelnetConnect() {
            Runtime rt = Runtime.getRuntime();
            try {
                  Process proc = rt.exec("cmd /K \"perl -I C:\\perl C:\\perl\\mon_telnet.pl\"");
                proc.waitFor();
                return "Ok";
            }
            catch (java.io.IOException e) {
              return e.getMessage();
            }
            catch (Exception e) {
                  return e.getMessage();
           }
     
        }
    }
    Et pour le code html:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <applet codebase="./" code="ExecuteCommand" archive="SExecuteCommand.jar" name="test" id="test">
    </applet>
     
    <input type="button" name="bt_exec" value="Exécuter le script" onclick="TestApplet()"/>
    Merci de votre aide

  5. #5
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    tu peux recupérer les flux de ton process pour lire et afficher le resultat, regardes dans la class Process, il y a des getInputStream et getOutputStream il me semble
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Merci, j'ia trouvé un lien très intéressant à ce sujet:
    http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html


    En fait j'ai trouvé le problème. Il vient de la commande cmd.exe.

    Par exemple, si j'exécute via mon applet le code 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
    public String TelnetConnect() {
            Runtime rt = Runtime.getRuntime();
            try {
     
                Process proc = rt.exec("notepad.exe");
                return "Ok";
            }
            catch (java.io.IOException e) {
              return e.getMessage();
            }
            catch (Exception e) {
                  return e.getMessage();
           }
    }
    Ca marche parfaitement. J'ai bien notepad qui s'ouvre et qui reste actif.

    Maintenant, si j'exécute:
    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 String TelnetConnect() {
            Runtime rt = Runtime.getRuntime();
            try {
                 Process proc = rt.exec("cmd /K \"mon_script.pl\"");
                 return "Ok";
            }
            catch (java.io.IOException e) {
              return e.getMessage();
            }
            catch (Exception e) {
                  return e.getMessage();
           }
     
    }
    il ne se passe rien. J'ai directement un OK qui s'affiche. Par contre si je regarde dans le gestionnaire des tâches, il y a bien mon cmd.exe qui tourne.

    Je voudrais savoir comment faire pour que lorsque j'exécute la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd /K \"mon_script.pl\"
    , le terminal s'ouvre et reste actif pour que l'utilisateur puisse agir dessus en tapant des commandes.


    :

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Problème résolu en remplaçant l'exécution d'un Telnet par l'exécution d'un putty. Et là du coup, putty garde la main.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/09/2011, 18h04
  2. Déploiement d'une DBE sur poste client
    Par flash11 dans le forum Bases de données
    Réponses: 10
    Dernier message: 25/01/2011, 11h42
  3. Réponses: 2
    Dernier message: 24/03/2009, 18h58
  4. [A-00] recherche d'une critere sur 2 tables via une requête
    Par metallicavid dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 12/02/2009, 10h21
  5. executer une commande sur un serveur depuis une page web
    Par nico33410 dans le forum Général Conception Web
    Réponses: 12
    Dernier message: 21/04/2007, 19h02

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