alias sous Tomcat (résolu)

alias sous Tomcat (résolu) - Java - Programmation

Marsh Posté le 19-08-2003 à 00:32:40    

hello,
 
j'ai une web application pour laquelle j'aimerais accéder à des ressources (images) en dehors du context Tomcat (sur d:\data\pictures par exemple)
 
je pense que dans Apache il y a moyen de configurer cela avec des alias, est-ce possible aussi avec Tomcat ?
ou bien suis-je obligé de copier toutes les images dans le context de la web application ?


Message édité par ozark74 le 22-08-2003 à 10:36:01
Reply

Marsh Posté le 19-08-2003 à 00:32:40   

Reply

Marsh Posté le 19-08-2003 à 08:41:03    

tu peux faire une servlet qui va lire les fichiers dans un rep spéciale en ouvrant le fichier et en balançant le flux sur la sortie de la servlet ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-08-2003 à 09:16:30    

:bounce:

Reply

Marsh Posté le 21-08-2003 à 09:21:21    


ca fait plaisir d'être ignoré  :pfff:


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-08-2003 à 09:41:41    

benou a écrit :


ca fait plaisir d'être ignoré  :pfff:  


 
Benou
 
ta solution ne me satisfait pas vraiment because ce que je voudrais faire c'est inclure dans mes jsps des images qui ne se trouvent pas dans le context tomcat mais à un autre endroit sur le disque dur.
 
Je sais que c'est possible sous Apache, mais avec Tomcat seul est-ce que c'est le cas ?  
 

Reply

Marsh Posté le 21-08-2003 à 09:50:03    

ozark74 a écrit :


 
Benou
 
ta solution ne me satisfait pas vraiment because ce que je voudrais faire c'est inclure dans mes jsps des images qui ne se trouvent pas dans le context tomcat mais à un autre endroit sur le disque dur.


 
la moindre des choses c'est d'avoir la politesse de répondre à la personne qui essaye de t'aider


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 21-08-2003 à 09:58:11    

oki oki je vous présente mes plus plates excuses  :sweat:  
j'le ferai plus  

Reply

Marsh Posté le 21-08-2003 à 10:48:42    

ozark74 a écrit :


ce que je voudrais faire c'est inclure dans mes jsps des images qui ne se trouvent pas dans le context tomcat mais à un autre endroit sur le disque dur.


c'est exactement ce que ma solution permet de faire ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-08-2003 à 11:06:50    

je suis même tellement sympa et pas rancunié que je te file le code tout fait :  

Code :
  1. package benou.t.es.trop.sympa;
  2. import java.io.IOException;
  3. import javax.servlet.*;
  4. import javax.servlet.http.*;
  5. import java.io.*;
  6. public class ImageMappingServlet extends HttpServlet
  7. {
  8. private File dataDirectory;
  9. public void init()throws ServletException{
  10.  String dataDirectory_str = getInitParameter("imgDirectory" );
  11.  if (dataDirectory_str == null) {
  12.   throw new ServletException("The servlet parameter 'imgDirectory' is mandatory" );
  13.  }
  14.  this.dataDirectory = new File(dataDirectory_str);
  15.  if (!this.dataDirectory.isDirectory()) {
  16.   throw new ServletException("'" + dataDirectory_str + "' doesn't exist or isn't a directory" );
  17.  }
  18. }
  19. protected void doGet(
  20.  HttpServletRequest request,
  21.  HttpServletResponse response)
  22.  throws ServletException, IOException
  23. {
  24.  HttpSession session = request.getSession();
  25.  String src = request.getPathInfo();
  26.  ServletContext context = getServletConfig ().getServletContext ();
  27.  String MIMEType = context.getMimeType (src);
  28.  if (MIMEType != null) {
  29.   response.setContentType(MIMEType);
  30.  }
  31.  File srcFile = new File(this.dataDirectory, src);
  32.  if (! srcFile.isFile()) {
  33.   response.sendError(404);
  34.   return;
  35.  }
  36.  FileInputStream in = new FileInputStream(srcFile);
  37.  OutputStream out = response.getOutputStream();
  38.  int size = copy(in, out, 1024);
  39.  in.close();
  40.  response.setContentLength(size);
  41. }
  42. public static int copy(InputStream in, OutputStream out, int bufferSize) throws IOException {
  43.  byte[] buffer = new byte[bufferSize];
  44.  int nbRead;
  45.  int size=0;
  46.  while ((nbRead = in.read(buffer)) != -1) {
  47.   out.write(buffer, 0, nbRead);
  48.   size+=nbRead;
  49.  }
  50.  return size;
  51. }
  52. }


 
et dans le web.xml :
 

Citation :


    <servlet>
        <servlet-name>ImageServlet</servlet-name>
        <servlet-class>benou.t.es.trop.sympa.ImageMappingServlet </servlet-class>
       <init-param>
         <param-name>imgDirectory</param-name>
         <param-value>c:\tonRepImage</param-value>
       </init-param>
 
    </servlet>
    <servlet-mapping>
        <servlet-name>ImageServlet</servlet-name>
        <url-pattern>/img2/*</url-pattern>
 
   </servlet-mapping>


 
et tes liens vers tes images devront ressembler à ca : http://tonServeur/tonApp/img2/toto.jpg
et ca te renverra l'image présente dans c:\tonRepImage\toto.jpg


Message édité par benou le 22-08-2003 à 00:21:29

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-08-2003 à 11:22:23    

benou a écrit :

je suis même tellement sympa et pas rancunié que je te file le code tout


 
thanks Benou, t'es vraiment trop bon avec moi  :jap:  
 
j'essaie ca ce soir et je vous tiens au courant.
 

Reply

Marsh Posté le 21-08-2003 à 11:22:23   

Reply

Marsh Posté le 21-08-2003 à 11:23:53    

ozark74 a écrit :


 
thanks Benou, t'es vraiment trop bon avec moi  :jap:  


 
je trouve aussi [:ddr555]
 
:hello:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 21-08-2003 à 11:37:03    

je suis dans un bon jour ;)
 
et puis ca pourra peut-être servir à d'autre : c'est un besoin assez courant ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-08-2003 à 12:35:05    

Je me permet juste un pitite remarque sur le code de benou :
à la place de ça :

Code :
  1. if (Utils.endsWithIgnoreCase(src, ".gif" )) {
  2.            response.setContentType("image/gif" );
  3.           } else if (Utils.endsWithIgnoreCase(src, ".jpg" ) || Utils.endsWithIgnoreCase(src, ".jpeg" )){
  4.            response.setContentType("image/jpeg" );
  5.         }


 
On devrait plutpot faire ça :

Code :
  1. ServletContext context = getServletConfig ().getServletContext ();
  2. String MIMEType = context.getMimeType (src);
  3. if (MIMEType != null)
  4.    response.setContentType(MIMEType);


C'est plus générique. Et puis, pourquoi ne pas utiliser ce qui existe dans les moteurs de servlets niveau correspondance de types MIME

Reply

Marsh Posté le 21-08-2003 à 13:52:47    

ça me parait étrange qu'on ne puisse pas faire ça dans la config de tomcat directement... et puis tu peux toujours mettre un apache devant sinon ;)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 21-08-2003 à 14:00:37    

El_gringo a écrit :

Je me permet juste un pitite remarque sur le code de benou :
On devrait plutpot faire ça :
C'est plus générique. Et puis, pourquoi ne pas utiliser ce qui existe dans les moteurs de servlets niveau correspondance de types MIME


Tout à fait ! c'est bien mieux comme ca !
je ne me souvenais plus de l'existence de cette méthode ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-08-2003 à 14:11:56    

benou a écrit :


Tout à fait ! c'est bien mieux comme ca !
je ne me souvenais plus de l'existence de cette méthode ...

un bon point pour el_gringo :)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 21-08-2003 à 14:16:53    

the real moins moins a écrit :

un bon point pour el_gringo :)


 :jap:


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 21-08-2003 à 14:26:14    


 
Youpi :bounce:  
Encore 9 et j'ai une grande image !

Reply

Marsh Posté le 21-08-2003 à 14:34:43    

:lol:  
 
 
(qqun tient les comptes? [:cupra])


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 21-08-2003 à 15:03:26    

the real moins moins a écrit :

:lol:  
 
 
(qqun tient les comptes? [:cupra])

je tiens un spreadsheet à jour :D
gare à vous :D


Message édité par the real moins moins le 21-08-2003 à 15:03:35

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 21-08-2003 à 23:45:44    

Citation :

je suis même tellement sympa et pas rancunié que je te file le code tout fait :


 
voila j'ai testé ca fonctionne très bien, encore un grand merci  :jap:  
 
quelques petits détails (dans le but de faire avancer la science) :  
1.

Code :
  1. String dataDirectory_str = getServletContext().getInitParameter("imgDirectory" );


fonctionnait pas alors que  

Code :
  1. String dataDirectory_str = getServletConfig().getInitParameter("imgDirectory" );


fonctionnait bien, pourtant il me semble que ca devrait donner le meme résultat dans les deux cas  :heink:  
 
2. init-param dans la section servlet et pas la section servlet-mapping du web.xml
 
3. url-pattern : pas de / devant img2/*
 
Remarque finale : j'ignorais que l'ordre des éléments dans le web.xml était important !  
 
Voila c'est tout pour ce soir, Simone à vous l'antenne.


Message édité par ozark74 le 21-08-2003 à 23:47:05
Reply

Marsh Posté le 21-08-2003 à 23:52:26    

toi tu cherches à grapiller un bon point hein? [:paysan]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-08-2003 à 00:19:30    

ozark74 a écrit :

[quote]1.

Code :
  1. String dataDirectory_str = getServletContext().getInitParameter("imgDirectory" );


fonctionnait pas alors que  

Code :
  1. String dataDirectory_str = getServletConfig().getInitParameter("imgDirectory" );


fonctionnait bien, pourtant il me semble que ca devrait donner le meme résultat dans les deux cas  :heink:  


:jap: le code que j'ai fillé je l'ai piqué sur une servlet ressemblante et je l'ai adapté vite fait sans recompilé ni tester ... la servlet d'origine cherchait le paramêtre dans le contexte, j'ai loupé cette modif
 

ozark74 a écrit :

[quote]2. init-param dans la section servlet et pas la section servlet-mapping du web.xml


:jap:
j'ai mal placé mon copié collé :lol:
 

ozark74 a écrit :

[quote]3. url-pattern : pas de / devant img2/*


là par contre je ne suis pas d'accord : tous les url-pattern doivent commencer par un '/' sauf ceux de la forme "*.truc".  
 
je mets à jour mon post initial avec ces modifs


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 00:26:12    

je savais bien que je me trompais pas :  
 
tiré des spécif des servlet 2.3 du site de sun :  

Citation :

In the web application deployment descriptor, the following syntax is used to define
mappings:
? A string beginning with a ?/? character and ending with a ?/*? postfix is used
for path mapping.
? A string beginning with a ?*.? prefix is used as an extension mapping.
? A string containing only the ?/? character indicates the "default" servlet of the
application. In this case the servlet path is the request URI minus the context
path and the path info is null.
? All other strings are used for exact matches only.


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 00:43:47    

benou a écrit :

je savais bien que je me trompais pas :  


 
en effet ... je viens de retester et ca fonctionne avec (ou sans) le / devant img2/*

Reply

Marsh Posté le 22-08-2003 à 00:51:14    

puisque Simone ne veut pas reprendre l'antenne tout de suite, voici un flash de dernière minute.
 
autre technique faire de d:\data\pictures le root d'un autre contexte  
 
suffit d'ajouter un fichier xml dans le root du répertoire webapps de Tomcat avec le contenu suivant :  

Code :
  1. <Context path="/mypics" docBase="d:/data/pictures "
  2.         debug="0">
  3. </Context>


 
et ensuite j'accède aux images tout naturellement via http://monserveur/mypics/toto.jpg
 
 
je sais pas ce que ca vaut comme approche, mais ca à l'avantage de pas devoir coder quoique ce soit.

Reply

Marsh Posté le 22-08-2003 à 00:58:05    

bha c'est pas top : tu redéfinis une autre web-app ... c'est pas la même application quoi ...
mais bon, en effet, ca marche aussi bien ...  
A condition de pas en abuser (pas déclarer 10 nouvelle web-app quoi) ca peut être une solution simple.
 
(mais c'est un peu de la bidouille quand même)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 00:59:46    

ozark74 a écrit :


en effet ... je viens de retester et ca fonctionne avec (ou sans) le / devant img2/*  


ben c'est vraiment étonnant : ca devrait te jarter lors du déploiement si ton mapping n'a pas une syntaxe correcte. En plus je me souviens que tomcat est très à cheval sur ce genre de truc : tu te manges un méchant message d'erreur et ta web-app est pas déployée :/


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 01:14:49    

benou a écrit :


 
(mais c'est un peu de la bidouille quand même)

euh et une servlet qui va pomper un flux sur un fichier pour le recracher direct à tomcat c'est quoi alors? [:paysan]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-08-2003 à 08:35:44    

the real moins moins a écrit :

euh et une servlet qui va pomper un flux sur un fichier pour le recracher direct à tomcat c'est quoi alors? [:paysan]


[:dawa] ben comment tu crois que ca marche le truc par défaut de tomcat qui permet de lire les fichiers statiques qui sont dans la web-app ?
C'est une servlet qui fait exactement la même chose que le code que j'ai donné !
Sous Tomcat elle s'appelle DefaultServlet je crois.
 
Donc, non c'est pas de la bidouille, c'est un focntionnement complètement normal.  :kaola:


Message édité par benou le 22-08-2003 à 08:36:31

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 08:59:10    

benou a écrit :


[:dawa] ben comment tu crois que ca marche le truc par défaut de tomcat qui permet de lire les fichiers statiques qui sont dans la web-app ?
C'est une servlet qui fait exactement la même chose que le code que j'ai donné !
Sous Tomcat elle s'appelle DefaultServlet je crois.
 
Donc, non c'est pas de la bidouille, c'est un focntionnement complètement normal.  :kaola:


 
[:prosterne]

Reply

Marsh Posté le 22-08-2003 à 12:49:54    

benou a écrit :


[:dawa] ben comment tu crois que ca marche le truc par défaut de tomcat qui permet de lire les fichiers statiques qui sont dans la web-app ?
C'est une servlet qui fait exactement la même chose que le code que j'ai donné !
Sous Tomcat elle s'appelle DefaultServlet je crois.
 
Donc, non c'est pas de la bidouille, c'est un focntionnement complètement normal.  :kaola:

ha bon [:gratgrat]
'fin oui ça à du sens c'est vrai... mais quand tu imagines ça avec un apache derriere tomcat ça fait un peu ridicule :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-08-2003 à 12:56:10    

the real moins moins a écrit :

ha bon [:gratgrat]
'fin oui ça à du sens c'est vrai... mais quand tu imagines ça avec un apache derriere tomcat ça fait un peu ridicule :o


bof ... la servlet dont je parle c'est elle qui est chargée de faire que tomcat fasse aussi serveur http en standalone, donc non c'est pas ridicule ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 13:35:41    

quand y'a un apache derriere j'ai dit :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-08-2003 à 14:54:16    

the real moins moins a écrit :

quand y'a un apache derriere j'ai dit :o


bha même : dans certains qu'à t'en as besoin. Par exemple si tu veux faire du contrôle d'accès sur des fichiers statiques... [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 14:56:04    

benou a écrit :


bha même : dans certains qu'à t'en as besoin. Par exemple si tu veux faire du contrôle d'accès sur des fichiers statiques... [:spamafote]

ben oui bien sur mais ds ce cas ta servlet n'est plus aussi conne ;)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-08-2003 à 15:02:33    

the real moins moins a écrit :

ben oui bien sur mais ds ce cas ta servlet n'est plus aussi conne ;)


si si le contrôle d'accès est fait dans un filtre comme c'est souvent le cas ;)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 22-08-2003 à 15:04:37    

benou a écrit :


si si le contrôle d'accès est fait dans un filtre comme c'est souvent le cas ;)
 

très juste [:aloy]
 
tiens benou, tu as déjà utilisé xdoclet avec des servlets et autres?
c'est trop :love: de pas devoir se coltiner le web.xml à la main :love:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-08-2003 à 15:10:52    

Je tape l'incruste une minute pour saluer mon pote Ozark [:draschke]
 
ne lui en voulez pas, il a pas encore bien l'habitude d'HFR mais j'instruirai mon padawan sur les "bonnes manières" du coin :D
 
 
Signé Drasche le vieux Klingon.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 22-08-2003 à 15:13:49    

drasche a écrit :

ne lui en voulez pas

bah y'a pas de raison :wahoo:
 
 
c'est qui? [:dawa]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed