Bonjour à tous.
Je code un site dans cette nouvelle technologie, et en écrivant une servlet je me suis posé une question. Est-ce les variables globales d'une servelt peuvent etre manipuler en même temps par plusieurs utilisateurs qui exécute la servelt en même temps. Je explicite, soit une variable déclarée en global, dans une servlet, 'res' qui va contenir le résultat d'une requête MySQL d'un utilisateur. Soit un utilisateur X qui va exécute cette servelet à un temps T0, donc la variable 'res' va contenir les données de X. Soit Y un autre utilisateur qui va exécute cette servlet lui aussi au temps T0, donc 'res' va maitenant contenir les données de Y. Lorsque X va vouloir afficher les informations contenu dans 'res' que va-t-il voir .? Les informations qui lui sont propres ou celles de Y .? Chaque utilisateur a-t-il sa variable 'res' qui lui ai propre .?
Merci d'avance.
Bash'
# Il va voir les infos de Y
Posté par dguihal . Évalué à 2.
Si tu veux des variables associées a ton thread, il te faut les stocker dans l'objet session que tu recupere de cette maniere :
[^] # Re: Il va voir les infos de Y
Posté par Bashful . Évalué à 1.
Ou déclare-t-on les variables Statement,ResultSet etc ... dans une servlet pour que plusieurs personnes puissent faire des requêtes en simultanées ? Dans le doPost(..) ?? Ou doit-on attribuer à chaque utilisateurs une variable de Statement et ResultSet dans sa variable session .? Ce qui est un peu contréniant.
Merci.
Bash'
[^] # Re: Il va voir les infos de Y
Posté par gc (site web personnel) . Évalué à 1.
En général une requête HTTP induit une ou plusieurs requêtes base de données et une présentation des résultats ; tu peux donc mettre soit ces variables en local dans ton doPost() si toute la requête est faite là, ou bien dans l'objet requête si par exemple la présentation est faite par un JSP à la fin, avec HttpServletRequest#setAttribute
# meuh
Posté par gc (site web personnel) . Évalué à 1.
C'est pas une nouvelle technologie.
Est-ce les variables globales d'une servelt peuvent etre manipuler en même temps par plusieurs utilisateurs qui exécute la servelt en même temps. Je explicite, soit une variable déclarée en global, dans une servlet, 'res' qui va contenir le résultat d'une requête MySQL d'un utilisateur. Soit un utilisateur X qui va exécute cette servelet à un temps T0, donc la variable 'res' va contenir les données de X. Soit Y un autre utilisateur qui va exécute cette servlet lui aussi au temps T0, donc 'res' va maitenant contenir les données de Y. Lorsque X va vouloir afficher les informations contenu dans 'res' que va-t-il voir .? Les informations qui lui sont propres ou celles de Y .? Chaque utilisateur a-t-il sa variable 'res' qui lui ai propre .?
La question ne se pose pas comme cela.
Si une même variable est accessible de plusieurs threads, alors elle ne sera pas "dupliquée" à la création des threads, mais partagée (principe des threads multiples plutôt que des processus multiples). En l'occurrence, chaque requête http arrivant dans une servlet java est traitée par un nouveau thread, et on est donc dans cette situation. Par contre évidemment, il faut assurer la cohérence des données (deux threads ne doivent pas tenter d'opérations incohérentes au même moment sur la même variable), et java résout ce problème par la synchronisation sur un mutex (java définit un mutex par instance et par classe). Pour en savoir plus, documente toi sur le mot clé « synchronized » et son utilisation dans les servlets java.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.