3 pièce(s) jointe(s)
Problème de thread et socket : Affichage variables
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
Code:
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> |
Connection.java
Code:
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:
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 :
Pièce jointe 529651
Lorsque je re-clique sur soumettre le requête voici le résultat (la réponse ne s'affiche pas)
Pièce jointe 529655
Lorsque je continue de cliquer :
Pièce jointe 529659
Merci d'avance de me lire.
Cordialement
Un novice :)