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 :

Problème de chemin relatif


Sujet :

Servlets/JSP Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut Problème de chemin relatif
    Bonjour à tous,

    Dans un dynamic web project sous eclipse, j'arrive à accéder à un fichier en chemin absolu, mais pas en chemin relatif.

    C'est un fichier properties qui se trouve dans un repertoire "resources", et qui est appelé par une classe Bean qui se trouve dans un repertoire "controle".

    l'arborescence correspondante est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    src
     |_com
           |_societe
                  |_projet
                         |_controle
                         |       |_le bean qui appelle le .properties
                         |
                         |_resources
                                 |_messages.properties
    J'essaie donc d’accéder depuis la classe Bean à ce properties par le chemin relatif suivant :
    ../resources/messages.properties
    Et ça ne fonctionne pas (erreur null pointer)
    De même en faisant ../../projet/resources/messages.properties

    Avez-vous une idée ?

    Bonne semaine et merci

  2. #2
    Membre Expert
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Par défaut
    Bonjour,

    Quelle méthode utilises-tu pour charger le fichier ?

  3. #3
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Salut,

    le plus simple à partir d'une Servlet est d'utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      ServletContext context = this.getServletContext();
      InputStream fichier = context.getResourceAsStream("/mon-fichier.properties");
    Le chemin doit commencer par "/" obligatoirement et peut pointer vers n'importe quel fichier de ta WebApp.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InputStream fichier = context.getResourceAsStream("/WEB-INF/resources/mon-fichier.properties").

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    Merci pour vos réponses.

    @fxrobin : je viens d'essayer ta soluce mais j'ai un message d'erreur me demandant de definir la methode getServletContext(), car je ne suis pas dans une servlet mais dans un FormBean.
    comment faire dans ce cas ?

    @Nesmontou : j'utilise le code suivant pour ce faire :
    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
    Properties props = new Properties();
    String chemin = "../resources/messages.properties";
    FileInputStream in = null;
    try {
    in = new FileInputStream(chemin);
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } 
    try {
    props.load(in);
    } catch (IOException e) {
    e.printStackTrace();
    }
    try {
    in.close();
    } catch (IOException e) {
    e.printStackTrace();
    A votre avis comment pourrais-je faire ?
    Merci pour votre aide

  5. #5
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Tu es donc sous Struts (1.3.x ?)

    alors il te suffit de faire ça pour obtenir le context de servlet de ton ActionForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ServletContext context = this.getServlet().getServletContext();
    InputStream fichier = context.getResourceAsStream("/mon-fichier.properties");

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    @fxrobin : je ne suis pas sous strut, juste une web application avec des jsp, servlets, beans et classes dao.

  7. #7
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Tu as dit que tu étais dans une Servlet qui appelle le properties ... moi je te donne le code source qui permet à partir d'une Servlet de lire un properties

    Poste ta classe entière de là où tu veux lire ton fichier de Properties, comme ça je pourrai mieux t'aider.

  8. #8
    Membre Expert
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Par défaut
    Salut,

    Essaies plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    InputStream is = this.getClass().getResourceAsStream("../resources/messages.properties");
     
    Properties properties = new Properties();
    properties.load(is);

  9. #9
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    "../" va le placer dans "WEB-INF" car le chemin de recherche commence à partir de "WEB-INF/classes" mais pourquoi pas si le fichier de properties s'y trouve.


    edit : quoique, j'ai un doute sur ce que je dis ...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    @fxrobin : autant pour moi j'ai fourché et voulais parler d'une classe Bean...pas d'une servlet. Du coup j'ai edité mon post de la question, pour ceux qui auront le même soucis

    @Nesmontou : SU-PER ! ça fonctionne nikel !!

    Merci pour votre aide, passez une bonne semaine

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    Le problème a bien été résolu pour l'appel d'un fichier externe via le chemin relatif, depuis une classe bean.

    Mais en appelant maintenant depuis une Servlet j'ai de nouveau un null pointer exception, la compilation ne trouvant pas mon fichier.

    voici mon code en ayant appliqué tes indications fxrobin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Properties prop = new Properties();
     
    try{
     
    	ServletContext context = this.getServletContext();
    	InputStream fichier = context.getResourceAsStream("/src/com/masociete/monprojet/resources/messages.properties");
     
    prop.load(fichier);
     
    } catch(Exception e){ 
    	 e.printStackTrace();
    	}
    De même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream fichier = session.getServletContext().getResourceAsStream("messages.properties");
    ne fonctionne pas non plus.

    Je m'arrache les cheveux lol !

    Voyez-vous une solution ?

    Encore merci pour votre aide

    Bonne semaine.

  12. #12
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Salut Bobette.

    où est placé ton fichier ?

    Conseil : mets le dans le répertoire /WEB-INF (voire dans un sous-répertoire)
    et pointe dessus comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ServletContext context = this.getServletContext();
    InputStream fichier = context.getResourceAsStream("/WEB-INF/messages.properties");

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    Merci fxrobin pour ta réponse rapide

    mon fichier est dans un package selon cette arborescence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    projetWebApp
            |
            |_src
            |     |_com
            |           |_societe
            |                  |_projet
            |                         |_controle
            |                         |      |_servlet qui appelle messages.properties
            |                         |
            |                         |_resources
            |                                 |_messages.properties
            |
            |_webcontent
    L'idéal serait que je le laisse dans ce package resources, donc ne pas le deplacer dans webcontent/WEB-INF

    Encore merci pour ton aide.

  14. #14
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    et bien tu peux faire la même méthode que pour une classe normale (celle montrée par nesmontou, mais tu dois le faire avec le chemin complet, car la recherche commence à partir de "/WEB-INF/classes" :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    InputStream is = this.getClass().getResourceAsStream("/com/societe/projet/resources/messages.properties");
     
    Properties properties = new Properties();
    properties.load(is);
    ou alors avec la méthode que je t'ai montrée, où là la recherche commence à partir de la racine de ton application web (WebContent dans ton cas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ServletContext context = this.getServletContext();
    InputStream fichier = context.getResourceAsStream("/WEB-INF/classes/com/societe/projet/resources/messages.properties");
    tu devrais te documenter sur la structure d'un package ".war" et tu comprendrais plus facilement.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    Salut fxrobin

    Tu avais raison de me faire revoir la structure de mon projet : mon problème a été résolu dès l'instant où j'ai placé mon répertoire de compilation des classes sous le WEB-INF (alors qu'au départ je l'avais à la racine du projet dans un répertoire build)

    Encore merci de m'avoir aider.
    Passe un bon weekend.

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

Discussions similaires

  1. Problème de chemin relatif/absolu
    Par lad86 dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 25/06/2010, 12h07
  2. problème de chemin relatif
    Par label55 dans le forum Langage
    Réponses: 7
    Dernier message: 01/02/2009, 17h11
  3. Problème de chemin relatif
    Par Pendary dans le forum C++Builder
    Réponses: 1
    Dernier message: 05/06/2007, 09h45
  4. [Picturebox] Problème de chemin relatif ?
    Par Invité dans le forum VB.NET
    Réponses: 2
    Dernier message: 08/04/2007, 14h48
  5. [JSP] Include, problème de chemin relatif
    Par dafly dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/04/2004, 14h11

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