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 :

Afficher une image contenue dans un dossier externe à l'application, dans une JSP


Sujet :

Servlets/JSP Java

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 176
    Points : 198
    Points
    198
    Par défaut Afficher une image contenue dans un dossier externe à l'application, dans une JSP
    Bonjour je croyais la chose simple...
    J'ai télévérsé des images dans un dossier /home/moi/images

    Puis dans un projet web developpé sous Eclipse, Tomcat j'ai une page JSP dans laquelle je voudrais afficher cette image, simple apparament :
    je pensais qu'un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="/home/moi/images/monImage.jpg"/>
    suffirait!!!
    non seulement, non mais en plus apres avoir lu ici et là pas grand chose de precis sur le sujet meme si le probleme a été evoqué tres souvent.
    J'ai besoin d'un coup de main, si quelqu'un pouvait m'aider
    Après la difficulté, la facilité...

  2. #2
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Slt,

    Tu devrais mettre tes images dans ton app ou sur ton serveur. Sinon tu es obligé de mettre un chemin absolu et encore tu pourras avoir des msg du genre "not allowed to load..."

    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 176
    Points : 198
    Points
    198
    Par défaut
    J'ai déja fais quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String pathDir = request.getServletContext().getRealPath("/pictures");
    et là en effet, je suis dans un repertoire du serveur, à savoir : wtpwebapps/monProjet/pictures/monImage
    le souci c'est que ce repertoire "pictures" s'efface au redemarrage de Tomcat!!!
    Après la difficulté, la facilité...

  4. #4
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Slt,

    wtpwebapps est un répertoire de travail pour eclipse!!! ton dossier pictures devrait être dans ton projet ainsi il sera redéployé à chaque démarrage
    Pour infos, hors d'eclipse tomcat déploie dans $tomcat_home/webapp

    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Si les images dépendent de l'utilisateur, ou si elles peuvent évoluer pendant l'activité de l'application, alors il ne faut pas les mettre dans l'application mais bien en dehors (ça évitera de les écraser quand tu installeras une nouvelle version de ton appli par exemple).

    Pour référencer des images en dehors de ton application web, c'est simple, tu as en gros 2 solutions :
    - une servlet pour récupérer l'image <img src="/monApplication/maServletImage?path=xxxxx"/>
    - un filtre pour interpréter le chemin <img src="/monApplication/externalPath/unDossier/uneImage"/>

    Les 2 solutions se ressemblent, donc, choisi...
    Ci-dessous un exemple avec un filtre
    web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
     
        <filter>
            <filter-name>FiltreImage</filter-name>
            <filter-class>test.filter.ImageFilter</filter-class>
        </filter>
     
        <filter-mapping>
            <filter-name>FiltreImage</filter-name>
            <url-pattern>/externalPath/*</url-pattern>
        </filter-mapping>
    ...
    le filtre
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    package test.filter;
     
    import java.io.ByteArrayOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
     
    public class ImageFilter implements Filter
    {
        private static final String PATH_IDENTIFIER = "/externalPath/";
     
        @Override
        public void init(FilterConfig arg0) throws ServletException
        {
        }
     
        @Override
        public void destroy()
        {
        }
     
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        {
            String uri = ((HttpServletRequest)request).getRequestURI();
            int p = uri.indexOf(PATH_IDENTIFIER);
            String path = uri.substring(p + PATH_IDENTIFIER.length());
     
            try
            (
                    FileInputStream ios = new FileInputStream(path);
            )
            {
                byte[] buffer = new byte[4096];
                ByteArrayOutputStream ous = new ByteArrayOutputStream();
                int read = 0;
                while ((read = ios.read(buffer)) != -1) 
                {
                    ous.write(buffer, 0, read);
                }        
            response.getOutputStream().write(ous.toByteArray());
            }
            catch (Exception e)
            {
                System.out.println(e.toString());
            }
        }
    }
    une page utilisatrice d'image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!DOCTYPE html>
     
    <html>
    <body>
     
    <img src="/TestWeb/externalPath/c:/Temp/image1.jpg" width="300" height="300"/>
     
    </body>
    </html>
    Ce serait plus sympa de mettre un nom logique d'image et d'en déduire son chemin par des règles plutôt que de mettre physiquement le chemin de l'image cible dans l'attribut src de <img>... c'est vrai pour le filtre ou pour la servlet
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 176
    Points : 198
    Points
    198
    Par défaut
    je suis plus servlet que filtre, mais pour l'interet pedagogique, allons vers le filtre, mais du coup plusieurs questions:
    External path est il le chemin absolu de mon dossier d'images (j'en doute), genre : /home/moi/images/?
    Si tel est le cas le filtre sera actif pour tout ce qui est contenu dans mon dossier image, tres bien.
    pour ma jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="/TestWeb/externalPath/home/moi/images/image1.jpg" width="300" height="300"/>
    je comprends pas que l'on ai : /TestWeb : mon application suivi de /externalPath : mon dossier d'image puis a nouveau mon chemin de l'image!!!
    je pense plutot avoir loupé quelquechose désolé. Si tu peux m'eclaircir. au pire je ferai avec la servlet que je trouve plus intuitive que le filtre
    Après la difficulté, la facilité...

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    A vrai dire, TestWeb est le nom de l'application que j'utilise pour faire des tests, en pratique, ce serait codé comme ceci dans la page (en JSP)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <img src="<%=request.getContextPath()%>/externalPath/le chemin relatif ou réel de l'image" />
    externalPath dans le chemin permet juste d'avoir un discriminateur pour le filtre, c'est à mettre en relation avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <filter-mapping>
               <filter-name>FiltreImage</filter-name> 
               <url-pattern>/externalPath/*</url-pattern>
        </filter-mapping>
    ça évite d'appeler le filtre pour tout alors que ça n'a de sens que pour une image avec un chemin externe à l'application.

    Alors, pour récapituler :
    - /TestWeb est là pour le filtre (puisqu'il est lié à l'application)
    - /externalPath est également là pour le filtre (puisque c'est le discriminateur)
    - la suite représente le chemin de l'image (physiquement, à partir de "c:" dans mon exemple)

    Personnellement, j'utiliserais plutôt un alias qu'un chemin, mais c'est le même principe derrière et ce n'est qu'un exemple
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 176
    Points : 198
    Points
    198
    Par défaut
    nickel, non seulement ça marche mais en plus j'ai compris!!! merci, et l'alias, c'est du luxe...
    Après la difficulté, la facilité...

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

Discussions similaires

  1. Afficher une image dans un dossier externe par le biais d'une page html
    Par louis.enzo dans le forum Développement Web en Java
    Réponses: 7
    Dernier message: 30/05/2015, 19h45
  2. afficher des images à partir d'un dossier externe
    Par belfafi dans le forum Flash
    Réponses: 1
    Dernier message: 22/04/2010, 00h12
  3. Réponses: 10
    Dernier message: 30/08/2009, 00h01
  4. [MySQL] afficher une image contenue dans un blob avec d'autres infos
    Par pakkun dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/06/2007, 17h08
  5. [Zip] Afficher une image contenue dans un fichier zip
    Par Mister Nono dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 19/03/2007, 08h59

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