2009-10-24 5 views
0

Je dois écrire une servlet qui retournera à l'utilisateur un csv qui contient des statistiques. Je sais comment retourner juste le fichier, mais comment puis-je le faire en montrant une barre de progression du processus de création de fichier? J'ai des difficultés à comprendre comment puis-je faire quelque chose pour montrer la progression de la création du fichier, tout en créant le fichier en même temps - si je crée une servlet qui retournera le pourcentage d'achèvement, comment peut-il garder le le même fichier qu'il crée en retournant une réponse toutes les x secondes au navigateur pour montrer la progression.Java servlet EE pour créer un fichier et montrer la progression tout en le créant

Répondre

2

Il existe deux approches fondamentalement différentes. L'un est la livraison asynchrone vraie en utilisant une approche telle que Comet. Vous pouvez voir quelques descriptions dans des articles tels que this. J'utiliserais cette approche où les données que vous fournissez sont naturellement incrémentales - par exemple les mesures en direct de l'instrumentation. Certains serveurs d'applications Java ont une bonne intégration entre leurs systèmes de messagerie JMS et la comète du navigateur.

L'autre approche est que vous avez un mécanisme d'interrogation. Le JavaScript dans le navigateur effectue des appels périodiques au serveur pour obtenir le statut (et peut-être le prochain morceau de données). L'avantage de cette approche est que vous utilisez un modèle de programmation très standard, moins de nouvelles choses à apprendre. Dans de nombreux cas, par exemple, «y a-t-il de nouvelles réponses à la question sur la pile de débordement sur laquelle je travaille? c'est tout à fait suffisant.

Votre défi peut être de déterminer toute information d'avancement utile. Comment sauriez-vous jusqu'où, à travers la génération du fichier CSV, vous êtes?

Si vous lancez une demande de longue durée d'une servlet, il est fort probable que vous fassiez effectiver un thread de travail pour faire ce travail. (Peut-être en utilisant JMS, peut-être en utilisant des travailleurs asynch) et immédiatement retourner une réponse au navigateur en disant "Compris, je pense". Cela garantit que vous n'êtes pas vulnérable aux délais d'attente de réponse Http. Le problème est alors comment déterminer la progression actuelle. À moins que le «travailleur» qui fait le travail ait un moyen de communiquer son progrès partiel, vous n'avez rien d'utile à dire. Ce genre de chose a tendance à être très spécifique à l'application. Certaines tâches ont très naturellement des points de progrès (pensez à imprimer nous savons combien de pages faire et combien d'imprimées) d'autres ne le font pas (pensez à déterminer si un nombre est premier - oui ou non, aucune étape intermédiaire utile peut-être)

Questions connexes