Bonjour à tous, meilleurs vœux à la communautés.
Actuellement en alternance dans un entreprise pour valider ma deuxième années de BTS, je développe une application web java de supervision pour un site de production.
N'ayant aucune connaissances dans le langage java EE, je m'amuse pour le moment à comprendre le principe d'une application web (servlets, jsp, beans, jstl..).
L'application communique avec un IPX 800 V3 qui est un automate contrôlable. Donc le but de l'appli est de pouvoir afficher les résultat d'une requête M2M ainsi que la réponse de l'ipx.
Donc j'arrive à me connecter à mon "Serveur" qui est l'ipx, j'arrive à lui envoyer une requête et je reçois bien la réponse mais le soucis c'est lorsque je souhaite renvoyer requête la réponse ne s'affiche plus.
J'utilise un socket pour la connexion ainsi que deux thread pour écrire et pour lire. (Je me doute que le soucis provient d'ici, mais je trouve pas après pas mal de recherches.)
Pour l'affichage j'ai utilisé un <c:if test="${ !empty ..... }, comme je vous l'ai dit plus haut lorsque je fais plusieurs requête je n'ai pas l'affichage de la réponse alors que dans la console de Eclipse il apparaît.
Voici mon code :
Page.jsp
Connection.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
20
21
22
23
24 <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Application Web Simoldes Plasticos</title> </head> <body> <h1>Simoldes Plasticos France</h1> <h2>Application web de supervision</h2> <form method="post" action="bonjour"> <p> <label for="commande">Afficher état des entrées : </label> <input type="text" id="commande" name="commande"/> </p> <input type="submit"/> </form> <c:if test="${ !empty form.resultat }"><p><c:out value="${ form.resultat }" /></p></c:if> <c:if test="${ !empty form.resultat2 }"><p><c:out value="${ form.resultat2 }" /></p></c:if> </body> </html>
Code Java : 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
115 package org.cochet.web.forms; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ConnectionForm { private String resultat; private String resultat2; static final int port = 9870; public void connection( HttpServletRequest request) throws IOException { String commande = request.getParameter("commande"); if(commande.equals(commande = "test")) { final Socket clientSocket; final BufferedReader in; final PrintWriter out; final Scanner sc = new Scanner(System.in);//pour lire à partir du clavier try { /* * les informations du serveur ( port et adresse IP ou nom d'hote * 127.0.0.1 est l'adresse local de la machine */ clientSocket = new Socket("***********" ,9870); //flux pour envoyer out = new PrintWriter(clientSocket.getOutputStream()); //flux pour recevoir in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); Thread envoyer = new Thread(new Runnable() { String msg = "GetInputs"; @Override public void run() { while(true){ // msg = sc.nextLine(); out.println(msg); out.flush(); resultat = "commande envoyée : "+msg; } } }); envoyer.start(); Thread recevoir = new Thread(new Runnable() { String msg; @Override public void run() { try { msg = in.readLine(); //while(msg!=null){ resultat2 = "Reponse : "+msg; System.out.println("Serveur : "+msg); msg = in.readLine(); // } System.out.println("Serveur déconnecté"); out.close(); clientSocket.close(); } catch (IOException e) { e.printStackTrace(); } } }); recevoir.start(); } catch (IOException e) { e.printStackTrace(); } }else resultat = "Commande incorrect !"; } public String getResultat() { return resultat; } public void setResultat(String resultat) { this.resultat = resultat; } public String getResultat2() { return resultat2; } public void setResultat2(String resultat2) { this.resultat2 = resultat2; } }
Et la servlet :
Code Java : 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 package org.cochet.web.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.cochet.web.beans.Auteur; import org.cochet.web.forms.ConnectionForm; @WebServlet("/bonjour") public class bonjour extends HttpServlet { private static final long serialVersionUID = 1L; public bonjour() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.getServletContext().getRequestDispatcher("/WEB-INF/bonjour.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ConnectionForm form = new ConnectionForm(); form.connection(request); request.setAttribute("form", form); this.getServletContext().getRequestDispatcher("/WEB-INF/bonjour.jsp").forward(request, response); } }
Voici le résultat attendu :
Lorsque je re-clique sur soumettre le requête voici le résultat (la réponse ne s'affiche pas)
Lorsque je continue de cliquer :
Merci d'avance de me lire.
Cordialement
Un novice
Partager