IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Générer un tableau avec données SQL à partir d'une Servlet


Sujet :

Servlets/JSP Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Générer un tableau avec données SQL à partir d'une Servlet
    Bonjour,

    Je suis actuellement sur un projet de développement d'une application de supervision pour une entreprise, en Java EE (Web Application) à) l'aide de l'IDE Netbeans 6.9 + GlassFish 3. Je suis étudiant, et je suis débutant dans le domaine du Java.

    Pour le moment, j'ai une BDD MySQL hébergée sur une dédibox, et je m'y connecte depuis les services intégré à Netbeans. J'ai crée une servlet qui servira uniquement crée une session pour la connexion/déconnexion à la base MySQL Ce que j'aimerais pouvoir faire désormais, c'est de récupérer les resulset de ma Servlet et de les intégrer dans un tableau dans ma JSP.

    Voici le code source actuel de ma Servlet :
    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
     
    package traitement;
     
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class NewServlet extends HttpServlet
    {
      protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException, ClassNotFoundException, SQLException
      {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try
        {
          out.println("<html>");
          out.println("<head>");
          out.println("<title>Servlet Acceuil</title>");
          out.println("</head>");
          out.println("<body>");
          out.println("<h1>Servlet at" + request.getContextPath() + "</h1>");
          out.println("1 -");
     
          try {
            Class.forName("com.mysql.jdbc.Driver");
            out.println("Driver : OK ! <bR>");
          } catch (ClassNotFoundException e) {
            out.println("Driver : KO ! " + e.getMessage() + " => " + e.getCause() + "<bR>");
          }
     
          String url = "jdbc:mysql://xx.xx.xx.xx:3306/mabase";
          String user = "***";
          String passwd = "***";
          Connection connexion = DriverManager.getConnection(url, user, passwd);
          out.println("Connection à la base : OK !" + "<br>");
     
          Statement stmt = connexion.createStatement();
          ResultSet Rs = stmt.executeQuery("Select * from CVA");
          while (Rs.next()) {
            out.println("<BR>" + Rs.getString("ID_CVA") + " " + Rs.getString("LIBELLE"));
          }
          Rs.close();
          stmt.close();
     
          out.println("</body>");
          out.println("</html>");
        }
        finally {
          out.close();
        }
      }
    Et voici le code actuel de ma JSP :
    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
     
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
         <body>
         <html>
          <h1>- Test d'une JSP pour C.D.E -</h1>
          <FORM>
            <SELECT name="asc1" size="1">
            <OPTION selected>Lundi
              <%
              int i=0;
              for(i=0;i<6;i++)
              out.println("<OPTION>" +i);
              %>
            </OPTION>
            </SELECT>
          </FORM>
            <br>
          <FORM>
            <SELECT name="asc2" size="1">
            <OPTION selected>Mardi
              <%
              int j=0;
              for(j=0;j<6;j++)
              out.println("<OPTION>" +j);
              %>
            </OPTION>
            </SELECT>
          </FORM>
            <br>
            <table width="100%" border="1" cellspacing="5" cellpadding="1" >
                <tr>
                 <td>
                   <div align="center">cell1</div> </td>
                 <td>
                   <div align="center">cell2</div> </td>
                 <td>
                   <div align="center">cell3</div> </td>
                 <td>
                   <div align="center">cell4</div> </td>
                </tr>
            </table>
    </body>
    </html>
    Est-ce qu'il faut que je fasse appel à une classe Java de ma Servlet dans la JSP ?

    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour

    dans ta servlet tu peux construire une liste d'objet qui sont issus des résultats de ta requête SQL
    puis tu mets dans la request HTTP ta liste d'objet
    dans ta jsp tu récupères cette liste avec request.getParameter("maList")

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Bonjour Isma4,

    Est-ce qu'il faut que je fasse quelque chose comme ça dans ma JSP pour pouvoir afficher mes données (provenant de ma Servlet) dans un tableau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <%
    ArrayList<String> NewArrayList = (ArrayList) request.getParameter("maListe");
    %>
    Et est-ce que le code de la Servlet doit ressembler à ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		try {
    			request.setAttribute("maListe");
    			getServletContext().getRequestDispatcher("/Index.jsp").forward(request, response);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    Merci d'avance

  4. #4
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Dans ta servlet tu dois d'abord récupérer/construire ta liste en faisant appel à une classe qui te renvois les informations de ta base de données

    et enfin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    List<?> maListe = new ArrayList<?>(); //tu peux mettre une autre impléntation de l'interface List; et l'objet qui a bien 		
    try {
     
    maListe =XXXX ;////ici tu récupères ta liste	
    request.setAttribute("maListe",maListe);
    			getServletContext().getRequestDispatcher("/Index.jsp").forward(request, response);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Est-ce que ça conviendrais de cette façon ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            ArrayList<Object> maListe = new ArrayList<Object>();
            try {
                maListe = maListe ;
                request.setAttribute("maListe",maListe);
                getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
                processRequest(request, response);
            } catch (SQLException ex) {
                Logger.getLogger(RequeteSQL.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    J'ai un petit doute sur les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    maListe = maListe ;
                request.setAttribute("maListe",maListe);
    Je suis d'accord que le premier élément est le nom de l'attribut, par contre pour le deuxième élément je n'ai pas su quoi mettre comme valeur. Le paramètre maListe convient-il ?

    Concernant l'appel de l'ArrayList dans ma JSP, j'ai aussi quelques doutes lorsque je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <%@page import="java.util.ArrayList"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    <%
    ArrayList<Object> maListe = (ArrayList) request.getParameter("maListe");
    %>
    Toute la ligne ArrayList<Object>... est soulignée en rouge et Netbeans me signal qu'il y'a une erreur de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Inconvertible type. Required:java.util.ArrayList. Found:java.lang.String
    Pourtant dans les en-têtes de la JSP j'ai bien <%@page import="java.util.ArrayList"%>, donc je ne comprend pas trop....

  6. #6
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Citation Envoyé par Soolfly Voir le message
    Est-ce que ça conviendrais de cette façon ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            ArrayList<Object> maListe = new ArrayList<Object>();
            try {
                maListe = maListe ;
                request.setAttribute("maListe",maListe);
                getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
                processRequest(request, response);
            } catch (SQLException ex) {
                Logger.getLogger(RequeteSQL.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    c'est normal,il fallait changer les XXX par un appel à une classe qui te récupères les informations de la base de données

    ce qui suit ne sert à rien :-)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      maListe = maListe ;

    ensuite met plus tôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<Object> maListe = new ArrayList<Object>();

    que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList<Object> maListe = new ArrayList<Object>();
    comme ça tu auras l'implémentation de ton choix. mais ça c'est une autre histoire

    Commence par écrire la classe qui va te récupérer les informations que tu veux dans ta base de données
    Après on verra.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Ah d'accord ! Autant pour moi

    Bon alors si j'ai bien compris il me faudrais une nouvelle classe à ajouter dans ma Servlet (à l'intérieur de protected void processRequest{....} ) avec un constructeur ?
    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
     
    Public class CVA
    {
    private varchar LIBELLE,IP,CHEMIN,REM_VAL,REM2_VAL;
    private int ID_CVA;
    private smallint NBVAL, NBPR;
    private tinyint ACTIF_SCAN;
     
    new CVA (varchar LIBELLE,IP,CHEMIN,REM_VAL,REM2_VAL, int ID_CVA......){
    this.LIBELLE=LIBELLE;
    this.ID_CVA=ID_CVA;
    this.ACTIF_SCAN=ACTIF_SCAN;
    .....
    .....
    }
    }
    Je recréer ensuite une autre classe pour faire appel à la ma ArrayList ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public List interrogation()
    {
    if (Resultat==null) 
    {
    Resultat=new arrayList();
    Par contre où est-ce qu'il faut que je place ma classe interrogation dans la Servlet, parceque (voir premier post) le chargement du driver JDBC et mes requêtes SQL se font dans la classe processRequest à l'aide de String et les requetes sont effectuées grace au Rs=stmt.executeQuery("Select * from CVA"); Du coup je ne suis pas sur qu'en faisant comme cela j'obtienne quelque chose...

    Y'a de l'idée ou alors j'ai vraiment rien compris ? lol

    Encore merci de prendre le temps de m'aider !

  8. #8
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Le principe est que tu fasses une classe séparée dans laquelle tu feras appel à ta base de données.
    ça te permet entre autre de faire rappel à la même classe dans une autre partie de ton application si tu en as besoin => tu n'écriras ton code qu'une fois.
    et puis dans ta servlet tu appelles cette classe qui fait appel à la base de données

    Si tu utilises JDBC sans ORM(hibernate,toplink) cherche sur le net des tutoriels pour le JDBC (site de oracle entre autre) et le design pattern template method.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Est-ce qu'un exemple de classe comme celui-ci conviendrais ?

    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
     
    import java.sql.*;
     
    public class TestJDBC {
     
       private static void affiche(String message) {
          System.out.println(message);
       }
     
       private static void arret(String message) {
          System.err.println(message);
          System.exit(99);
       }
     
       public static void main(java.lang.String[] args) {
          Connection con = null;
          ResultSet résultats = null;
          String requete = "";
     
          // chargement du pilote
          try {
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
          } catch (ClassNotFoundException e) {
             arret("Impossible de charger le pilote jdbc:odbc");
          }
     
          //connection a la base de données
     
          affiche("connexion a la base de données");
          try {
     
             String DBurl = "jdbc:odbc:testDB";
             con = DriverManager.getConnection(DBurl);
          } catch (SQLException e) {
             arret("Connection à la base de données impossible");
          }
    }

  10. #10
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    pas vraiment mais encore une fois regarde sur le site de Oracle ou sur ce site , il y a plein de tutoriels à ce sujet.
    Fais une recherche sur JDBC tutorial ...comme tu débutes, tu trouveras forcement ce qu'il te faut

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Bonjour isma4,

    Bon alors finalement j'ai revu un peut la structure de mon projet et je pense que je vais tout afficher dans une Servlet étant donner que ce n'est pas un projet énorme et qu'il n'y aura que quelques requetes SQL à faire pour des INSERT ou des SELECT vers une base Oracle.

    Ca sera plus simple comme ça, et au niveau du code aussi ! Du coup pour générer le tableau que je voulai faire au début, est-ce que j'aurais toujours besoin de créer une classe "connextion base" ou est-ce je peut simplement stocké le résultat de ma requete SQL pour ensuite afficher ça dans la Servlet ?

    Merci d'avance

  12. #12
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour

    je te conseille de faire une classe à part qui fera tes requêtes en bases
    Ce sera plus lisible et la maintenance sera plus facile pour la suite

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    D'accord, je reposterais une fois que j'aurais codé ma classe

    Merci

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/03/2014, 03h34
  2. [MySQL] Menu déroulant avec données sql
    Par matt38 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/08/2012, 23h40
  3. [SQL] Limiter taille tableau html construit avec données sql
    Par syl2042 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/09/2007, 15h23
  4. [VBA Excel] Tableau avec données du userform et de formules
    Par Viper7 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/06/2006, 13h29
  5. [MySQL] Problème affichage tableau PHP avec données SQL
    Par akalaan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/04/2006, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo