Mon programme n’exécute pas la méthode DoPost
Résolu
Nouvelle_Informaticienne
Messages postés
153
Date d'inscription
Statut
Membre
Dernière intervention
-
Nouvelle_Informaticienne Messages postés 153 Date d'inscription Statut Membre Dernière intervention -
Nouvelle_Informaticienne Messages postés 153 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Etant debutante en JEE et pas très à l'aise en Java je trouve des problèmes pour mon application de gestion de stock
j'ai une Servlet (serveur) et une Jfram ( interface ! client ! ) et une base de donnée
j'ai cree les deux methodes doGet et doPost ( j'ai le droit je pense !! ) juste pour voir un peut les trucs mais la methode doPost ne s’exécute pas !! et dans mon application c a dire l'interface le resultat ne s'affiche pas dans la liste que j'ai crée par contre il s'affiche bien dans la console ! je veux afficher le resultat dans l'element : listeResulta
je ne comprend pas trop !!
je vous remercie
servlet
interface :
Quand j'execute Moninterface.java avec comme nom de recherche "produit1 " Ca m'affiche dans la console
Mais dans l'nterface la zone list est toujours vide !
Et quand j'execute Maservlet.java ca m'affiche dans la console :
Et dans le navigateur sous le lien http://localhost:8083/montest/Maservlet
J'espere que quelqu'un puisse voir mon probléme je redis que je suis debutante ducoup je ne vois pas trop l'architecture le comment ca marche tt ca mais j'hesite pas a commenter partt et tester ttt pr savoir ca sert a quoi chaque truc;
Je vous remercie bcp :) et bonne fin de journée
Etant debutante en JEE et pas très à l'aise en Java je trouve des problèmes pour mon application de gestion de stock
j'ai une Servlet (serveur) et une Jfram ( interface ! client ! ) et une base de donnée
j'ai cree les deux methodes doGet et doPost ( j'ai le droit je pense !! ) juste pour voir un peut les trucs mais la methode doPost ne s’exécute pas !! et dans mon application c a dire l'interface le resultat ne s'affiche pas dans la liste que j'ai crée par contre il s'affiche bien dans la console ! je veux afficher le resultat dans l'element : listeResulta
je ne comprend pas trop !!
je vous remercie
servlet
package serveur; //des imports ... import SResultSet.SerializedResultSet; @WebServlet("/Maservlet") public class Maservlet extends HttpServlet { private static final long serialVersionUID = 1L; private Connection BD; private DataSource ds; public Maservlet() { super(); } public void init(ServletConfig config) throws ServletException { try { System.out.println("Récupération du contexte"); Context initCtx = new InitialContext(); System.out.println("lookup de env"); Context envCtx = (Context) initCtx.lookup("java:comp/env"); System.out.println("lookup de base_test"); ds = (DataSource) envCtx.lookup("jdbc/TestDB"); System.out.println("Datasource chargée"); } catch (Exception er) { System.out.println("Erreur de chargement du contexte " + er); } } /* doGet n'est pas obligatoire je pense!!! je ne sais pas ca sert a quoi de mettre les deux methodes ?? */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { BD = ds.getConnection(); java.sql.Statement s = BD.createStatement(); ResultSet r = s.executeQuery("select * from produit"); PrintWriter out = null; response.setContentType("text/html"); out = response.getWriter(); out.println("<html>"); out.println("<head><title> Test servlet </title></head>"); out.println("<body>"); out.println("Contenu de la table produit <BR>"); out.println("<table>"); out.println("<TR>"); out.println("<TD>num</TD>"); out.println("<TD>nom</TD>"); out.println("</TR>"); while (r.next()) { out.println("<TR>"); out.println("<TD>"); out.println(r.getString("numProduit")); out.println("</TD>"); out.println("<TD>"); out.println(r.getString("nomProduit")); out.println("</TD>"); out.println("</TR>"); } out.println("</table>"); out.println("</body>"); out.println("</html>"); r.close(); s.close(); BD.close(); s = null; r = null; } catch (java.sql.SQLException ex) { System.out.println("Erreur d'exécution de la requête SQL \n" + ex); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ /* dans mon cas doPost ne s'execute pas et je ne vois pas de resultat sur la fenetre affiché */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nom; SerializedResultSet sresultat; System.out.println("dopost s'execute ? "); // eh beh noon :( try { // Récupération du flux d'entrée envoyé par l'applet ObjectInputStream entree = new ObjectInputStream(request.getInputStream()); nom = (String) entree.readObject(); // Préparation du flux de sortie ObjectOutputStream sortie = new ObjectOutputStream(response.getOutputStream()); // Execution de la requête sresultat = ExecuterRequete(nom); sresultat.first(); // Envoi du résultat au client sortie.writeObject(sresultat); } catch (Exception ex) { System.out.println("Erreur d'exécution de la requête SQL : " + ex); } } public SerializedResultSet ExecuterRequete(String nom) { try { // Exécution de la requête System.out.println("s'execute ExecuterRequete ? ");// non BD = ds.getConnection(); java.sql.Statement s = BD.createStatement(); ResultSet r = s.executeQuery("select * from produit where nomProduit= '" + nom + "'"); System.out.println("ok???"); // Transformation du ResultSet en sResultSet java.sql.ResultSetMetaData columnNames = r.getMetaData(); SResultSet.SerializedResultSet sResultSet = new SResultSet.SerializedResultSet(); for (int i = 1; i <= columnNames.getColumnCount(); i++) { sResultSet.addColumn(columnNames.getColumnName(i), i); } while (r.next()) { for (int column = 1; column <= columnNames.getColumnCount(); column++) { sResultSet.addColumnData(column, r.getObject(column)); } } r.close(); s.close(); BD.close(); s = null; r = null; return sResultSet; } catch (java.sql.SQLException ex) { System.out.println("Erreur d'exécution de la requête SQL \n" + ex); return null; } } }
interface :
package client; // import ... ; @SuppressWarnings({ "serial", "unused" }) public class Moninterface extends JFrame { private JPanel contentPane; private JTextField montexte; JTextComponent lblRecherche; @SuppressWarnings("rawtypes") JList listeResultat = new JList(); String res; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Moninterface frame = new Moninterface(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public Moninterface() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); GridBagLayout gbl_contentPane = new GridBagLayout(); gbl_contentPane.columnWidths = new int[] { 0, 0, 0 }; gbl_contentPane.rowHeights = new int[] { 0, 0, 0, 0, 0, 0, 0, 0 }; gbl_contentPane.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; gbl_contentPane.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE }; contentPane.setLayout(gbl_contentPane); // rechercher JLabel lblRecherche = new JLabel("Recherche"); GridBagConstraints gbc_lblRecherche = new GridBagConstraints(); gbc_lblRecherche.insets = new Insets(0, 0, 5, 0); gbc_lblRecherche.gridx = 1; gbc_lblRecherche.gridy = 1; contentPane.add(lblRecherche, gbc_lblRecherche); montexte = new JTextField(); GridBagConstraints gbc_montexte = new GridBagConstraints(); gbc_montexte.insets = new Insets(0, 0, 5, 0); gbc_montexte.fill = GridBagConstraints.HORIZONTAL; gbc_montexte.gridx = 1; gbc_montexte.gridy = 3; contentPane.add(montexte, gbc_montexte); montexte.setColumns(10); // boutton JButton btnAfficher = new JButton("Afficher"); btnAfficher.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { Rechercher(); } }); GridBagConstraints gbc_btnAfficher = new GridBagConstraints(); gbc_btnAfficher.insets = new Insets(0, 0, 5, 0); gbc_btnAfficher.gridx = 1; gbc_btnAfficher.gridy = 4; contentPane.add(btnAfficher, gbc_btnAfficher); // liste @SuppressWarnings("rawtypes") JList listeResultat = new JList(); GridBagConstraints gbc_listeResultat = new GridBagConstraints(); gbc_listeResultat.fill = GridBagConstraints.BOTH; gbc_listeResultat.gridx = 1; gbc_listeResultat.gridy = 6; contentPane.add(listeResultat, gbc_listeResultat); } private void Rechercher() { String nom = montexte.getText(); try { // Connexion à la servlet URL url = new URL("http://localhost:8083/montest/Maservlet"); URLConnection connexion = url.openConnection(); connexion.setDoOutput(true); // Récupération du flux de sortie ObjectOutputStream fluxsortie = new ObjectOutputStream(connexion.getOutputStream()); // Envoi du nom à rechercher fluxsortie.writeObject(nom); // Récupération du flux d’entrée ObjectInputStream fluxentree = new ObjectInputStream(connexion.getInputStream()); // Récupération du résultat de la requête SerializedResultSet donnees = (SerializedResultSet) fluxentree.readObject(); // affichage du résultat donnees.first(); @SuppressWarnings("rawtypes") Vector contenu = new Vector(); contenu.clear(); listeResultat.setListData(contenu); for (int i = 0; i < donnees.recordCount(); i++) { res = donnees.getString("nomProduit") + " " + donnees.getString("descriProduit"); contenu.addElement(res); donnees.next(); } // ce resultat est affiché dans la console mais pas dans l'interface listeResultat.setListData(contenu); System.out.println("le nombre des produit est :" + donnees.recordCount()); if (donnees.recordCount() == 0) { res = "pas de produit existant "; contenu.addElement(res); } System.out.println(contenu); } catch (Exception sql) { System.out.println("erreur " + sql); } } }
Quand j'execute Moninterface.java avec comme nom de recherche "produit1 " Ca m'affiche dans la console
le nombre des produit est :3
[produit1 jolie, produit1 base, produit1 qualite]
Mais dans l'nterface la zone list est toujours vide !
Et quand j'execute Maservlet.java ca m'affiche dans la console :
Récupération du contexte
lookup de env
lookup de base_test
Datasource chargée
Et dans le navigateur sous le lien http://localhost:8083/montest/Maservlet
Contenu de la table produit
num nom
1 produit1
2 produit2
3 produit3
4 produit4
5 produit5
6 produit6
7 produit1
8 produit1
J'espere que quelqu'un puisse voir mon probléme je redis que je suis debutante ducoup je ne vois pas trop l'architecture le comment ca marche tt ca mais j'hesite pas a commenter partt et tester ttt pr savoir ca sert a quoi chaque truc;
Je vous remercie bcp :) et bonne fin de journée
A voir également:
- Mon programme n’exécute pas la méthode DoPost
- Programme demarrage windows - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Message programmé iphone - Guide
- Mettre en veille un programme - Guide
2 réponses
Bonjour,
1 - Si ta question concerne le java .... il faut poster ta question dans le forum JAVA !
Je la déplace (encore une fois.... )
2 - Lorsque tu postes du code sur le forum.. tu dois (je te le répète encore une fois....) utiliser les BALISES DE CODE (ET en y précisant le langage pour avoir la couleur!!) !
Voir ici: https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
1 - Si ta question concerne le java .... il faut poster ta question dans le forum JAVA !
Je la déplace (encore une fois.... )
2 - Lorsque tu postes du code sur le forum.. tu dois (je te le répète encore une fois....) utiliser les BALISES DE CODE (ET en y précisant le langage pour avoir la couleur!!) !
Voir ici: https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Bonjour,
Si tu ne sais pas à quoi servent les méthodes que tu surcharges (doGet et doPost), il faut regarder la documentation de la classe mère dont tu hérites (HttpServlet), parce que soit on sait, soit on ne sait pas, mais on ne peut pas deviner.
https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServlet.html
En l'occurence ici, c'est les bases du protocole HTTP, il y a une dizaine de verbes disponibles (dont GET et POST), correspondant à des opérations différentes.
https://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol
Par exemple, si côté interface tu fais un
Si tu ne sais pas à quoi servent les méthodes que tu surcharges (doGet et doPost), il faut regarder la documentation de la classe mère dont tu hérites (HttpServlet), parce que soit on sait, soit on ne sait pas, mais on ne peut pas deviner.
https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServlet.html
En l'occurence ici, c'est les bases du protocole HTTP, il y a une dizaine de verbes disponibles (dont GET et POST), correspondant à des opérations différentes.
https://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol
Par exemple, si côté interface tu fais un
url.openConnection()(ou si tu tapes l'adresse directement dans le navigateur), ce sera un GET qui sera envoyé au serveur, donc c'est la méthode doGet() qui sera appelé et doPost() ne servira à rien.
Il s'affiche dans la console car tu fais System.out.println(contenu); sauf que ce contenu que tu ne le récupères pas pour le mettre dans la fenêtre...
Remarque : depuis Java 2, il est conseillé d'utiliser ArrayList plutôt que Vector, voir la documentation : https://docs.oracle.com/javase/9/docs/api/java/util/Vector.html
Remarque : depuis Java 2, il est conseillé d'utiliser ArrayList plutôt que Vector, voir la documentation : https://docs.oracle.com/javase/9/docs/api/java/util/Vector.html
merci pour votre réponse Jordane ! par contre quand j'ai utilisé la balise <code> ça m'a mis le code en désordre genre pas d'espace et pas de retour a la ligne du coup j'ai préféré le modifier en texte avec <gras> peut être c'est plus visible !! !