Je veux créer une page de Safe Safe Safe. Il est possible dans le servlet en implémentant une interface SingleThreadModel, mais je ne sais pas comment le faire dans la page JSP. P>
6 Réponses :
vous ne le faites pas. p>
JSP est essentiellement une méthode unique dans un servlet. Comme vous le savez peut-être déjà, les méthodes sont en sécurité, le sens, que deux threads invoquent la même méthode du même objet en même temps, exécuteront chacun dans sa propre pile. p>
Donc, vous n'avez pas vraiment besoin de faire un fil de sécurité JSP, car c'est déjà un problème de sécurité. P>
Si vous déclarez une variable Ce que vous devez être conscient, c'est que les objets placés dans la session ou que le contexte peut être accédé par plusieurs threads en même temps, ou pas à peu près du code de sécurité du fil. Ensuite, ce que vous devez synchroniser ou prendre soin de vous, sont A code> dans un JSP, il n'y a aucun moyen, une autre demande voit cette variable. p>
@djna: +1 Yeap, c'est ce que je voulais dire dire. JSP IT Auto n'a pas besoin de synchronisation, mais les objets que vous utilisez. Je change subtilement la rédaction pour l'insister.
Parler de la sécurité du thread-Safety avec JSP est erroné - JSP est une technologie de vue et il affiche uniquement des résultats - il ne fait aucun traitement. (Il peut em> faire le traitement, mais il ne doit pas) p>
Sécurité du thread-Safety avec des servlets est obtenue en ayant n ° de champs privés dans le servlet - l'instance de servlet en est un pour l'ensemble du récipient et que chaque demande est un nouveau fil invoquant le service Vous devez spécifier exactement ce que vous entendez par "thread-sécurité" dans votre cas - c'est-à-dire qu'attendez-vous échouer? P> (. .) code> méthode. p>
Désolé, ça ne va pas. Un JSP pourrait (pas que cela devrait) contenir Java arbitraire, qui peut ne pas être un fil de sécurité.
première la réponse courte
La réponse la plus longue n'est pas le cas. P>
Vous devez être très clair sur votre objectif ici. Vous n'avez pas fait de servlet vraiment en sécurité en utilisant un singlethreadmodel, plutôt que vous avez défini les choses afin qu'un seul fil à la fois puisse entrer dans votre servlet. Préconctionnement, vous le feriez exactement parce que le code de servlet est non strong> Safe, c'est-à-dire que si plusieurs threads devaient obtenir au code les mauvaises choses se produiraient. P> Cela implique Pour moi que vous avez quelque chose comme celui-ci dans le code de servlet: P> <%
synchronized(this){
someExistingUnsafeClass.doSomething();
};
%>
Théorétiquement, les pages JSP peuvent être indiquées comme Threadsafe via l'attribut Directive PlusVOer, l'interface SingleThreadModel a également été obsolète dans la version 2.4 de la spécification de servlet. L'interface SingleThreadModel est utilisée pour implémenter la sécurité du fil supposé en JSPS, car les classes de servlet générées bien générées implémentent le singleThreadmodel pour les JSP qui utilisent l'attribut threadsafe. La spécification elle-même décrit pourquoi l'interface est obsolète: p>
L'utilisation du singlethreadmodel
L'interface garantit qu'un seul
Le fil à un moment sera exécuté dans un
Service d'instance de servlet donné
méthode. Il est important de noter que
Cette garantie s'applique uniquement à chaque
Instance de servlet, depuis le conteneur
Peut choisir de poncer de tels objets.
Objets accessibles à plus
d'une instance de servlet à la fois,
tels que des instances de httpsession, peut
être disponible à n'importe quel moment particulier pour
plusieurs servlets, y compris ceux
qui met en œuvre SingleThreadModel. P>
Il est recommandé d'un développeur
prendre d'autres moyens pour résoudre ceux-ci
problèmes au lieu de la mise en œuvre de cette
interface, comme évitant l'utilisation
d'une variable d'instance ou
Synchronisation du bloc du code
accéder à ces ressources. le
L'interface SingleThreadModel est
obsolète dans cette version de la
Spécification. P>
blockQuote> ISthreadsafe Code> Page. Définir une valeur de FALSE, obtiendra le conteneur pour synchroniser l'accès aux objets de niveau de page (et non à la session et à l'application d'objets cachés ou d'objets de toute autre variété). De toute évidence, il est toujours de la responsabilité du développeur de veiller à ce que l'accès synchrone aux régions de code dangereuses de fil. P>
Remarque: singlethreadmodel code> a été obsolète depuis le servlet 2.4 et est enlevé dans le servlet 6.0. Cet enlèvement rend le
iSthreadsafe de JSP CODE> DIRECTIVE UN NON-OP.
Dans JSP, utilisez simplement des variables dans des scriplets et vous pouvez être confiant qu'ils sont en sécurité, car ils seront traduits en variable locale dans Service () Code>. P>.
Tu ne devrais pas faire. Cela signifie que votre conception est totalement imparfait. Vous serez tiré dans Oblivion lorsque vous le faites dans le monde des affaires réel. Voir aussi servlets et threadsafety et Comment éviter Java Code dans JSP .