Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1570 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Tomcat] Gestion de cache ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Tomcat] Gestion de cache ?

n°605768
Predicator
Posté le 08-01-2004 à 17:57:57  profilanswer
 

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
mood
Publicité
Posté le 08-01-2004 à 17:57:57  profilanswer
 

n°605855
benou
Posté le 08-01-2004 à 21:13:14  profilanswer
 

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 ?

n°606192
Predicator
Posté le 09-01-2004 à 09:47:33  profilanswer
 

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é...

n°606231
benou
Posté le 09-01-2004 à 10:33:24  profilanswer
 

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
n°606275
Predicator
Posté le 09-01-2004 à 11:06:32  profilanswer
 

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
n°606299
Predicator
Posté le 09-01-2004 à 11:35:35  profilanswer
 

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
n°2007698
Funky Max
And then, I woke up.
Posté le 07-07-2010 à 11:58:29  profilanswer
 

: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 !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Tomcat] Gestion de cache ?

 

Sujets relatifs
Creer Systeme NEWS - HTML - avec gestion admin ???Projet de gestion hasardeuse de frame (vrai défi inside)
[java/algo] Concours - implémenter une itf simple de gestion d'agenda.Optimisation de gestion de fichier
recherche d'idée de prti pour le bts info/gestion[TOMCAT] acces zone d'admin
[PHP] Comment mettre une page dans le cache suite à un POST ?script dans HTML + problem de cache avec ISA (un petit peut urgent)
Un bug de fou sous tomcat?Gestion du flux d'entrée en C
Plus de sujets relatifs à : [Tomcat] Gestion de cache ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR