Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Async Servlet]

    21 janvier 2020 à 16:35:23

    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

    <!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

    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 :

    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 :


    J'ai aussi regardé les async Servlets qui serait la solution a mon soucis mais je ne comprend pas et ne trouve pas de bonne documentation.



    Merci d'avance de me lire.
    Cordialement
    Un novice 

    -
    Edité par RastaRocket1 21 janvier 2020 à 16:42:06

    • Partager sur Facebook
    • Partager sur Twitter

    [Async Servlet]

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown