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 :

[servlet] initialisation d'objets


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Inscrit en
    mai 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 20
    Points : 11
    Points
    11
    Par défaut [servlet] initialisation d'objets
    salut à tous,

    je n'arrive pas à initialiser des objets pour qu'ils soient ds la portée d'application:
    j'ai fait une servlet : controleurServlet
    ds le web.xml j'ai mis pour cette servlet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <load-on-startup>1</load-on-startup>
    ensuite ds le init(),
    j'intancie mes objets, puis je les met ds le servletContext, ici il y a un NullPointerException qui est levé à chaque fois et je n'arrive pas a savoir pourquoi...

    merci de votre aide

  2. #2
    Membre du Club
    Inscrit en
    juillet 2002
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : juillet 2002
    Messages : 66
    Points : 53
    Points
    53
    Par défaut
    Salut !

    tu peux nous montrer ton code ???


    sinon est tu sur d'avoir bien recupere ton servlet context :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ServletContext ctx = this.getServletContext();

    @+

  3. #3
    Membre à l'essai
    Inscrit en
    mai 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    voila ma methode init():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void init(ServletConfig config) throws ServletException {	
     
      SocketConnexionBean scb = new SocketConnexionBean();
      ProjectsList pl = new ProjectsList();	
     
     
      getServletContext().setAttribute("SocketConnexionBean", scb );
      getServletContext().setAttribute("ProjectsList", pl );
     
    }
    sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    getServletContext().setAttribute("SocketConnexionBean", scb );
    il y a le NullPointerException

  4. #4
    Membre du Club
    Inscrit en
    juillet 2002
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : juillet 2002
    Messages : 66
    Points : 53
    Points
    53
    Par défaut
    Recupere ton servletContext dans une variable et test si c ton context qui est nul ou si c l'objet que tu a instancié

  5. #5
    Membre à l'essai
    Inscrit en
    mai 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Salut !

    j'ai fait le test, et c'est l'objet ServletContext qui est null, comment faire pour le recupérer?

  6. #6
    Membre confirmé

    Inscrit en
    juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : juillet 2002
    Messages : 116
    Points : 505
    Points
    505
    Par défaut
    Je pense que tu peux le récupérer grâce à la ServletConfig passée en paramétre de ta méthode init() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void init(ServletConfig config) throws ServletException 
    {    
     
      SocketConnexionBean scb = new SocketConnexionBean(); 
      ProjectsList pl = new ProjectsList();    
     
      config.getServletContext().setAttribute("SocketConnexionBean", scb ); 
      config.getServletContext().setAttribute("ProjectsList", pl ); 
    }

  7. #7
    Membre du Club
    Inscrit en
    juillet 2002
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : juillet 2002
    Messages : 66
    Points : 53
    Points
    53
    Par défaut
    Salut !

    Quel serveur d'appli utilise tu ?

    c'est peut-être dans la config du serveur que tu dois lui indiquer de charger le servlet context.

  8. #8
    Membre à l'essai
    Inscrit en
    mai 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    j'utilise Tomcat 4.1.24-LE-jdk14

  9. #9
    Membre habitué
    Inscrit en
    octobre 2002
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : octobre 2002
    Messages : 164
    Points : 190
    Points
    190
    Par défaut
    La solution de Debernad marchera car la méthode getServletContext() (définie dans GenericServlet), fait appel à ServletConfig.getServletContext().

    Alors tu me diras que je viens de prouver le contraire de ce que je dis. Non pas tout à fait. Il se trouve qu'effectivement GenericServlet.getServletContext est une méthode utilitaire qui délégue le travail à un attribut de la classe. Et c'est là que ca va mal...

    L'attribut de type ServletConfig n'est pas encore affecté lors de ton appel à GenericSerlvet.getServletContext(), donc cette méthode vérifiant si l'attribut de type servletConfig n'est pas null avant de l'utiliser (ce qui est le cas), du coup te retourne null.

    Une meilleure solution (car sinon tu risques d'avoir d'autres soucis) est de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void init(ServletConfig servletConfigP) {
      super.init(servletConfig);
      ...
      getServletContext(....);  
    }
    > En tant que développeur de framework, composants de tools : toujours écrire la javadoc avec les spécificités d'utilisation
    > En tant qu'utilisateur de framework, composants, tools, etc... : toujours lire la javadoc

    Citation de la javadoc de Tomcat sur GenericServlet.init :
    init
    public void init(ServletConfig config) throws ServletException

    Called by the servlet container to indicate to a servlet that the servlet is being placed into service. See Servlet.init(javax.servlet.ServletConfig).
    This implementation stores the ServletConfig object it receives from the servlet container for later use. When overriding this form of the method, call super.init(config).


    Specified by: init in interface Servlet

    Parameters:
    config - the ServletConfig object that contains configutation information for this servlet

    Throws: ServletException - if an exception occurs that interrupts the servlet's normal operation

    See Also:
    UnavailableException
    Mais normalement tu ne devrais pas surcharger mais plutôt .
    Cette méthode étant appellé par init(ServletConfig) une fois l'attribut initialisé.

  10. #10
    Membre à l'essai
    Inscrit en
    mai 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    merci beaucoup, ca marche !!


  11. #11
    ndp
    ndp est déconnecté
    Membre actif Avatar de ndp
    Profil pro
    Inscrit en
    mars 2003
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2003
    Messages : 227
    Points : 255
    Points
    255
    Par défaut
    Mais normalement tu ne devrais pas surchargerCode:
    init(ServletConfig)
    mais plutôt Code:
    init()
    .
    Cette méthode étant appellé par init(ServletConfig) une fois l'attribut initialisé.
    Je pense que la meilleure solution est bien d'initialiser ta servlet dans init() pour les raisons citées plus haut.
    La surchage de init( ServletConfig conf) ne t'assure qu'une compatibilité ascendante (bien sur à condition d'appeler super.init( conf)).

  12. #12
    Membre à l'essai
    Inscrit en
    mai 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    oui, j'ai mis :
    super.init(config)

    ds la méthode d'initilalisation de la servlet

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

Discussions similaires

  1. [POO]Comment initialiser un objet membre static ?
    Par jamaliss dans le forum C++
    Réponses: 5
    Dernier message: 09/12/2007, 01h16
  2. [JSF] initialisation des objets de la page
    Par BRAUKRIS dans le forum JSF
    Réponses: 3
    Dernier message: 31/10/2007, 18h26
  3. Réponses: 10
    Dernier message: 13/09/2006, 10h13
  4. Réponses: 7
    Dernier message: 29/03/2006, 22h41
  5. Réponses: 5
    Dernier message: 19/11/2005, 19h53

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