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

Développement Web en Java Discussion :

Chemin relatif dans une application web


Sujet :

Développement Web en Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 29
    Points : 26
    Points
    26
    Par défaut Chemin relatif dans une application web
    Bonjour,
    Je suis débutante dans le développement d'applications web en java.
    J'ai crée une application simple qui récupère des données à partir d'une base, puis créé un svg avec graphviz pour m'afficher un graphe à partir des données de la BD.
    Le problème c'est au niveau de la récupération du svg (et les images contenues dedans), car tous les chemins sont relatifs au répertoire des sources java.
    D'habitude pour ne pas me casser la tête avec les liens/paths, je mets tout en chemin relatif par rapport au code de mon programme (./)
    Le soucis ici c'est que le ./ revoie vers le bin de tomcat, mon serveur d'application.
    Ma question: Comment préciser lors de l’exécution d'une application web un chemin relatif au répertoire où se trouve le code java et pas le tomcat?
    Ps: je ne peux pas utiliser de chemin absolus car l'appli ne tournera pas toujours sur ma machine et je ne veux pas avoir à remodifier le code tout le temps

    Merci d'avance

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 71
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Si j'ai bien compris ton problème, il faut que tu place les fichiers que tu veux utiliser dans le webApp.

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Normalement, "./" renvoie vers la racine de l'application (donc plutôt l'équivalent de /WebContent/)...

    Ceci dit, je te conseille d'utiliser un répertoire en dehors de l'application (pour éviter l'écrasement en cas de redéploiement de l'application).
    Tu peux utiliser une servlet pour récupérer tes images.
    Plutôt que de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="./unRepertoire/uneImage.jpg" ... />
    Tu mettras
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="/laServletDeRécupération?idImage=uneImage.jpg" ... />
    Et la servlet renverra l'image via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    response.setContentType("image/jpg");
    response.getOutputStream().write(imageBytes);  // imageBytes est le contenu du fichier image lu via FileReader
    response.flushBuffer();

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    Je ne peux pas placer l'application dans webapps ça ne résout pas du tout le problème car il y aura des conflits entre les paths du java et ceux de tomcat (même si je redirige tous les paths moi même)
    En fait je récupère l'adresse des classes java appelée par tomcat avec cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     public static String getAppDirectory() {
        String appDirectory = NomDeLACLasse.class.getResource("NomDELaCLasse.class").getPath().replaceAll("%20", " ");
        appDirectory = appDirectory.substring(0, appDirectory.indexOf("WEB-INF/"));
        File f = new File(appDirectory);
        appDirectory = f.getAbsolutePath() + File.separator;
        return appDirectory;
      }
    elle me récupère donc le build du projet. Je place le svg dans le directory que me retourne cette fonction.
    Pour afficher le svg dans la iframe au lieu de donner le path, je donne juste le nom du fichier et bizarrement ça passe...
    Par contre, dans le svg après il y a des liens et ces liens ne sont pas interprétés correctement, on reboucle donc sur le mm problème.
    Ici le problème est plus dur à résoudre car les liens du svg sont généré automatiquement et renvois des chemins absolus.
    Comment peut-on éviter que tomcat redirige tous les chemins surtout lorsqu'ils sont absolus?

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Ou là, on part dans les bidouille qui n'ont pas de sens là!

    Pour l'utilisateur (le navigateur), tes images svg doivent être accessibles via une URL. Pour ce faire, on crée un servlet, qui sert l'image en question, on lui donne un pattern dans le web.xml ou via une annotation, et on crée des url pour y accéder du style

    /nomDeLApplication/taServlet?svg=identifiantDuSVG

    Pour avoir un dossier où stocker ces SVG, on crée simplent un dossier à un endroit approprié, à l'extérieur de tomcat/jboss/.... et on configure ce chemin dans l'application, à faire à la main donc.

    Pour connaître "nomDeLApplication", on utilise request.getContextPath() au passage.


    Pour la génération du SVG, si je comprends bien, tu as besoin de connaître l'endroit où est installée ton application. Je trouve cela bizarre, mais soit. Cette information est accessible via request.getRealPath("."), quand c'est possible (pas de garantie qu'il existe un chemin vers une ressource si celle-ci est dans un war non dépaqueté).

Discussions similaires

  1. Chemin relatif dans une application web sur tomcat
    Par kadje84 dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 21/02/2012, 07h36
  2. Lancer un et un seul thread unique dans une application web
    Par rach375 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 22/09/2006, 15h35
  3. [JDOM] java.lang.NoClassDefFoundError: org/jdom/Content dans une application web
    Par oughlad dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 30/05/2006, 18h06
  4. Réponses: 2
    Dernier message: 24/01/2006, 09h41
  5. Licence MySql en tant que BD dans une application web
    Par Volta dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/02/2004, 14h38

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