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

Servlets/JSP Java Discussion :

problème d'affichage de la jsp lorsque le traitement est long dans la servlet


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 72
    Points : 37
    Points
    37
    Par défaut problème d'affichage de la jsp lorsque le traitement est long dans la servlet
    salut les codeurs
    j'ai vraiment un gros problème très agaçant. je développe une appli web en java et lorsque dans une servlet j'exécute un traitement qui met long, soit la jsp ne s'affiche pas correctement (sans les styles), soit elle ne s'affiche pas du tout (une page toute blanche). je suis obligé d'actualiser plusieurs fois pour qu'elle s'affiche alors normalement. or à repéter cette opération à plusieurs reprises, apache tomcat affiche un message d'erreur disant qu'il n'ya plus de mémoire. et après ça, l'application ne marche plus (à chaque page que je lance l'erreur s'affiche). le traitement que je fais dans la jsp et qui met du temps est une requete dans la base de donnée (sous sqlserver 2000) qui retourne un milliers d'enregistrement. à partir de la servlet, je passe le recordset retourné à la jsp pour affichage. c'est là que le problème que j'ai décrit plus haut intervient.
    quelqu'un peut-il m'aider?
    merci d'avance

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 511
    Points
    511
    Par défaut
    Bonjour,
    Pour les problèmes de plantage à la fin, ça fait penser qu'il y a une fuite mémoire, est-ce que tu ne stocke pas des résultat dans la session au lieu de la request?
    sinon, si la requête est trop grosse, il faudrait essayer de la paginer ("LIMIT" dans les requêtes)

    Enfin pour la question initiale, il y a p-e des problèmes de time-out à tuner sur le serveur, je ne peux pas t'aider là dessus.
    (notamment si tu perd la mise en forme, c'est le CSS qui n'est pas mis en cache, il faut un durée de validité plus longue dans le header )

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    Salut,

    si un traitement long (disons > 30 sec) est déclenché lors d'une requête, il vaut mieux découpler traitement et renvoi de la réponse finale pour éviter de donner l'impression que l'appli ne répond plus.

    Il y a au moins deux manières de faire :

    - une manière «à la mode» en utilisant AJAX. En gros, la requête retourne immédiatement une page d'information qui indique que le traitement est en progression, et contient (par exemple dans l'attribut «onload» de l'élément «body») un appel à une fonction JavaScript qui va déclencher le véritable traitement de manière asynchrone. Lorsque le traitement est terminé, une fonction de rappel (toujours en Javascript) est appellée pour rafraîchir la page avec les résultats. Je ne suis pas un expert en AJAX, mais ce type de choses est largement faisable avec une boîte à outils de type DWR (http://getahead.org/dwr)

    - une manière plus rustique qui repose sur l'utilisation de la balise META pour recharger la page périodiquement. Toujours en gros : la première requête déclenche le traitement dans un Thread et renvoie une page disant que le traitement est en cours. L'en-tête de cette page contient une balise META qui va provoquer le rechargement d'une autre page au bout d'un certain nombre de secondes (cf. par ex. : http://webdesign.about.com/od/metata.../aa080300a.htm). L'autre page en question peut pointer sur une Servlet qui va vérifier si la tâche en cours d'exécution s'est terminée. Si oui, la page de résultats est renvoyée, sinon, c'est une nouvelle fois la page disant que le traitement est en cours et contenant la balise META de rechargement qui est renvoyée.

    OK, ça nécessite un peu plus d'ingénierie, mais le résultat (applications plus robustes et plus «user-friendly») en vaut la chandelle.

    Mes 2€ centimes.

    MarkH

  4. #4
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Les solutions de MarkH sont correctes, meme si pour la deuxieme solution j'emets des reserves sur le fait de gérer la création d'un thread manuellement (déconseillé dans les spec J2EE).

    Dans tous les cas, une requete ramenant 2000 résultats ne devrait pas être très longue, a moins quelle soit mal faite (une tripoté de jointure...).

    Est ce que les objets que tu remontent sont complexes, et si oui, ou les stockes-tu (request, session)?
    Etre c'est etre relatif.

Discussions similaires

  1. Problème d'affichage de page JSP suivant l'architecture MVC
    Par king_soft dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 20/01/2012, 14h18
  2. Problème d'affichage tableau en JSP
    Par marouene_ dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 10/03/2011, 21h10
  3. Problème d'affichage de page .jsp
    Par younesgates dans le forum JSF
    Réponses: 4
    Dernier message: 04/01/2011, 13h28
  4. Réponses: 2
    Dernier message: 17/11/2008, 13h43
  5. Problème d'affichage d'une JSP et rafraichissement d'une page
    Par mega_info dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 05/10/2007, 15h37

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