Avant de parler de la sécurité des fils de Struts2, permettez-moi d'abord de parler de ce qu'est la sécurité des fils? Voici ce qu'un internaute a dit.
Si votre code est dans le processus où vous vous trouvez, il y a plusieurs threads s'exécute en même temps, et ces threads peuvent exécuter ce code en même temps. Si le résultat de chaque exécution est le même que le résultat d'une seule exécution de thread et que les valeurs des autres variables sont les mêmes que prévu, elle est en file.
C'est-à-dire, dans un processus, plusieurs threads s'exécutent simultanément. Pendant l'exécution de chaque thread, les valeurs de variable sont les mêmes et les résultats d'exécution sont les mêmes, qui sont en file d'attente. Sinon, le fil est dangereux.
Ensuite, passez en revue les problèmes de sécurité du fil des servlets. Étant donné que les servlets sont en mode singleton, une seule instance sera générée. Lorsque plusieurs utilisateurs demandent un servlet en même temps, Tomcat tirera plusieurs threads pour exécuter le code de servlet. Par conséquent, les servlets sont en file d'attente. S'il est mal utilisé, des problèmes peuvent survenir. Voici un exemple:
Package com.wang.servlet; Importer java.io.ioException; import java.io.printwriter; import javax.servlet.servletException; Importer javax.servlet.http.httpservlet; import javax.servlet.http.httvletRester; Class ThreadSaSaServlet étend httpServlet {nom de chaîne privée; // définir un nom de variable privé public public void doget (httpservletRequest request, httpservletResponse réponse) lance ServletException, ioException {réponse.SetContentType ("text / html"); // Obtenez l'attribut de nom du champ de demande nom = request.getParameter ("name"); // Laisse le fil dormant pendant 10 secondes essayer {Thread.Sleep (10000); } catch (InterruptedException e) {e.printStackTrace (); } // Valeur de nom de sortie à la réponse du navigateur.getWriter (). Print ("name =" + name); }}Nous utilisons deux navigateurs pour accéder à ThreadSaSaSerServlet? Name = "Zhangsan" et ThreadSaSaServlet? Name = "Lisi" dans les dix secondes. Les résultats sont tous deux name = lisi, ce qui signifie qu'il y a un problème avec le programme. La lecture et l'écriture simultanées multiples entraîneront des données hors synchronisation. Par conséquent, lorsque vous utilisez des servlets, nous essayons de ne pas définir respectivement les attributs privés globaux, mais définissons les variables dans les méthodes DOGET () et DOPOST (). Bien sûr, si ce n'est qu'une opération de lecture, il n'y aura pas de problème. Par conséquent, si vous souhaitez définir les attributs globaux en lecture seule dans les servlets, il est préférable de définir le type final.
L'action dans Struts2 crée une instance pour chaque demande. Il n'y a pas de différence entre l'action et les classes Java ordinaires, et il n'y aura pas de données hors synchronisation, il est donc de son thread.
Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.