Bonjour,
J'ai fait une application j2ee avec servlet jsp etc...
Dans cette application, lorsque je clique sur un bouton, je dois faire une connexion telnet, lancer une commande unix, récupérer le résultat... tout ça se faisant en meme temps que d'afficher une autre page jsp.
J'ai donc mis ma classe me permettant de me connecter en telnet en "extends Thread".
Je clique sur mon bouton : tout se passe normalement mais etant donné que ma commande unix est (pour le moment) rapide, je n'arrive pas à savoir si elle s'effectue en meme temps que l'affichage de ma page jsp.
Je vous mets le code de ma classe de connexion telnet :
et le code d'appel de cette classe :
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
113
114 import java.io.*; import org.apache.commons.net.telnet.TelnetClient; public class AccesTelnet extends Thread { private TelnetClient telnet = new TelnetClient(); private InputStream in; private PrintStream out; private char prompt = '>'; private String stdout; private String coderetour; public AccesTelnet( String server, String user, String password ) { try { // Connect to the specified server telnet.connect( server, 23 ); // Get input and output stream references in = telnet.getInputStream(); out = new PrintStream( telnet.getOutputStream() ); // Log the user on readUntil( "login: " ); write( user ); readUntil( "Password: " ); write( password ); // Advance to a prompt readUntil( prompt + "" ); } catch( Exception e ) { e.printStackTrace(); } } public String getCoderetour() { return coderetour; } public void setCoderetour(String coderetour) { this.coderetour = coderetour; } public String getStdout() { return stdout; } public void setStdout(String stdout) { this.stdout = stdout; } public String readUntil( String pattern ) { try { char lastChar = pattern.charAt( pattern.length() - 1 ); StringBuffer sb = new StringBuffer(); boolean found = false; char ch = ( char )in.read(); while( true ) { System.out.print( ch ); sb.append( ch ); if( ch == lastChar ) { if( sb.toString().endsWith( pattern ) ) { return sb.toString(); } } ch = ( char )in.read(); } } catch( Exception e ) { e.printStackTrace(); } return null; } public void write( String value ) { try { out.println( value ); out.flush(); System.out.println( value ); } catch( Exception e ) { e.printStackTrace(); } } public String sendCommand( String command ) { try { write( command ); return readUntil( prompt + "" ); } catch( Exception e ) { e.printStackTrace(); } return null; } public void disconnect() { try { telnet.disconnect(); } catch( Exception e ) { e.printStackTrace(); } } public void run() { try{ stdout = this.sendCommand("ls"); coderetour = this.sendCommand("echo $?"); System.out.println("affichage : "+stdout+" ; code retour = "+coderetour); this.disconnect(); } catch (Exception e){ } } }
Donc j'aimerais savoir si d'après vous ça fonctionne bien comme il faut ou pas (j'avoue que j'ai eu du mal à bien assimiler les threads).
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 public void lanceAudit(Connection connexion, String requete, String env, String projet, String type, String grp, String sgrp, String date) { AccesTelnet at = new AccesTelnet("47.123.56.8","login","mdp"); at.start(); try{ at.join(5); String coderetour = at.getCoderetour(); String stdout = at.getStdout(); System.out.println(stdout); System.out.println(coderetour); } catch (Exception e){ } }
Partager