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 :

"use bean" ou "page import"


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 68
    Points : 39
    Points
    39
    Par défaut "use bean" ou "page import"
    Bonjour,

    Pourriez vous m'indiquer les avantages et inconvénients de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <jsp:useBean class="test.testDb" id="db" scope="session"/>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>title</title>
    </head>
    <body>
    <%
            out.println(db.read());
    %>
    </body>
    </html>
    par rapport à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <%@page import="test.testDb"%>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>title</title>
    </head>
    <body>
    <%
            out.println(testDb.read());
    %>
    </body>
    </html>
    Merci par avance,

  2. #2
    Membre éprouvé
    Avatar de kmdkaci
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 560
    Points : 950
    Points
    950
    Par défaut "use bean" ou "page import"
    Bonjour,
    Quand tu utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:useBean class="test.testDb" id="db" scope="session"/>
    tu spécifie le scope. Tu choisis le type :Session, Application...etc

    Tout de même, je me pose cette question :
    Ces deux moyens, sont-ils exclusifs ?

  3. #3
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Dans le premier cas, dans ta jsp tu vas instancier un nouvel objet de ta class testDB en faisant le new dans ta page jsp.

    Dans le deuxième cas, la jsp va chercher si il existe une instance de l'objet testDB id="db" soit dans la page, la session l'application etc ... cad qu'il pourra récuperer un objet déjà défini dans une autre page jsp par ex et le manipuler dans cette page. Si id n'existe pas, il sera instancié automatiquement.
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Pour la visibilité de la variable "db" voir le scope tel que:

    # scope="page | request | session | application"

    The scope in which the Bean exists and the variable named in id is available. The default value is page. The meanings of the different scopes are shown below:

    * page - You can use the Bean within the JSP page with the <jsp:useBean> element or any of the page's static include files, until the page sends a response back to the client or forwards a request to another file.

    * request - You can use the Bean from any JSP page processing the same request, until a JSP page sends a response to the client or forwards the request to another file. You can use the request object to access the Bean, for example, request.getAttribute(beanInstanceName).

    * session - You can use the Bean from any JSP page in the same session as the JSP page that created the Bean. The Bean exists across the entire session, and any page that participates in the session can use it. The page in which you create the Bean must have a <%@ page %> directive with session=true.

    * application - You can use the Bean from any JSP page in the same application as the JSP page that created the Bean. The Bean exists across an entire JSP application, and any page in the application can use the Bean.
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 68
    Points : 39
    Points
    39
    Par défaut
    Merci à tous pour vos réponses, je ne m'attendais pas à autant de réactivité !

    Fench, d'après ton explication, dans le cas d'un "use bean", la classe sera instanciée automatiquement si elle ne l'était pas déjà dans le scope utilisé.
    Je suppose donc que le constructeur par défaut sera appelé !

    En prenant le problème à l'envers, imaginons une classe de type singleton (constructeur privé et méthode statique d'accès à l'instance), la méthode "use bean" n'est donc pas appropriée...
    peut on envisager avec l'autre solution de faire appel à une méthode statique (donc sans instancier la classe ex.: testDb.getInstance()).

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    dans le cas d'un "use bean", la classe sera instanciée automatiquement si elle ne l'était pas déjà dans le scope utilisé.
    Je suppose donc que le constructeur par défaut sera appelé !
    OUI

    En prenant le problème à l'envers, imaginons une classe de type singleton (constructeur privé et méthode statique d'accès à l'instance), la méthode "use bean" n'est donc pas appropriée...
    OUI et NON
    La class type singleton donne qu'une instance possible je crois ... mais cela n'empéche pas d'avoir qu'une instance dans le cas du scope Application (en effet tu peux la définir dans une servlet)

    peut on envisager avec l'autre solution de faire appel à une méthode statique
    ET donc au final tu as la description de ton singleton dans la JSP et donc unique à ta JSP tandis que le usebean sera encore utilisable pour d'autres !!!
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 68
    Points : 39
    Points
    39
    Par défaut
    Oui mais dans le cas d'un singleton, l'unique instance ne s'obtient pas à partir du constructeur.

    Pour rebondir sur ta proposition de servlet, serait il possible de définir dans la servlet l'id de mon instance de façon à ce que les use bean de mes JSP la récupère plutôt que d'essayer de l'instancier à nouveau ?

    Exemple :

    Dans la servlet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MaClasseSingleton c = MaClasseSingleton.getInstance();
    c.setId("maClasse");
    Dans mes JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <jsp:use bean class="monPackage.MaClasseSingleton" id="maClasse" scope="application">

  8. #8
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Moi cela me parait correct ...

    As tu essayé, ça m'interesserait de savoir

    Bon we A+
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 68
    Points : 39
    Points
    39
    Par défaut
    J'ai finalement opté pour une autre solution...

    J'ai crée une classe intermédiaire dont le constructeur (public celui ci)
    récupère l'instance de mon singleton.
    Cette classe dispose d'un attribut du type de ma classe singleton.

    Enfin, je fais référence à cette nouvelle classe en tant que bean dans toutes mes JSP avec un scope "session".

    Nouvelle classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     public class Starter {
     
    	 private MysqlDb db = null;
    	 public Connection con = null;
     
     
    	public Starter() {
    		super();
    		db = MysqlDb.getInstance(); //Mon singleton
    		con = db.getConnection();
    	}   	
     
    }
    Appels dans les JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <jsp:useBean class="util.Starter" id="db" scope="session"></jsp:useBean>
    .
    .
    Statement statement = (Statement)db.con.createStatement();
    Théoriquement, et d'après tes explications , ma classe intermédiaire (Starter) ne devra être instanciée qu'une seule fois au cour de la session,
    quelque soit le nombre de JSP y faisant appel.

    Am I all right ?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 68
    Points : 39
    Points
    39
    Par défaut
    Ayant eu une réponse à la problématique de mon post
    (page import ou use bean), je met résolu !

  11. #11
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Salut,

    Moi je trouve ça pas mal (pour le code)

    L'utilité de la classe intermédiaire,

    mais bon si ça te convient
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Include & utilisation Bean de la master page
    Par lem01 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 31/05/2007, 14h00
  2. <%@ page import= Problème à cause de sous package?
    Par zuzuu dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 31/07/2006, 11h14

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