Je ne comprends pas Async soutien dans les servlets 3.0 API
Je viens de Java SE fond, et j'ai fait quelques servlets tutoriels et la Tête de lecture de la Première JSP & servlet. Je suis en train de lire le JavaWorld.com article sur Async soutien maintenant, mais je n'ai pas tout à fait le comprendre.
Ce Asynchrone est tout simplement sur ?
Quelle est la différence entre l'Ajax et le Servlet Asynchrone?
P. S j'ai un PHP arrière-plan avec l'ajax et je sais que le concept, mais je n'ai pas essayé avec java
Vous devez vous connecter pour publier un commentaire.
Dans le traditionnel Servlet modèle, c'est normalement le cas que 1 demande correspond à 1 fil.
Ces fils sont généralement livrés à partir d'un pool qui est géré par le conteneur de Servlet. Le conteneur de Servlet ne peut traiter de nouvelles demandes tant qu'il a de threads libres dans cette piscine. Tant que votre propre code est occupé à traiter la demande, le fil n'est pas libre.
Dans certaines situations, il peut être vaut la peine de briser ce modèle. Ce qui se passe est que la requête arrive à la Servlet via notamment une Servlet container managed fil, et votre code puis demande d'exécution asynchrone. Vous pouvez ensuite retourner à partir de la Servlet demande et le conteneur thread va être libéré.
Contraire synchrone de traitement de la demande, ce ne sera pas commettre aucune réponse et pas de fermer la connexion. Au lieu de cela, vous pouvez donner l'async contexte à un autre pool de threads, ce qui peut le ramasser, et quand un thread est libre de gérer, de service, et vous serez en mesure d'écrire la réponse.
Un exemple:
Avec le
AsyncBean
à la mise en œuvre:Dans le code ci-dessus, quelque part, peu de temps après le retour de la
AsyncServlet#doGet()
méthode, la Servlet thread devra être retourné à la piscine. Une "demande" (tâche) pour l'exécution desAsyncBean#doAsyncStuff()
ont été mis dans la file d'attente de l'EJB pool de threads pour ramasser.La réponse à POURQUOI et QUAND vous utilisez ce n'est pas que simple. Si vous voulez juste pour préserver les threads puis dans le cas ci-dessus, vous seriez en échange d'un fil à partir d'un pool de threads pour les autres (dans ce cas, la Servlet piscine vs les EJB asynchrone de la piscine) et le bénéfice net existerait pas. Vous pourriez tout aussi bien avoir donné votre Servlet pool de thread un thread supplémentaire.
Dans des scénarios plus avancés, vous pouvez, toutefois, ne plus fine de la gestion de la demande; les diviser en plusieurs tâches et d'avoir un pool de threads service de ces tâches. E. g. imaginez 100 demandes de téléchargement pour un fichier de 10 mo traitées par 10 threads round-robin donner envoie 100KB un temps pour chaque demande.
Encore une autre application est une demande qui doit attendre que les données à partir d'un système externe, et où ce système externe est capable d'envoyer un message qui peut être transmis au demandeur. I. e. une base de données d'appel n'aurait pas de sens ici, puisque vous avez besoin d'un autre thread en attente de la réponse de toute façon. Ensuite, vous pouvez modifier un thread pour une autre fois. Mais si vous avez besoin d'attendre pour le dire d'un e-mail entrant, puis un thread peut attendre de tout courrier électronique et de relais que pour tout suspendu demande.
asyncContext.complete()
sinon, le jQuery,ajax appel du client tombe dans l'erreur: