[Tomcat] Gestion de cache ?

Gestion de cache ? [Tomcat] - Java - Programmation

Marsh Posté le 08-01-2004 à 17:57:57    

Bonjour (Bonsoir :))
 
J'ai un problème de lecture de fichier distant...
rapidement voilà comment ça se passe
 
L'applet fait une requête à une servlet
La servlet supprime le fichier s'il existe
La servlet écrit les données dans le fichier
La servlet envoie le nom de fichier à l'applet
L'applet ouvre le fichier
L'applet visualise le contenu dans un JEditorPane...
 
voilà 2 portions de code :
 

Code :
  1. // écriture par la servlet dans un fichier
  2. FileWriter outputFile = new FileWriter(filename);
  3. outputFile.write(html);
  4. outputFile.close();
  5. String wfname = Variables.temp_web + session.getId() + ".html";
  6. webname = new URL(wfname);
  7. // ...
  8. //envoie des données vers l'applet
  9. Object[] resul = new Object[2];
  10. resul[0] = message;
  11. resul[1] = webname;
  12. ObjectOutputStream outputToApplet = new ObjectOutputStream(response.getOutputStream());
  13. outputToApplet.writeObject(resul);
  14. outputToApplet.flush();
  15. outputToApplet.close();


 

Code :
  1. // création du JEditorPane
  2. zoneAffichage = new JEditorPane();
  3. zoneAffichage.setEditable(false);
  4. zoneAffichage.setContentType("text/html; charset=ISO-8859-1" );
  5. zoneAffichage.addHyperlinkListener(this);
  6. if (page != null) {
  7. // la page web a bien été générée
  8. InputStreamReader reader = new InputStreamReader(page.openStream());
  9. if (DEBUG) {
  10. char[] buf = new char[2000];
  11. reader.read(buf, 0, 2000);
  12. for (int i = 0; i < 2000; i++) {
  13.  System.out.print(buf[i]);
  14. }
  15. reader = new InputStreamReader(page.openStream());
  16. }
  17. HTMLDocument doc = new HTMLDocument();
  18. zoneAffichage.read(reader, doc);
  19. } else {
  20. zoneAffichage.setText(DEFAULT_TEXT);
  21. zoneAffichage.setPreferredSize(new Dimension(800, 600));
  22. }


 
le truc, c'est que dans le morceau DEBUG, l'affichage des données lues dans le fichier ne correspond pas aux données qu'il y a réellement dans le fichier... J'ai donc mis un maximum de gestion pour empêcher la lecture précoce (attendre que le fichier soit bien supprimé avant de réécrire de nouvelles données dedans), mais ça ne change rien. Je pense donc à une gestion de cache par Tomcat. Un truc du genre : Si les requêtes sont très rapprochées, Tomcat ne va pas aller lire le fichier HTML, mais envoyer directement celui qu'il a en cache...
 
Seulement voilà, j'ai pas trouvé d'information concernant cette fonctionnalité, donc si quelqu'un en avait, ce serait super sympa de me rediriger, merci :hello:


Message édité par Predicator le 08-01-2004 à 18:02:16
Reply

Marsh Posté le 08-01-2004 à 17:57:57   

Reply

Marsh Posté le 08-01-2004 à 21:13:14    

Non, je ne crois pas que la DefaultServlet fasse de cache...
 
Tu n'as pas de serveur frontal (apache ?), c'est directement Tomcat qui te retourne les fichier statiques ?
 
Tu n'as pas mappé une servlet particulière sur l'extension html ? (la servlet jsp par exemple)
 
Autre solution : peut être que c'est ton browser web qui fait du cache ... enfin là je suis pas sûr de moi, mais ca me parait pas impossible ... Est ce que tu as vérifié si une requête était réellement faite et que la réponse HTTP était 200 ?

Reply

Marsh Posté le 09-01-2004 à 09:47:33    

benou a écrit :

Non, je ne crois pas que la DefaultServlet fasse de cache...
 
Tu n'as pas de serveur frontal (apache ?), c'est directement Tomcat qui te retourne les fichier statiques ?
 
Tu n'as pas mappé une servlet particulière sur l'extension html ? (la servlet jsp par exemple)
 
Autre solution : peut être que c'est ton browser web qui fait du cache ... enfin là je suis pas sûr de moi, mais ca me parait pas impossible ... Est ce que tu as vérifié si une requête était réellement faite et que la réponse HTTP était 200 ?  


 
non je n'ai pas de serveur apache, car je n'ai que 2 fichiers html en statique et ce que Apache embarque me suffit amplement.
Je n'ai rien mappé (c'est un tomcat de base, sans configuration particulière autre que le contexte)
Quant au browser, c'est ce que je me suis dit, mais vu que ça passe par Java, le browser ne doit pas entrer en compte si ?
Quand on demande à JEditorPane d'ouvrir une page HTML, il ne doit pas passer par le navigateur, sinon c'est pas réutilisable dans une application :)
 
je vais essayer de voir si la requete a effectivement été faite, mais je ne vois pas pourquoi elle ne l'aurait pas été...

Reply

Marsh Posté le 09-01-2004 à 10:33:24    

quand t'es dans une applet, les demandes que tu fais passent par le browser => quand tu demandes la récupération d'une url, l'applet demande au browser de la récupérer => le browser pourrait très bien faire du cache.
 
Mais c'est juste une idée, hein ! je suis pas sûr que ce soit ca ...


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

Marsh Posté le 09-01-2004 à 11:06:32    

j'ai désactivé le cache du navigateur, et ça foire toujours :cry:  
 
si les données sont bien mises à jour lors de la lecture
si tomcat ne gère aucun cache
si le navigateur ne rentre pas en compte
et vu que java ne gère pas non plus de cache
 
j'aimerais bien savoir d'où sort ce %£$@# de bug !!! :cry:
 
la solution serait de changer de fichier à chaque fois, mais comment être sûr que ce fichier est unique, et comment le supprimer une fois qu'il n'est plus utilisé ?
pour l'instant je donne le nom de la session au fichier HTML...


Message édité par Predicator le 09-01-2004 à 11:08:01
Reply

Marsh Posté le 09-01-2004 à 11:35:35    

j'ai résolu le problème en ajoutant un compteur au nom de session pour générer le nom de fichier, et à chaque requête, je supprime l'ancien... crade, mais efficace :hello:  
 
mais il serait intéressant de trouver d'où vient ce problème.
 
Autre problème aussi gênant : Avec Tomcat 4.1.29 sur un Linux RedHat 8.1, la page HTML affichée est devenue immonde : c'est de l'Unicode affichée en Latin1. Pourtant dans le header de la page, il est bien précisé d'utiliser ISO-8859-1 :
 

Code :
  1. <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
  2. <meta http-equiv="content-language" content="fr"/>


 
pourtant le code récupéré est de l'Unicode. Je sais qu'il y a un bug dans la version 4.1.29 qui ajoute automatiquement le charset, mais je n'ai pas trouvé comment désactiver ça...
 
Précision : ça le fait sur une page accédée par un navigateur, mais aussi par le JEditorPane... donc à priori ça vient du serveur, pas du navigateur :)


Message édité par Predicator le 09-01-2004 à 11:37:01
Reply

Marsh Posté le 07-07-2010 à 11:58:29    

:hello:
 
Gros déterrage de topic pour une question relative au cache de Tomcat. Est-il possible d'interdire la mise en cache complète ? ie: pas seulement d'une page html avec le no-cache en META, mais également des feuilles de style et des images etc...
 
Merci !

Reply

Sujets relatifs:

Leave a Replay

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