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

Tomcat et TomEE Java Discussion :

image url hors du context webapps


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut image url hors du context webapps
    Bonjour,
    Voici quelques éléments de départ :
    - Tomcat 6 est installé dans un repertoire quelconque, disons $CATALINA_HOME
    - mon appli se trouvera dans l'espace de stockage /disk1/softs/webapps/myapp
    - Des données (images, pdf...) sont stoquées dans une autre partition, disons /disk2/data/
    Je voudrais donc, dans une page de mon appli web afficher une image stoquée en dehors de mon arborescence webapps.
    J'ai cru comprendre que faire ceci ne peut fonctionner pour des raisons de sécurité (accès à des données par javascript vicieux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="file:///disk2/data/img123.png"/>
    J'ai eu recours par le passé à une bidouille qui consistait à créer un fichier de context $CATALINA_HOME/conf/Catalina/localhost/data.xml, dans lequel je mettait un docBase à /disk2/data/ et path à /data. Ainsi tout path comencant par /data allait chercher au bon endroit. Sauf que normalement, docBase devrait correspondre à une appli web et moi je n'y ai que des fichiers de données. C'est pour ça que je dis que c'est une bidouille.
    Quelqu'au aurait-il une solution propre à me proposer ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Bonjour,
    une solution "propre" consisterait à mettre les ressources statiques au niveau du serveur Apache et non du serveur applicatif.
    En plus, les ressources seront connues via une URI et non une arborescence physique sur le disque.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut
    En effet j'ai lu ici :
    Séminaire "Expertise Tomcat" : compte-rendu
    que que c'était une solution :
    Il est souvent intéressant de placer des serveur Apache HTTPD devant les serveurs d'applications, car ils sont généralement plus performants pour servir les ressources statiques (images, scripts javascript...). Mais dans le cas où ces ressources sont de taille modeste (c'est-à-dire inférieure à la taille du buffer de réponse de Tomcat), Tomcat offre des performances équivalentes.
    Cependant j'aurais aimé ne pas avoir à installer Apache. En re-relisant la doc Tomcat j'ai vu qu'il exite un élément "Resources" à mettre dans le fichier de context, mais dont je ne comprends pas bien la signification.

  4. #4
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Salut,
    Si tu souhaites utiliser le service http de Tomcat il faut que dans le fichier server.xml tu configures le connecteur Coyote HTTP/1.1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <Service name="Tomcat-Standalone">
    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8080"...
    lien :
    http://www.formation.jussieu.fr/~per...pm/Tomcat.html

  5. #5
    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
    Billets dans le blog
    1
    Par défaut
    Sinon, la méthode propre consiste à utiliser un filtre... simple... efficace...
    et beaucoup plus complet (on pourrait même imaginer chercher les images sur une autre machine via ftp, ejb, rmi, etc...)
    Voici un exemple simple
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    package com.obia.filter;
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileReader;
    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class FilterImage implements Filter
    {
            private static String IMAGE_REPOSITORY;
     
            @Override
            public void init(FilterConfig config) throws ServletException
            {
                    IMAGE_REPOSITORY = config.getInitParameter("IMAGE_REPOSITORY");
            }
     
            @Override
            public void destroy()
            {
            }
     
            @Override
            public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
            {
                    File file = null;
                    BufferedReader reader = null;
                    FileReader fileReader = null;
                    ServletContext sc = null;
                    try
                    {
                            HttpServletRequest _request = (HttpServletRequest)request;
                            HttpServletResponse _response = (HttpServletResponse)response;
     
                            String filePath = _request.getRequestURI();
                            file = new File(IMAGE_REPOSITORY + filePath.substring(filePath.lastIndexOf("/")));
     
                    // Set content type
                            sc = _request.getSession().getServletContext();
                            String mime = sc.getMimeType(filePath);
     
                    _response.setContentType(mime);
     
                    // Set content size
                    _response.setContentLength((int)file.length());
     
                    // Open the file and output streams
                    FileInputStream in = new FileInputStream(file);
                            ServletOutputStream out = _response.getOutputStream();
     
                    // Copy the contents of the file to the output stream
                    byte[] buf = new byte[1024];
                    int count = 0;
                    while ((count = in.read(buf)) >= 0) {
                        out.write(buf, 0, count);
                    }
                    in.close();
                    out.close();
     
     
                    }
                    catch (Exception e)
                    {
     
                    }
                    finally
                    {
                            if (fileReader != null) try { fileReader.close(); } catch (Exception e) {}
                            if (reader != null) try { reader.close(); } catch (Exception e) {}
                    }
            }
    }
    Le web.xml
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="WebApp_ID" version="2.5">
        <display-name>Web1</display-name>
    
        <filter>
            <filter-name>FiltreImage</filter-name>
            <filter-class>com.obia.filter.FilterImageBuffered</filter-class>
            <init-param>
            <param-name>IMAGE_REPOSITORY</param-name>
            <param-value>C:\\Documents and Settings\\OBU\\Mes documents\\Mes images</param-value>
            </init-param>
            
        </filter>
        <filter-mapping>
            <filter-name>FiltreImage</filter-name>
            <url-pattern>/virtual/images/*</url-pattern>
        </filter-mapping>
    
    
    
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    et une page d'exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <html>
    
    <body>
    
    Bienvenue pour ce test de filtre<br/>
    <br/>
    <img src="./virtual/images/Calvin.jpg" />
    
    </body>
    </html>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Bonjour et merci pour ton intervention,
    mais que penses-tu dans ce cas de l'utilisation d'un JavaBean Resources
    Merci

  7. #7
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par totoche Voir le message
    Bonjour et merci pour ton intervention,
    mais que penses-tu dans ce cas de l'utilisation d'un JavaBean Resources
    Merci
    Peux-tu préciser ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Dans Tomcat les JavaBeans sont configurables en tant que ressource JNDI:
    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
     
    <Server ... >
       <GlobalNamingResources>
          <Resource name="bean/GlobalImages"
          type="fr.totoche.beans.Image"
          auth="Container"
          factory="org.apache.naming.factory.BeanFactory"
          nom="totoche"/> 
       </GlobalNamingResources>
       <Service ... > 
          <Engine ... > 
             <Host ... > 
     
                <Context path="/myApp" docBase="myApp"> 
                    <ResourceLink 
                      name="bean/Images"
                      global="bean/GlobalImages"
                      type="fr.totoche.beans.Image"" />
                </Context>
    j'imaginais un javaBean Image avec une méthode public String getImage(String nomImage) , que l'on peut initialiser dans une classe listener implementant ServletContextListener
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Context initialCtx = new InitialContext();
    Context localCtx = (Context) initialCtx.lookup("java:comp/env");
    Image i = (Image) localCtx.lookup("bean/Image");
    event.getServletContext().setAttribute("images", i);
    ---
    Qu'en penses-tu ?

  9. #9
    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
    Billets dans le blog
    1
    Par défaut
    Je n'ai jamais mis en œuvre ce genre de bean...

    Dans le principe, ça me paraît nettement moins bon dans la mesure où tu ne pourras pas utiliser une balise <img> en relation avec ce bean.

    Avec le filtre, les pages html/jsp n'ont strictement rien de spécifique et
    pourtant le contenu est récupéré en dehors du contexte de l'application.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut
    Merci OButterlin, je vais mettre cette méthode oeuvre. En cas de soucis, je te re-solliciterai

Discussions similaires

  1. Images & url = null ?
    Par DidUngar dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 08/05/2008, 21h33
  2. Probleme avec list-style-image:url()
    Par orphen dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 03/04/2008, 16h30
  3. Réponses: 4
    Dernier message: 26/03/2008, 09h10
  4. Réponses: 1
    Dernier message: 06/07/2006, 12h11
  5. [CSS] background-image: url("http
    Par Ghost Warrior dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 25/12/2005, 10h58

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