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

Servlets/JSP Java Discussion :

Problème de thread et socket : Affichage variables


Sujet :

Servlets/JSP Java

  1. #61
    Modérateur

    Comme dit, Socket implémente "java.lang.AutoCloseable", donc, en fin de bloc, la méthode "close()" est appellée.
    Mais peut-être que l'équipement a besoin de commandes additionnelles... je ne sais pas...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #62
    Futur Membre du Club
    Verification IP
    Salut

    Je continue d'avancer sur mon application web et j'aurais une petite question.

    Voici l'état de mon appli :



    Comme tu peux le voir sur la photo j'ai bien récupéré la réponse de l'automate, elle est traitée pour ensuite afficher une représentation de l'andon(panneau leds).

    Le petit soucis c'est que je voudrais que l'ip saisit soit vérifiée pour éviter d'afficher la représentation des fausses adresses. Je ne trouve pas mon bonheur sur le web..

    Aurais tu une idée ?

  3. #63
    Modérateur

    Lorsque tu instancies la classe Socket en lui passant l'adresse IP et le port, tu n'as qu'à traiter l'exception UnknownHostException à part.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #64
    Futur Membre du Club
    Salut,

    Après pas mal de recherche..

    J'ai essayé pas mal de choses mais je suis toujours au même niveaux..

    Aurais-tu un peu plus d'info a me donner ?

  5. #65
    Futur Membre du Club
    J'ai trouvé quelques choses :

    La servlet avec l'exception "result = null;"

    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
    if (adresse != null)
                {
                    String result = null;
                    try
                    {           
                        result = IPX800V3.test(adresse, 9870);
                    }
                    catch (Exception e)
                    {
                    	result = null;
     
                    }
                    if(result != null) {
                    StringBuilder sb = new StringBuilder();
                    sb.append("automates.set(\"").append(adresse).append("\", ");
                    System.out.print(result);
                    sb.append("\"").append(result).append("\");");
                    sb.append("\r\n\r\n");
                    out.write(sb.toString());
                    }


    et la fonction ajouterAutomate avec le if (automates.get(adresse) != null)

    Code JavaScript :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
    function ajouterAutomate()
    {
        var inputField = document.getElementById("automate");
        var adresse = inputField.value;
     
        if (automates.get(adresse) != null)
        {
            automates.set(adresse, "Initialisation en cours... ");
        }
     
        inputField.value = "";
        displayData();
        setTimeout(getAutomateData, 200, adresse);
     
        afficherTab();
     
    }



    Cela fonctionne correctement pour le moment mais je ne sais pas si c'est la bonne façon

  6. ###raw>post.musername###
    Futur Membre du Club
    Suite a mon petit msg voici le code de l'application :

    com.automate.bdd : BaseDD

    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
    package com.automate.bdd;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;
     
    import com.automate.beans.Utilisateur;
     
    public class BaseDD {
        private Connection connexion;
     
        public List<Utilisateur> recupererUtilisateurs() {
            List<Utilisateur> utilisateurs = new ArrayList<Utilisateur>();
            Statement statement = null;
            ResultSet resultat = null;
     
            loadDatabase();
     
            try {
                statement = connexion.createStatement();
     
                // Exécution de la requête
                resultat = statement.executeQuery("SELECT IP FROM dbo.Table_automates;\r\n" + "");
     
                // Récupération des données
                while (resultat.next()) {
     
                    String IP = resultat.getString("IP");
     
     
                    Utilisateur utilisateur = new Utilisateur();
     
                    utilisateur.setIP(IP);
     
     
                    utilisateurs.add(utilisateur);
                }
            } catch (SQLException e) {
            } finally {
                // Fermeture de la connexion
                try {
                    if (resultat != null)
                        resultat.close();
                    if (statement != null)
                        statement.close();
                    if (connexion != null)
                        connexion.close();
                } catch (SQLException ignore) {
                }
            }
     
            return utilisateurs;
        }
     
        private void loadDatabase() {
            // Chargement du driver
            try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            } catch (ClassNotFoundException e) {
            }
     
            try {
                connexion = DriverManager.getConnection("jdbc:sqlserver://SPF00035\\SQL;databaseName=IPX;user=sa;password=AdminIPX800");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
     
        public void ajouterUtilisateur(Utilisateur utilisateur) {
            loadDatabase();
     
            try {
                PreparedStatement preparedStatement = connexion.prepareStatement("INSERT INTO dbo.Table_automates (IP, Port, Nom, NbLeds) VALUES (?, ?, ?, ? )");
     
                preparedStatement.setString(1, utilisateur.getIP());
                preparedStatement.setString(2, utilisateur.getPort());
                preparedStatement.setString(3, utilisateur.getNom());
                preparedStatement.setString(4, utilisateur.getNbLeds());
     
                preparedStatement.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }


    Un beans :

    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
    package com.automate.beans;
     
    public class Utilisateur {
        private String IP;
        private String Port;
        private String Nom;
        private String NbLeds;
     
     
     
    	public String getIP() {
    		return IP;
    	}
    	public void setIP(String iP) {
    		IP = iP;
    	}
    	public String getPort() {
    		return Port;
    	}
    	public void setPort(String port) {
    		Port = port;
    	}
    	public String getNom() {
    		return Nom;
    	}
    	public void setNom(String nom) {
    		Nom = nom;
    	}
    	public String getNbLeds() {
    		return NbLeds;
    	}
    	public void setNbLeds(String nbLeds) {
    		NbLeds = nbLeds;
    	}
     
     
    }


    Ma servlet GetState :

    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
    package com.automate.state;
    import java.io.IOException;
    import java.io.PrintWriter;
     
    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 com.automate.bdd.BaseDD;
     
    @WebServlet(urlPatterns = "/getState")
    public class GetState extends HttpServlet
    {
        private static final long serialVersionUID = 1;
     
         @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
        	try
            ( PrintWriter out = response.getWriter()<img src="images/smilies/icon_wink.gif" border="0" alt="" title=";)" class="inlineimg" />
            {
                 String adresse = request.getParameter("addr");
     
                System.out.println("Extraction de l'état de l'automate " + adresse + " en cours...");
     
                if (adresse != null)
                {
                    String result = null;
                    try
                    {           
                        result = IPX800V3.test(adresse, 9870);
                    }
                    catch (Exception e)
                    {
                    	result = null;
     
                    }
                    if(result != null) {
                    StringBuilder sb = new StringBuilder();
                    sb.append("automates.set(\"").append(adresse).append("\", ");
                    //System.out.print(result);
                    sb.append("\"").append(result).append("\");");
                    sb.append("\r\n\r\n");
                    out.write(sb.toString());
                    }
     
                   }
                System.out.println("Extraction de l'état de l'automate " + adresse + " terminée.");
     
            }   
        }
    }


    La classe IPX800V3 :

    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
    package com.automate.state;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;
     
    public class IPX800V3
    {
        public static String test(String adresse, int port) throws Exception
        {
            try
            (
                Socket socket = new Socket(adresse, port);
                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                PrintWriter pw = new PrintWriter(socket.getOutputStream());
            ) 
            {
     
     
                socket.setSoTimeout(500);
                pw.println("GetOutputs");
                pw.flush();
                String result;
                result = br.readLine();
                return result;
     
            }
        }
     }


    Et ma page jsp (anciennement index.html) :

    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    <%@ page pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8"/>
    <style type="text/css">
     
    body
    {
    /*background:url("image/andon.png") no-repeat center top;*/
    }
    fieldset
    {
      background-color: #F0F7F6;
      -moz-border-radius:8px;
      -webkit-border-radius:8px;    
      border-radius:8px;    
    }
    legend
    {
      font-weight : bolder;
      font-size:larger;
      margin-bottom:0px;
      margin-left:10px;
    }
    .test
    {
     
    width : 55px;
    height : 320px;
    background-color: #030303;
    border-radius: 10px;
     
    }
     
    .legend1
    {
      width: 645px;
      height: 89px;
      margin-left: 310px;
      float: left;
    }
    .automate
    {
      margin-top:15px;
      margin-bottom:15px;
      margin-right: 0px;          
    }
    #table
    {
    margin-left: 2px;
     
    }
     
    </style> 
     
    <script>
    var automates = new Map();
     
    function ajouterAutomate()
    {
        var inputField = document.getElementById("automate");
        var adresse = inputField.value;
     
        if (automates.get(adresse) != null)
        {
            automates.set(adresse, "Initialisation en cours... ");
        }
     
        inputField.value = "";
        displayData();
        setTimeout(getAutomateData, 200, adresse);
        
        afficherTab();
        
    }
     
    function getAutomateData(adresse)
    {
        var http = new XMLHttpRequest();
        http.open("GET", "/ApplicationWebAutomate/getState?addr=" + adresse, true);
        http.send();
        http.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200)
            {
                var response = this.responseText;
                console.log(response);
                eval(response);                
                displayData();
                afficherTab();
            }
        }    
    }
     
    function displayData()
    {
        var result = "";
        automates.forEach(function(valeur, cle) {
            result += cle + " = " + valeur + "<br/>";
            
        });
        document.getElementById("data").innerHTML = result;
        //afficherTab();
    }
     
    function afficherTab()
    {
            var result = "";
        automates.forEach(function(valeur, cle) {
                     result +=  "<br>" + cle + " = " + "<br>" + "<br>" +  "<div class='test' id='test'>";
            //for (var i = 0; i < 5; i++) {
              if(valeur[4] == 0){
                      result +=  "<br>" + "<table id='table' width='50px' height='35px' background-color:#030303>" + "<tbody>" + "<tr>" + "<td style='border-style:30px; border-color:#D9CFCF; background-color:#D9CFCF; opacity: 1;' >" + "</td>" + "</tr>" + "</tbody>" + "</table>";
            //      result +=  "<tr>" + valeur[i] + "<br/>";
              } 
            else    {
                    result +=  "<br>" + "<table id='table' width='50px' height='35px'  >" + "<tbody>" + "<tr>" + "<td style='border-color:#FEFCFC; background: radial-gradient(#F9F7B8, #FEFCFC); background-color:#FEFCFC; box-shadow: 0px 0px 11px 4px rgba(237, 245, 100, 0.77);-moz-box-shadow: 0px 0px 11px 4px rgba(237, 245, 100, 0.77);-webkit-box-shadow: 0px 0px 11px 4px #FFFFFF;' >"  + "</td>" + "</tr>" + "</tbody>" + "</table>";
            }
              if(valeur[3] == 0){
                    
                    
                    result +=  "<br>" + "<table id='table' width='50px' height='35px'  >" + "<tbody>" + "<tr>" + "<td style='border-color:#82F37A; background-color:#82F37A; opacity: 1;' >"  + "</td>" + "</tr>" + "</tbody>" + "</table>";
            //      result +=  "<tr>" + valeur[i] + "<br/>";
              } 
            else    {
                    result += "<br>" + "<table id='table' width='50px' height='35px'  >" + "<tbody>" + "<tr>" + "<td style='border-color:#0FD501; background: radial-gradient(#FFFFFF, #0FD501); background-color:#0FD501;box-shadow: 0px 0px 11px 4px rgba(15, 213, 1, 0.75);-moz-box-shadow: 0px 0px 11px 4px rgba(15, 213, 1, 0.75);-webkit-box-shadow: 0px 0px 11px 4px rgba(15, 213, 1, 0.75);' >" +  "</td>" + "</tr>" + "</tbody>" + "</table>";
            }
              if(valeur[2] == 0){
                            
                            
                            result += "<br>" + "<table id='table' width='50px' height='35px' >" + "<tbody>" + "<tr>" + "<td style='border-color:#F97878; background-color:#F97878; opacity: 1;' >"  + "</td>" + "</tr>" + "</tbody>" + "</table>";
                    //      result +=  "<tr>" + valeur[i] + "<br/>";
                      } 
                    else    {
                            result += "<br>" + "<table id='table' width='50px' height='35px'  >" + "<tbody>" + "<tr>" + "<td style='border-color:#FE0101; background: radial-gradient(#FFFFFF, #FE0101); background-color:#FE0101; box-shadow=0px 0px 11px 4px rgba(255, 0, 0, 0.88);-moz-box-shadow=0px 0px 11px 4px rgba(255, 0, 0, 0.88);-webkit-box-shadow: 0px 0px 11px 4px rgba(255, 0, 0, 0.88);' >"  + "</td>" + "</tr>" + "</tbody>" + "</table>";
                    }
              if(valeur[1] == 0){
                    
                    
                    result += "<br>" + "<table id='table' width='50px' height='35px'  >" + "<tbody>" + "<tr>" + "<td style='border-color:#FEDE73; background-color:#FEDE73; opacity: 1;' >" +  "</td>" + "</tr>" + "</tbody>" + "</table>";
            //      result +=  "<tr>" + valeur[i] + "<br/>";
              } 
            else    {
                    result += "<br>" + "<table id='table' width='50px' height='35px'  >" + "<tbody>" + "<tr>" + "<td style='border-color:#FA7E05; background: radial-gradient(#FFFFFF, #FA7E05); background-color:#FA7E05;box-shadow: 0px 0px 11px 4px #fe9901;-moz-box-shadow: 0px 0px 11px 4px #fe9901;-webkit-box-shadow: 0px 0px 11px 4px #fe9901;' >"  + "</td>" + "</tr>" + "</tbody>" + "</table>";
            }
              if(valeur[0] == 0){
                            
                            
                            result += "<br>" + "<table id='table' width='50px' height='35px'  >" + "<tbody>" + "<tr>" + "<td style='border-color:#767AF2; background-color:#767AF2; opacity: 1;' >"  + "</td>" + "</tr>" + "</tbody>" + "</table>" + "</div>";
                    //      result +=  "<tr>" + valeur[i] + "<br/>";
                      } 
                    else    {
                            result += "<br>" + "<table id='table' width='50px' height='35px' >" + "<tbody>" + "<tr>" + "<td style=' border-color:#080FF0; background: radial-gradient(#FFFFFF, #080FF0); background-color:#080FF0;box-shadow: 0px 0px 11px 4px #080ff0;-moz-box-shadow: 0px 0px 11px 4px #080ff0;-webkit-box-shadow: 0px 0px 11px 4px #080ff0;' >"  + "</td>" + "</tr>"  + "</tbody>" + "</table>" + "</div>" ;
                    }
                    });
     
        document.getElementById("data").innerHTML = result;
    }
     
     
     
    function reloadData()
    {
        automates.forEach(function(valeur, cle) {
            
            getAutomateData(cle);
            afficherTab();
        });
    }
     
    var intervalId = null;
    function setTimer()
    {
        if (intervalId != null)
        {
            clearInterval(intervalId);
            intervalId = null;
            document.getElementById("cyclique").innerHTML = "Démarrer l'extraction cyclique";
            return;
        }
        intervalId = setInterval("reloadData()", 5000);
        document.getElementById("cyclique").innerHTML = "Stopper l'extraction cyclique";
    }
    </script>
     
    </head>
    	<body>
     
    	  <div class="legend1">
    	 	<form onsubmit="return false">
    	 		<fieldset class="connection">
    	 			<legend>Simoldes Plasticos France</legend>
    		 			<div class="automate">
    					    <label for="automate">Adresse automate</label> <input type="text" id="automate"
        value="<c:out value="${utilisateur.IP}"/>" />
    					    <button onclick="ajouterAutomate()">Ajouter automate</button>
    					    <button onclick="setTimer()" id="cyclique">Démarrer l'extraction cyclique</button>
    					    <!--   <button onclick="afficherTab()">Afficher tableau</button> -->
    					    <div id="data"></div>
    					    <c:forEach var="utilisateur" items="${ utilisateurs }">
                <li><c:out value="${ utilisateur.IP }" /> </li>
            </c:forEach>
    					</div>
     
    		    </fieldset>
    		</form>
     
    	  </div>
     
    	</body>
    </html>


    Petit rappel j'utilise SQL server. J'aimerais récupéré les IP sur la base pour ensuite les traiter. J'arrive a les afficher dans une page jsp avec des balises JSTL mais je n'arrive pas a les traiter.
      0  0

  7. #67
    Modérateur

    Tu veux faire le lien avec ceci ?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
                            <c:forEach var="utilisateur" items="${ utilisateurs }">
                                <li><c:out value="${ utilisateur.IP }" /> </li>
                            </c:forEach>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #68
    Futur Membre du Club
    Citation Envoyé par OButterlin Voir le message
    Tu veux faire le lien avec ceci ?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
                            <c:forEach var="utilisateur" items="${ utilisateurs }">
                                <li><c:out value="${ utilisateur.IP }" /> </li>
                            </c:forEach>
    Non du tout je faisais quelques test pour récupérer une IP et l'afficher. Mais ce n'est pas ce que je souhaite faire.

    Je te réexplique :

    Actuellement l'application récupère l'ip que l'utilisateur rentre dans le INPUT, creation d'un socket avec l'ip et le port, pour ensuite envoyer une requête a mon automates et en fin faire l'affichage suivant la réponse de l'automate.

    J'aimerais maintenant qu'au lieu de devoir rentrer chaque IP (Version final : 26 IPX800), que l'application ce connecte a une BDD qui possède toute les IP de mes automates pour ensuite faire le traitement en arrière plan puis afficher la réponses.


    Voici ma table dans ma BDD :


  9. #69
    Modérateur

    Dans le principe, tu peux t'inspirer de la boucle que tu as fait avec ta variable "utilisateurs".
    Tu peux très bien associer un évènement "onclick" sur la balise <li>
    Comme ceci
    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
     
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8"/>
     
    <script>
    function process(ip, port, name, leds)
    {
        alert('Automate ' + name + ', adresse=' + ip + ':' + port + ', nombre de leds=' + leds);
    }
    </script>
     
    <style>
    li{
        cursor:pointer;
    }
    </style>
     
    </head
     
    <body>
     
    <form onsubmit="return false">
     
        <ul>
            <c:forEach var="utilisateur" items="${ utilisateurs }">
            <li onclick="process('${utilisateur.IP}', '${utilisateur.Port}', '${utilisateur.Nom}', '${utilisateur.NbLeds}')">${utilisateur.Nom}</li>
            </c:forEach>
        </ul>
     
    </form>
     
    </body>
     
    </html>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #70
    Futur Membre du Club
    J'avais essayé de faire quelques choses de similaires mais javais eu du mal pour les fonction js et ajax (pour qui récupère l'ip et le port) et pour la servlet GetState et la classe BaseDD.

    Si je comprend bien ce que tu as fais : tu veux d'abord afficher les IP, Port, Name, NbLeds pour ensuite cliquer sur l'ip voulu et continuer le traitement comme d'habitude ?

  11. #71
    Modérateur

    Dans ce que je t'ai montré oui, mais je ne sais pas ce que tu voudrais faire au juste, il y a différentes façons de voire les choses.
    Là, tu peux sélectionner à partir d'une liste ET ajouter un nouvel automate (je ne sais pas si tu en as le besoin)
    Tu pourrais tout autant charger ET extraire toutes les données des automates de ta DB dès le chargement de la page (fonction associée à <body onload="...">) sans avoir de fonction d'ajout
    Ou un mixte des 2
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #72
    Futur Membre du Club
    Je voudrais tous charger et extraire les données des automates dès le chargement de la page. Ou comme tu dis avoir une liste de tous les noms d'automates. Pour l'affichage il suffirait de cliquer sur le nom des automates qui nous intéresse pour les afficher.

    J'ai donc essayé :

    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
    package com.automate.servlets;
    import java.io.IOException;
    import java.io.PrintWriter;
     
    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 com.automate.beans.Utilisateur;
    import com.automate.bdd.BaseDD;
     
     
    @WebServlet(urlPatterns = "/getState")
    public class GetState extends HttpServlet
    {
        private static final long serialVersionUID = 1;
     
        public GetState() {
            super();
            // TODO Auto-generated constructor stub
        }
     
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            BaseDD tableNoms = new BaseDD();
            request.setAttribute("utilisateurs", tableNoms.recupererUtilisateurs());
            this.getServletContext().getRequestDispatcher("/WEB-INF/bonjour.jsp").forward(request, response);
        }
     
     
         @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
     
     
     
        	try
            ( PrintWriter out = response.getWriter()<img src="images/smilies/icon_wink.gif" border="0" alt="" title=";)" class="inlineimg" />
            {
     
                 String adresse = request.getParameter("utilisateurs");
     
                System.out.println("Extraction de l'état de l'automate " + adresse + " en cours...");
     
                if (adresse != null)
                {
                    String result = null;
                    try
                    {           
                        result = IPX800V3.test(adresse, 9870);
                    }
                    catch (Exception e)
                    {
                    	result = null;
     
                    }
                    if(result != null) {
                    StringBuilder sb = new StringBuilder();
                    sb.append("automates.set(\"").append(adresse).append("\", ");
                    //System.out.print(result);
                    sb.append("\"").append(result).append("\");");
                    sb.append("\r\n\r\n");
                    out.write(sb.toString());
                    }
     
                   }
                System.out.println("Extraction de l'état de l'automate " + adresse + " terminée.");
     
            }
     
     
        }
     
     
    }


    Parait-elle correcte ? Lors du chargement de la page la méthode service s’exécute avec comme adresse null et je reste sur une page blanche. Je voudrais que d'abord cela ce connecte sur la bdd, qu'elle récupère les IP/Port/Nom/NbLeds, qu'elle les affiche sur ma page ensuite il suffirait de cliquer sur le nom de l'automate par exemple pour envoyer la requête a l'automate et faire l'affichage. Je ne souhaite pas ajouter de nouveaux Automates a ma bdd.

  13. #73
    Modérateur

    Avec une servlet, soit tu codes la méthode service qui répond à tout type de requête, soit tu code doGet et/ou doPost pour répondre respectivement à une requête get (url) ou une requête post (formulaire).
    Dans tous les cas, ce n'est pas une super idée de faire une servlet qui fait 2 choses différentes, il serait peut-être judicieux d'en faire 2 :
    1- extraction de la liste à partir de la DB
    2- extraction de l'état d'un automate

    Au niveau de la page, il faudrait récupérer la liste des automates dans la méthode liée à "unload" sous forme de liste d'objets javascript et boucler sur la liste pour appeler l'autre servlet qui extrait l'état.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #74
    Futur Membre du Club
    D'accord, je vais donc faire 2 servlets.

    J'ai modifié aussi les fonctions javascript et la fonction ajax.

    Cela fonctionne pour le moment

  15. #75
    Futur Membre du Club
    Bonjour,

    Je suis en train de continuer de développer tranquillement mon application, j'aurais encore une petite question

    Je m'explique :

    J'ai maintenant une page jsp qui récupère les infos de ma base de données et les affiche ensuite.

    Le traitement des données ce fait après l'affichage. J'aimerais tester la connexion avant l'affichage, car pour le moment la page affiche tous les automates présent sur la table sans savoir si l'automate est fonctionnel. Pour le moment je récupère l'ip par javascript depuis la page d'affichage.

    Je ne sais pas trop sur quoi me diriger.

    Merci d'avance.

    Cordialement

  16. #76
    Modérateur

    Je ne pense pas que ce soit une bonne idée de tester avant l'affichage de la page parce que tu vas introduire des latences qui peuvent être longues en ouvrant le socket vers tes automates.
    Le mieux, je pense, serait de désactiver les automates qui ne répondent pas (ou les effacer) en conservant le principe actuel...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #77
    Futur Membre du Club
    Citation Envoyé par OButterlin Voir le message
    Je ne pense pas que ce soit une bonne idée de tester avant l'affichage de la page parce que tu vas introduire des latences qui peuvent être longues en ouvrant le socket vers tes automates.
    Le mieux, je pense, serait de désactiver les automates qui ne répondent pas (ou les effacer) en conservant le principe actuel...
    Les automates peuvent ne pas répondre car la machine est éteinte, mais il est possible qu'elle soit rallumée après le premier affichage de la page.
    Du coup préférable de juste désactiver les automates qui ne répondent pas. A quel niveau je devrais les désactiver ?

  18. #78
    Modérateur

    De mon point de vue, le mieux est de continuer avec les requêtes ajax.
    A la limite, tu pourrais jouer sur le temps d'attente entre 2 requêtes. Si un automate ne répond pas, il n'est peut-être pas nécessaire d'envoyer une requête toutes les 15 secondes
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java