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 :

JSP et loader


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 30
    Points
    30
    Par défaut JSP et loader
    Bonjour,

    Je suis sur un projet Web en Java et j'ai un petit souci.

    J'ai une page JSP qui execute une requête sur le serveur afin de collecter des fichiers et renvoyer une archive au client.
    Le soucis est que l'archive à créer fait 1.3Go... Vous comprendrez alors que le chargement de la page peut être très long.

    Malheureusement je n'ai pas d'alternative quant à la taille de l'archive à générer.

    Je viens donc chercher de l'aide afin de savoir comment facilement indiquer à l'utilisateur que l'archive se construit ? (via un loader en ajax par exemple)
    D'autre part, avec un chargement de cette taille, est-ce que je risque un timeout ?

    Pour info je suis sous Netbeans 6.8, au cas où j'aurais loupé un outil pour gérer ça.

    Je suis preneur de tout partage d'expérience en la matière !

    Merci

  2. #2
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Est-ce que tu connais la taille de l'archive avant de commencer à envoyé au client ?
    Si oui tu peux alors préciser le contenr-length au niveau de header de la response comme ça, le client verra la progression du téléchargement.

    Comme les données sont envoyées en continue au poste client je ne pense pas que tu aura un timeout.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 30
    Points
    30
    Par défaut
    Merci pour ta réponse link256 !

    En fait le fichier est d'abord créé sur le serveur puis envoyer au client. Ce qui pose problème est bien la création du fichier, pas son envoi. Pour être plus précis la création de l'archive se fait par le parcours d'une base de données. Chaque enregistrement contient du texte et des médias (images, vidéos, son, etc...). Voilà pourquoi ça consomme du temps sachant qu'on est à environ 1.3Go de données.

    L'idée serait de lancer un loader lorsque l'utilisateur débute le processus, pour le faire patienter jusqu'au moment où le fichier est envoyé.

    Après j'ai peut être mal interprété ta réponse.

  4. #4
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Il peut y avoir un timeout du navigateur lors de la création du fichier.

    Un autre solution si ton framework le permet et de renvoyer le status HTTP 202 en indiquant l'URL où l'utilisateur pourra connaître l'état d'avancement de la création du fichier et le récupérer pa la suite.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 30
    Points
    30
    Par défaut
    Je pense comprendre ce que tu veux dire jowo. Merci d'ailleurs.

    Seulement comment faire pour que le renvoie du statu HTTP 202 se fasse pendant que la construction du fichier se fait ? Et comment je peux montrer l'état d'avance de sa construction ?

    La construction du fichier se fait au travers d'une classe appelée par la page JSP. Dans la fonction appelée il y a juste une boucle qui parcours les enregistrements et créer le fichier.

    Bien sur je ne demande pas une solution clé en main, mais des pistes "techniques" seraient la bienvenue.

  6. #6
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Ma solution est assez lourde. C'est pour cette raison que je conseille un framework s'il existe.

    Ta page JSP envoi un demande de création à un "Job Controller". Ce dernier mémorise la demande et renvoi un ticket.

    La page JSP retourne immédiatement avec un status 202, la valeur du ticket et l'URL où l'utilisateur pourra se connecter pour connaître l'avancement de sa demande.

    Pendant ce temps, le "Job Controller" crée la ressource demandée et la mémorise.

    L'utilisateur à l'aide de son ticket peut demander l'état de progression du job et quand le job est terminé, pourra télécharger la ressource.

    C'est une vraie usine à gaz, je l'admet .

  7. #7
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Tu peux faire plus simple avec de l'AJAX.

    je m'explique, quand l'utilisateur demande son rapport, tu lances un traitement de création du fichier.

    Tu peux alors faire un appel Ajax toutes les X minutes vers ton application afin de savoir si la demande de création du fichier est en court ou terminer.

    Une fois que le fichier est fini de crée tu peux alors afficher un joli bouton pour que l'utilisateur télécharge le fichier.

    en ce qui concerne le X minute(s)/seconde(s) il faut que tu fasse des tests pour voir combien de temps est nécessaire pour créer le fichier, si c'est de l'ordre de 5 minutes par exemple tu peux faire un appel ajax toutes les 30 sec.

    l'application ne sera pas surchargée par les demande et l'utilisateur n'attendra pas trop longtemps une fois que le fichier sera créé.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 30
    Points
    30
    Par défaut
    jowo, je te l'accorde ta solution me semble un peu violente pour mon problème. Mais merci !

    link256, ta solution ressemble parfaitement à ce que j'avais en tête. Par contre un problème reste à résoudre. Je ne vois comment je peux vérifier l'avance de la création du fichier avec Ajax ? Il n'y aura en effet aucun problème pour lancer l'exécution d'un script mais comment checker les infos du serveur.

    Sinon là je pense à une chose, je ne sais pas si c'est ce genre de chose à laquelle tu pensais :
    • Je lance le script qui en même temps initialise un booleen
    • Le script va vérifier toutes les X minutes l'état du booleen
    • Ma fonction (coté serveur) réalisant l'archive modifie le booleen lorsque la création est terminée
    • Le script sort de sa boucle une fois le booleen à vrai


    Merci pour votre aide !

  9. #9
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    à partir de l'Ajax tu peux appeler une servlet par exemple qui va contrôler l'état d'avancement.

    par exemple pendant que tu créé le fichier tu le préfixes par un ~.
    et quand le fichier est fini tu retire le ~
    La servlet aura juste à vérifier l'état du fichier.


    La servlet peux te renvoyer du texte ou un flux xml en réponse à ta demande Ajax.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 30
    Points
    30
    Par défaut
    Merci pour ces pistes link256.

    Je suis pas spécialement habile avec les servlets (en réalité j'apporte une modification sur un projet existant). Je vais tenter d'aborder ta proposition comme je peux et je te tiens au courant.

    Si jamais tu as des liens à me proposer pour créer ce genre de servlets je suis open.

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Il y a plus simple encore...
    Dans la page contenant le bouton ou le lien pour faire le téléchargement, tu places un <div style="position:absolute;display:none ..."> avec ton message d'attente et/ou une image gif animée pour faire patienter et tu utilises un tout petit code javascript pour l'activer à la soumission (au minimum, tu passes display="block").
    Le principe de base étant que tant que le serveur n'amorce pas la réponse, la page ne change pas.
    L'inconvénient de cette solution simpliste étant que pendant le téléchargement, en fonction de la manière que tu utiliseras, il y aura un écran vide...

    A toi de voir
    A+

  12. #12
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    @OButterlin

    L'autre inconvénient est que si la réponse se fait attendre et que le serveur n'envoie pas de données (heartbeat), le navigateur pourrait lever un timeout (après un certain temp ).

  13. #13
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Le timeout est défini sur le serveur que je sache, pas le browser... me trompe-je (en français dans le texte ) ?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 30
    Points
    30
    Par défaut
    Comme jowo le remarque le souci vient du timeout.

    Et je ne suis pas sur de pouvoir modifier la configuration du serveur. Enfin si vous savez comment modifier ça je prends quand même ! Ça pourrait éviter d'avoir à développer une servlet supplémentaire.

  15. #15
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Quel est le serveur cible ?

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 30
    Points
    30
    Par défaut
    Je ne sais pas à dire vrai. Un tomcat bien sur, mais je sais pas quelle version.

    C'est dans une université alors c'est délicat...

  17. #17
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Dans le fichier server.xml, tu vas trouver une ligne de ce type, la réponse saute aux yeux
    <Connector port="8080" maxHttpHeaderSize="8192"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" />

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 30
    Points
    30
    Par défaut
    Okay j'ai trouvé ça sur mon serveur local, je vais voir avec la DSI s'ils peuvent changer ça.

    Par contre il y a une durée maximum ? C'est milliseconde ?

    Merci !

  19. #19
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Oui, c'est en millisecondes.
    Une durée max ? Je ne pense pas...

Discussions similaires

  1. Loader en GIF se fige pendant chargement JSP
    Par diabli73 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 08/11/2013, 19h14
  2. [XSLT][JSP] solution technique pour cas typique
    Par Alix_10 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/09/2006, 13h09
  3. Erreur lors de l'execution d'un script jsp
    Par tuxor dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 06/08/2004, 12h35
  4. [JSP/Servlet] Outils pour developper?
    Par BenoitM dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/05/2004, 11h03
  5. problème JSP avec JBuilder et Weblogic 7
    Par viny dans le forum JBuilder
    Réponses: 2
    Dernier message: 24/04/2003, 08h07

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