# Java > Dveloppement Web en Java > Servlets/JSP >  affichage dynamique et priodique d'images dans une jsp  partir d'une servlet

## perloutta

bonsoir, je dbute avec tomcat et les servlets..et voila la galre commence!!!
dans un autre post ils m'ont affirm la faisabilt de ce que je compte faire mais en pratique, du coup je me bloque  ::calim2:: 

un logiciel qui fait des captures ecran automatiquement chaque n secondes, sauvegarde ces captures dans un repertoire au choix en les attribuant comme nom date heure ou numero

ce que je veux raliser est d'afficher ces captures dans mon navigateur au fur et a mesure de leurs cration (une fois une caputre est faite -> elle s'affiche)

le problme rside:
comment dtecter q'une nouvelle capture est ajout dans le repertoire?
et dans la page jsp comment faire un appel priodique a ma servlet

j'ai trouv plusieurs tutoriaux, mais tous ciblent des images bien dfinies qui n'est pas le cas pour moi

voila mon essai:

servlet:


```

```

page jsp:


```

```


web.xml:


```

```


pouvez vous m'aider??

merci d'avance

----------


## jowo

Bonjour,

Il faut partir avec l'ide qu'on rcupre une image (ressource) avec une url fixe.

Ex:


```
<img src="http://<MyServer>/<MyContexte>/SlideServlet/lastPicture" >
```

SlideServlet n'aura plus qu' dterminer la dernire image enregistre et la renvoyer au navigateur. Attention!! Indique grce aux enttes de ne pas mettre en cache cette ressource.

----------


## perloutta

merci pour la rponse,
cot client il suffit d'utiliser:


```
<img src="http://<MyServer>/<MyContexte>/SlideServlet/lastPicture" >
```

ou bien je dois utiliser AJAX??
et cot serveur comment je peux savoir qu'une image a t ajout  mon rpertoire?

----------


## perloutta

re 
 voila mon nouvel essai de servlet contenant un thread qui veillera  controler mon repertoire d'image 
voici le code mais malheureusement n'est pas encore fonctionnel svp pouvez vous m'aider  le corriger?




```

```

merci

----------


## jowo

De nombreuses imprcisions et erreur dans ta servlet.

En plus, il me semble que l'utilisation de thread dans J2EE est fortement dconseille voire interdite.

Dans ton thread:

```
File[] list = new File("/images").listFiles();
```

 ne va probablement pas fonctionner. Pour dbuter, placer un chemin absolu et physique (vue du serveur). Ex: 

```
File[] list = new File("/usr/local/testRobot/images").listFiles();
```

La fonction anyUpdate retourn toujours true et tu incrmentes le count de 1.


```

```

Tu accdes des variables mises en concurrence sans synchronisation.



```
response.setHeader("Content-Disposition", "inline; filename=\"" + lastSlide.getName() + "\"");
```

. Tu veux afficher l'image dans le navigateur ou la tlcharger?

Utiliser un tampon pour la sortie n'est pas ncessaire, elle l'est probablement dj.

La fin du stream, en java, est indiqu par la valeur -1 et non par 0.

```

```

----------


## perloutta

Bonjour, merci pour la rponse dtaille et toutes les corrections

bon pour l'histoire du chemin absolu j'ai mis /images et j'entendais dire avec a (C:\images) parceque j'ai lu:



> // In a Windows environment with the Applicationserver running on the
>         // c: volume, the above path is exactly the same as "c:\images".
>         // In UNIX, it is just straightforward "/images".
>         // If you have stored files in the WebContent of a WAR, for example in the
>         // "/WEB-INF/images" folder, then you can retrieve the absolute path by:
>         // this.imagePath = getServletContext().getRealPath("/WEB-INF/images");


vous m'avez dit que les threads cot serveur ne sont pas conseill, existe-il alors autre alternative plus optimale per controler l'update d'un repertoire ??


pour la synchronisation je dois ajouter le mot cl synchronized?

le code ci dessus m'affiche un carreau (le contour de l'image )

voila le code:


```

```

l'exception leve:



> java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
>  at org.apache.jasper.JspC.<clinit>(JspC.java:97)
> Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory
>  at java.net.URLClassLoader$1.run(Unknown Source)
>  at java.security.AccessController.doPrivileged(Native Method)
>  at java.net.URLClassLoader.findClass(Unknown Source)
>  at java.lang.ClassLoader.loadClass(Unknown Source)
>  at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
>  at java.lang.ClassLoader.loadClass(Unknown Source)
> ...


merci bien

----------


## perloutta

Bonjour

j'ai introduit plusieurs rctification  mon code, j'ai limin le thread, je vois que c'est inutile puisque j'excute doGet  chaque appel de la servlet
et je suis persuade que je rcupre la nouvelle image (j'ai fait le test dans une classe java  part)
mais je comprends rien, pas d'erreur mais toujours un carreau avec une croix  ::calim2:: 
j'ai seulement ce message chaque refresh:



> org.apache.catalina.core.StandardWrapperValve invoke
> INFO: La servlet SlideServlet est actuellement indisponible


voila le code:


```

```


et l'appel de la servlet dans la page jsp:


```
<img src="http://localhost:8080/Slide/SlideServlet">
```


et dans le navigateur :



> http://localhost:8080/Slide/image.jsp

----------


## jowo

Essaie d'afficher directement ton image avec le navigateur avec l'URL:
http://localhost:8080/Slide/SlideServlet

Ce sera plus simple pour tester...


Supprime cette ligne:

```
response.setHeader("Content-Disposition", "inline; filename=\"" + lastSlide.getName() + "\"");
```

Cet entte est utile seulement si tu dsires que l'utilisateur puisse sauvegarder ton image avec une requte. Pourrais-tu la mettre en commentaire?

----------


## perloutta

a fonctionne pas, me retourne erreur 404, celle du test de l'existence

----------


## jowo

> a fonctionne pas, me retourne erreur 404, celle du test de l'existence



Essaie d'ajouter plus d'information sur le message du status:

```

```

----------


## perloutta

je comprends pas une chose, tant de fois l'excution du projet se bloque soit dans l'excution soit en dbogage, qui est le cas pour mnt

dans les options du run cofiguration j'ai plusieurs choix pour le run, est ce le problme provient de la?
ci joint la capture

----------


## perloutta

je comprends plus rien, si j'affiche l'heure,a fonctionne, meme dans mon mulateur android (en fait mon vrai projet est un client android )dans une autre machine et se rafraichie chaque 6 secondes
mais la problme c'est dans la servlet
quand j'inverse le test d'existence, rien ne change  :8O:  toujours le meme affichage carreau avec croix rouge!!

----------


## jowo

es-tu sr du format de ton image png ?

As-tu mis en commentaire cette ligne ?

```
response.setHeader("Content-Disposition", "inline; filename=\"" + lastSlide.getName() + "\"");
```

----------


## perloutta

oui, mais rien n'est chang toujours le meme carreau
je suppose que c'est un prob d'encodage de l'image,non?

----------


## jowo

La dfinition de ta servlet doit tre


```

```

----------


## perloutta

yessss merciiiiiii jowo mais quelle btise j'ai commis  ::oops:: 
 c'est fonctionnel, me retourne la dernire image sans  utiliser les threads (just un tri du tableau list selon la date de dernire modifcation...)
malheureusement a fonctionne seulement en local
dans l'autre machine que ce soit dans le navigateur ou dans l'mulateur j'ai pas d'image, seulement la date (comme test)  ::(:

----------


## jowo

Sur la machine distante, fait un Ctrl+F5 (force un rafraichissement) avec le navigateur...

----------


## perloutta

toujours le meme problme, a fonctionne seulement en local, pas d'image dans l'autre machine  ::(:

----------


## jowo

as-tu un message d'erreur?

Tu essaies bien avec http://MaMachineDistante:8080/Slide/SlideServlet

As-tu modif l'attribut src de la balise img de ta page jsp?



```
<img src="http://MaMachineDistante:8080/Slide/SlideServlet"/>
```

----------


## perloutta

encore merci T gnial a fonctionne avec http://xxx.xxx.x.x:8080/Slide/SlideServlet je sais pas pourquoi a ne marche pas avec l'appel de la jsp  :8O:   le hic reste dans le rafraichissement 
je dois forcer le refresh (manuellement )pour le navigateur et pour l'mulateur parce que je fait plus appel  la page jsp pour excuter


```
 <META http-equiv="Refresh" content="2">
```

 vu que j'appelle directement la servlet

merci comme meme jowo  ::kiss::

----------


## perloutta

re! 
je pense que j'ai compris pourquoi la page jsp n'a pas pu afficher l'image

jeter un coup d'oeil sur ce lien http://stackoverflow.com/questions/1...et-to-jsp-page




> You can't1 return both in the same response, since you're returning different types (an HTML page of type text/html  and an image of type image/jpeg, say).


 j'ai compris alors que le content type de la jsp doit etre "image/png" et non pas "text/html"

d'ou l'entete de ma page jsp sera:


```

```

l'appel de la jsp fonctionne nickel en local mais dans l'autre machine ne fonctionne pas  ::mouarf::

----------


## jowo

ton entte est fausse, ta page jsp retourne du html donc 

```
<%@page contentType="text/html" pageEncoding="UTF-8"%>
```

Le problme est ailleurs...

Pourrais-tu nous montrer le code HTML gnr par ta jsp.

Pour le rafraichissement, on va utiliser du javascript.

----------


## perloutta

eh bah si c'est vraiment faux pourquoi a marche en local  ::roll:: 
voila le code html gnr par la jsp


```

```

mais toujours dans l'autre machine :


> The image http://xxx.xxx.x.x:8080/Slide/image.jsp cannot be displayed, because it contains errors.

----------


## jowo

Quel navigateur utilises-tu pour qu'il affiche ce message d'erreur?



> The image http://xxx.xxx.x.x:8080/Slide/image.jsp cannot be displayed, because it contains errors.


Les navigateurs de PCs sont trs souples et ont une haute tolrance aux erreurs. Par contre certains navigateurs ne tolrent aucune erreur dans l'HTML.

----------


## perloutta

la machine ou j'ai install serveur apache tomcat est XP je test en local avec IE
 et la machine distante est ubuntu 10.04  le navigateur est Firefox mais bien sur l'important pour moi que a fonctionne dans la webView de mon mulateur Android  :;):

----------


## jowo

Ton erreur provient du fait que tu dclares avec "image/png" que la rponse est une image. Mais la rponse envoye est du code html.

Alors dans ta page JSP, tu dclares:

```

```

----------


## perloutta

a marche pas, meme y a plus d'image..  ::calim2:: 
grand merci jowo pour ton aide..
et moi je continue la galre  :;):

----------


## jowo

il ne faut baisser les bras... 

Chez moi ce code fonctionne:

extrait de web.xml

```

```

SlideServlert.java

```

```

slider.jsp

```

```

----------


## perloutta

::yaisse3::  ::yaisse3::  ::yaisse3:: 
merciiiiiii a fonctionne chez moi meme dans mon android 
j'arrive pas  raliser  ::mrgreen:: 
merci jowo INFINIMENT tu es vraiment super  ::kiss::

----------

