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 :

requête sql dans une page jsp


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 32
    Points
    32
    Par défaut requête sql dans une page jsp
    Bonjour.

    Je dispose d'une page jsp, dans laquelle j'ai un lien très simple par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="URL">Le lien</a>
    Comment faire pour qu'en cliquant sur ce lien, cela lance une requête sql simple (select * from table) et affiche le résultat de cette requête ?

  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 ton lien tu appelles une URL vers une Servlet que tu auras référencé dans ton web.xml et cette servlet fera appel à un objet métier qui se chargera d'appeler un DAO pour aller chercher l'information dans ton modèle (ta base de données)
    Une fois le résultat renvoyé à ta servlet tu pourra utiliser un helper pour le mettre en forme et le mettre dans la request et dans ta JSP tu le récupère à partir de la requête

    Si tu as des question n'hésite pas

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 32
    Points
    32
    Par défaut
    Merci pour votre réponse.

    Supposons que je mette le lien suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href= "/select.do" >Le lien</a>
    Dans mon fichier web.xml je mets alors quelque chose ressemblant à 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
    <web-app>
    	<servlet>
    		<servlet-name>action</servlet-name>
    		<servlet-class>packageStruts.ActionServlet</servlet-class>
    		<init-param>
    			<param-name>config</param-name>
    			<param-value>/WEB-INF/struts-config.xml</param-value>
    		</init-param>
    	</servlet>
    </web-app>
    <servlet-mapping>
    		<servlet-name>action</servlet-name>
    		<url-pattern>*.do</url-pattern>
    </servlet-mapping>
    Donc à partir d’ici, mon lien « /select.do » appelle la servlet "ActionServelt" de Struts (le contrôleur). Cette servlet de contrôle va dispatcher la requête vers le sous-contrôleur adéquat (une servlet Action) que je décris dans mon fichier struts-config.xml ressemblant à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <struts-config>
    <action type="package.action.Select" path="/select">
    <forward name="success" path="/WEB-INF/jsp/resultatSql.jsp"/>
    </action>
    </struts-config>
    Dans la servlet Action "Select.java", j’ai donc une méthode executeAction() qui retourne un ActionForward et qui permettra ainsi l’affichage de ma jsp.

    Mais comment faire, pour que cette servlet Action "Select.java" appelle un objet métier ?
    Et comment faire pour appeler un DAO ?

  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
    Il y a plusieurs possibilités : soit vous utiliser un ORM (hibernate,toplink etc) et je pense qu'il y a un outil avec eclipse qui permet de générer les DAO et les objets qui vont avec...
    Sinon vous faites du JDBC

    Supposons que vous voulez récupérer les données d'une table Employe
    Vous pouvez créer une classe EmployeBusiness qui sera un singleton et qui permet d'interroger un DAO EmployeDAO. Dans le DAO on faite une requête soit par l'ORM, soit en JDBC

    A partir de la servlet on fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    form.setProperty("listEmployes",EmployeBusiness.getInstance().getEmployes());//ou quelque chose comme ça 
    }
    dans la classe business :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    static List<Employe> getEmployes(){
    EmployeDAO.findAllEmployes(); //appel au DAO 
    //traitements du resultats et renvois à la classe business
     
    }
    c'est du code écrit à la va vite mais le principe est le même
    Si c'est une petite application ou si c'est pour apprendre, vous pouvez faire dans un premier temps du JDBC avant de s'attaquer à autre chose

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 32
    Points
    32
    Par défaut
    J'opte pour JDBC du framework Spring.

    Pour chaque table de la base de données, faut-il créer une classe Business associée ? (Table employe -> Classe EmployeBO, Table livres -> Classe LivresBO, etc...)

    Comment écrit-on un DAO avec JDBC ?

    Merci.

  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
    Puisque tu utilises Spring, je te conseille fortement de lire la doc sur le site de springsource pour bien comprendre les transactions etc ...
    Je te renvois aussi vers google. tu trouveras de nombreux articles car ce n'est pas avec un simple post qu'on peut répondre à ta question.

    EDIT pour ta question sur les objets business : tu ne crées pas des objets businees en fonction d'une table mais de la fonctionnalité que tu souhaites implémenter et qui peut faire appels à différents DAO

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 32
    Points
    32
    Par défaut
    Merci pour votre réponse.

    Donc un Business Object gère une fonctionnalité et peut faire appel à plusieurs DAO.
    Alors il faut un DAO pour chaque table de la base de données ?

  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
    Oui pour chaque table tu fais un DAO

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 32
    Points
    32
    Par défaut
    Ok.

    C'est dans une méthode find() de la classe DAO que je définie mes requêtes sql (en rapport avec une table de la base de données) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = this.connect.createStatement().executeQuery("select * from table");
    Et dans la classe Business j'appelle le DAO désiré avec ClasseDAO.find().

    Mais imaginons que notre base de données possède des centaines de tables. On ne va pas écrire des centaines de DAO à la main ?

  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
    En général tu as des outils qui te les génères
    dans ton cas tu peux regarder du côté de roo: http://www.springsource.org/roo

  11. #11
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 32
    Points
    32
    Par défaut
    D'après la documentation, il n'y a malheureusement pas de DAO dans Spring roo.

    Où puis-je trouver un bon tutorial pour débutant (qui part de zéro) sur Spring ?

    Merci.

  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
    Sur le site de spring
    tu as le user guide au format pdf.
    peut être sur developpez.com je n'ai pas cherché

  13. #13
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 32
    Points
    32
    Par défaut
    La requête sql (select * from table) est dans une méthode find() d'un DAO.
    Cette méthode find() retourne le résultat de la requête sql.
    Puis, dans un objet métier la méthode find() du DAO est appelée pour récupérer le résultat de la requête sql.
    Ensuite dans la servlet Action cet objet métier est appelé. Donc la servlet Action peut récupérer le résultat de la requête sql.

    Mais après comment faire :
    Comment la servlet Action envoie le résultat de la requête sql à la page jsp ?
    Comment la page jsp récupère le résultat de la requête sql ?

  14. #14
    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 fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.setAttribute("monObjetAEnvoye",monObjetAEnvoye);
    et dans ta servlet tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getAttribute("monObjetAEnvoye");

  15. #15
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 32
    Points
    32
    Par défaut
    En faisant request.getAttribute("monObjetAEnvoye"); je vais récupérer dans la jsp l'objet entier monObjetAEnvoye ?
    ou vais-je récupérer juste le résultat de la requête sql de l'objet monObjetAEnvoye ?

  16. #16
    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 Davesique Voir le message
    En faisant request.getAttribute("monObjetAEnvoye"); je vais récupérer dans la jsp l'objet entier monObjetAEnvoye ?
    oui

    mais dans ta classe DAO ou Business tu devrais formater le résultat de ta requête SQL pour que la JSP puisse exploiter le résultat

    Imaginons que tu aies une classe Employe (nom,prenom,telephone)

    Dans ta classe DAO ou Business tu parses le retour de ta requête SQL pour faire une liste d'objets Employe que tu renvois à ta servlet
    dans ta servlet tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List<Employe> list = EmployeBusinness.findAllEmployes();
    request.setAttribute("listEmployes",list);
    et dans ta JSP tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getAttibute(listEmployes);
    mais je pense que tu devrais faire plus de recherche que ça car ce sont de
    grands classiques d'application web JEE
    je n'ai que deux mots à dire :



  17. #17
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 32
    Points
    32
    Par défaut
    Merci pour ces précisions.

    J'ai donc au final théoriquement une liste de résultats dans la jsp. Cette liste contient normalement les valeurs des attributs de la table interrogée par la requête sql.

    Dans la jsp, suis-je obligé de passer par les balises <% %> pour faire le traitement en java afin d'extraire de cette liste, la valeur voulue ?

  18. #18
    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 Davesique Voir le message
    Merci pour ces précisions.


    Dans la jsp, suis-je obligé de passer par les balises <% %> pour faire le traitement en java afin d'extraire de cette liste, la valeur voulue ?
    non
    les <%%> s'appellent les scriplets
    il y aussi des tags JSTL, JSF etc ...
    encore une fois

Discussions similaires

  1. Syntaxe d'une requête executeQuery dans une page JSP
    Par geteo dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 28/08/2012, 15h02
  2. Réponses: 6
    Dernier message: 21/08/2012, 23h13
  3. [Jena] Affichage du résultat d'une requête SPARQL dans une page JSP
    Par info_dekh dans le forum Frameworks
    Réponses: 1
    Dernier message: 18/06/2012, 11h54
  4. Editeur SQL dans une page JSP
    Par ja1985va dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 29/02/2012, 16h58

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