Lassen Sie mich zunächst über die Sicherheit von Threads sprechen, bevor ich über die Sicherheit von Struts2 spreche? Das sagte ein Internetnutzer.
Wenn Ihr Code im Vorgang ist, in dem Sie sich befinden, werden gleichzeitig mehrere Threads ausgeführt, und diese Threads können diesen Code gleichzeitig ausführen. Wenn das Ergebnis jedes Laufs dem Ergebnis eines einzelnen Thread-Laufs übereinstimmt und die Werte anderer Variablen übereinstimmen, ist es mit Thread-Safe.
Das heißt, in einem Prozess werden mehrere Threads gleichzeitig ausgeführt. Während der Ausführung jedes Threads sind die Variablenwerte gleich und die Ausführungsergebnisse sind gleich, was Thread-Safe ist. Ansonsten ist der Thread unsicher.
Überprüfen Sie dann die Sicherheitsprobleme von Thread -Sicherheit von Servlets. Da Servlets den Singleton -Modus sind, wird nur eine Instanz generiert. Wenn mehrere Benutzer gleichzeitig ein Servlet anfordern, leitet Tomcat mehrere Threads ab, um den Servlet -Code auszuführen. Daher sind Servlets mit Thread-Sicherheit. Bei unsachgemäßer Verwendung können Probleme auftreten. Hier ist ein Beispiel:
Paket com.wang.servlet; import java.io.ioxception; import Java.io.printwriter; import Javax.servlet.servletException; import Javax.servlet.http.httpervlet; import Javax.Servlet.http.httpletrequest; Klasse threadSafeServlet erweitert HttpServlet {private String -Name; // Ein öffentlich privaten Variablenname öffentlicher void dodget (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst servleTexception, ioException {response.setContentType ("text/html"); // Namensattribut des Namens aus dem Feld des Anfrage erhalten. // den Thread für 10 Sekunden schlafen lassen {thread.sleep (10000); } catch (interruptedException e) {e.printstacktrace (); } // Ausgabenname Wert für die Browser -Antwort.getWriter (). Print ("name ="+name); }}Wir verwenden zwei Browser, um auf ThreadSafeServlet zuzugreifen? NAME = "Zhangsan" und ThreadSafeServlet? NAME = "Lisi" innerhalb von zehn Sekunden. Die Ergebnisse sind beide name = lisi, was bedeutet, dass es ein Problem mit dem Programm gibt. Das gleichzeitige Lesen und Schreiben von Multi-Thread führt zu Daten aus der Synchronisation. Bei der Verwendung von Servlets versuchen wir daher, globale private Attribute nicht zu definieren, sondern Variablen in DOGGE () bzw. Dopost () -Methoden. Wenn es sich nur um eine Leseoperation handelt, wird es natürlich kein Problem geben. Wenn Sie daher globale schreibgeschützte Attribute in Servlets definieren möchten, definieren Sie den endgültigen Typ am besten.
Die Aktion in Struts2 erstellt für jede Anfrage eine Instanz. Es gibt keinen Unterschied zwischen Aktion und gewöhnlichen Java-Klassen, und es wird keine Daten außerhalb der Synchronisierung geben, daher ist es thread-sicher.
Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.