7
votes

Comment créer une page de filetage Safe Safe JSP

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.


1 commentaires

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 .


6 Réponses :


0
votes

vous ne le faites pas.

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.

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é.

Si vous déclarez une variable A dans un JSP, il n'y a aucun moyen, une autre demande voit cette 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 ces objets! , et non la page JSP-elle-même.


1 commentaires

@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.



1
votes

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 faire le traitement, mais il ne doit pas)

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 (. .) méthode.

Vous devez spécifier exactement ce que vous entendez par "thread-sécurité" dans votre cas - c'est-à-dire qu'attendez-vous échouer?


1 commentaires

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é.



3
votes

en n'ayant aucune information d'état dans votre page JSP . (Aucune variables d'instance, qui peut modifier les différentes demandes). Si vous n'avez pas d'état dans votre JSP ou votre servlet, ils sont threadsafe


0 commentaires

5
votes

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();

  };
%>


0 commentaires

9
votes

Théorétiquement, les pages JSP peuvent être indiquées comme Threadsafe via l'attribut Directive ISthreadsafe 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.

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:

srv.2.2.1 Remarque sur le modèle de thread unique

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.

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.


1 commentaires

Remarque: singlethreadmodel 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 DIRECTIVE UN NON-OP.



1
votes

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 () . .


0 commentaires