2010-06-24 9 views
0

Je suis en train de réaliser le comportement suivant en utilisant l'API Servlet 3.0:Servlet 3.0 inclut la page html

  • envoyer une page html inital
  • envoyer des réponses suivantes qui mettent à jour la page

Tout cela fonctionne sauf la seule façon que je pourrais envoyer la page initiale sans obtenir la réponse validée est en écrivant manuellement en utilisant le HttpResponse Writer ...

Je me demandais ering s'il y a un moyen d'utiliser quelque chose de similaire à RequestDispatcher # include avec une page html sans rencontrer de problèmes avec AsyncContext. Certaines choses que j'essayé jusqu'à présent et ne fonctionnent pas:

  • utilisation AsyncContext # expédition: autant que je l'ai lu sur Internet, il est destiné à l'envoi de la réponse finale au récipient afin de le rendre
  • use RequestDispatcher # forward: obtention de IllegalStateException en raison d'une tentative d'écriture de contenu supplémentaire dans OutputStream
  • Utilisez RequestDispatcher # include: si j'initialise AsyncContext avant d'appeler cette méthode, request.isAsyncSupported renvoie true, après avoir appelé la méthode, il renvoie false . Je lis qu'il appelle flushBuffer() et définit le commettras drapeau vrai sur la réponse

En outre, dans le Servlet 3.0 SPEC il y a quelques lignes Mentionnant que l'envoi de servlet async à servlet normale est possible, mais engagera la répondre. Je crois qu'une page html statique appartient à cette catégorie ...

Si vous avez des idées de comment une inclusion élégante peut être faite sans affecter la capacité d'envoyer encore des réponses en streaming au client, s'il vous plaît faites le moi savoir.

Merci

Répondre

0

Une solution (pas la seule): si elle est juste une page html, puis écrire la page html lui-même en html et faire des appels ajax à la serrvlet qui doit fournir les mises à jour.

+0

Merci pour la réponse. J'essaye d'employer exclusivement l'API de Servlet 3.0 pour accomplir la poussée de serveur. Donc, je peux envoyer seulement des réponses asynchrones. Ce serait un appel à la servlet et la servlet retournerait plusieurs réponses (ceci étant réalisé en ne validant pas la réponse, juste en la vidant). – fmoga

+0

Je n'ai pas encore joué avec l'API asynchrone. Mais il y a https://atmosphere.dev.java.net/ implémentation de la comète! peut-être que ça vaut le coup d'oeil – Redlab

0

utiliser des éléments statiques sur la page qui stockent les données et utilisent requestdispatcher.

Ou vous pouvez également simplement actualiser la page entière avec un tel arrangement en utilisant response.setHeader ("refresh", "5; URL = officer.html").

Je ne comprends vraiment pas votre besoin d'envoyer plusieurs demandes sans que la réponse soit validée par une servlet. essayez-vous d'interagir avec un thread de service plusieurs fois?

Questions connexes