Utilisation du mécanisme RPC GWT avec mon servlet personnalisé
-
07-07-2019 - |
Question
Je dispose actuellement d'une application GWT qui utilise RequestBuilde
pour
envoyer des messages à un servlet que j'ai (en utilisant POST
et GET
) et à mon servlet
(dans doPost
et doGet
) " pauses " la demande (ceci est fait en utilisant
Servlets 3.0 spec) et l'ajoute à une file d'attente.
De plus j'ai un
Un fil de démon qui s’exécute en arrière-plan et qui "joue" la demande
quand il y a de nouvelles données.
Cela fonctionne très bien pour moi, mis à part le fait que j'envoie
cordes pour l'instant et je voudrais utiliser le mécanisme RPC pour envoyer
Objets.
Ma question est la suivante:
Si je crée ma classe myServiceImpl
qui s'étend
RemoteServiceServlet
comment dois-je gérer le doPost
et le doGet
?
Je dois suspendre ma demande pour utiliser le support asynchrone, où cela devrait-il être accompli? Je pensais peut-être appeler la méthode this.getThreadLocalRequest ()
dans ma méthode RPC dans la classe myServiceImpl
, mais je ne suis pas sûr de la sagesse que cela prendra.
Je suis ne pas
bien sûr, je comprends même comment GWT gère l'appel du côté client
de cette interface asynchrone.
Appelle-t-il par hasard doGet
, par exemple, du servlet et
s'assure qu'il appelle la méthode RPC requise?
Je suis désolé si j'ai fait des dégâts, c'est juste que je ne peux pas en trouver plus
informations techniques détaillées sur le fonctionnement exact de cette entreprise RPC.
Apprécier n'importe quelle main prêteuse
Ittai
La solution 2
Je pense que mon principal malentendu à l'époque était lié au fait que GWT RPC s'appuie sur le mécanisme de servlet (en interne). Il était donc impossible à l'époque d'utiliser ce mécanisme avec des servlets asynchrones, car GWT RPC était impossible. construit sur les servlets 2.5 (à nouveau, à l'époque).
Autres conseils
Pour comprendre RPC, oubliez POST et GET, cela fonctionne différemment (c’est-à-dire du point de vue de la programmation. En interne, il l’utilise, mais vous ne le voyez pas ou n’avez pas besoin de le comprendre, à moins de vouloir faire quelque chose d’exotique). Les documents GWT constituent un bon point de départ sur RPC: http://code.google. .com / webtoolkit / tutorials / 1.6 / RPC.html
Pour vous donner un résumé. Lorsque vous utilisez RPC, votre servlet myServiceImpl
doit implémenter les méthodes d'une interface nommée myService
, en plus de l'extension du RemoveServiceServlet
. Les méthodes obtiennent comme arguments les données que vous voulez envoyer au serveur.
À côté de l'interface myService
, vous devez créer une interface myServiceAsync
(les deux interfaces doivent se trouver dans un sous-package client). Cette interface myServiceAsync
doit contenir les mêmes méthodes que l'interface myService
sauf que chaque méthode renvoie void
et possède un dernier argument supplémentaire AsyncCallback callback
.
Dans votre client, vous devez utiliser GWT pour générer le RPC via GWT.create (voir la documentation pour plus de détails.
Pour utiliser RPC, appelez les méthodes de l'interface myServiceAsync
dans votre code client et GWT se chargera de l'envoyer au servlet. La servlet appellera ensuite la méthode correspondante avec les arguments que vous avez transmis au client. Ceci est fait asynchrone. Ainsi, le client revient directement de l'appel.
Lorsque le serveur renvoie le résultat, le rappel que vous avez passé myServiceAsync
est utilisé ou OnError
ou OnSuccess
est appelé. OnError
si la méthode côté serveur a généré une erreur, sinon OnSuccess
. OnSuccess
aura comme argument la valeur de retour de ce que vous avez renvoyé dans la méthode implémentée par votre servlet.