ก่อนที่จะพูดถึงความปลอดภัยของด้ายของ Struts2 ให้ฉันพูดก่อนว่าจะเป็นเรื่องความปลอดภัยของเธรดอะไร? นี่คือสิ่งที่ชาวเน็ตพูด
หากรหัสของคุณอยู่ในกระบวนการที่คุณอยู่มีหลายเธรดที่ทำงานในเวลาเดียวกันและเธรดเหล่านี้อาจเรียกใช้รหัสนี้ในเวลาเดียวกัน หากผลลัพธ์ของการรันแต่ละครั้งเหมือนกับผลลัพธ์ของการรันเธรดเดียวและค่าของตัวแปรอื่น ๆ จะเหมือนกับที่คาดไว้จะเป็นเธรดที่ปลอดภัย
กล่าวคือในกระบวนการหลายเธรดดำเนินการพร้อมกัน ในระหว่างการดำเนินการของแต่ละเธรดค่าตัวแปรจะเหมือนกันและผลลัพธ์การดำเนินการจะเหมือนกันซึ่งเป็นเธรดที่ปลอดภัย มิฉะนั้นเธรดจะไม่ปลอดภัย
จากนั้นตรวจสอบปัญหาความปลอดภัยของเธรดของ Servlets เนื่องจาก Servlets เป็นโหมด Singleton จะมีการสร้างอินสแตนซ์เพียงครั้งเดียวเท่านั้น เมื่อผู้ใช้หลายคนขอ servlet ในเวลาเดียวกัน Tomcat จะได้รับหลายเธรดเพื่อเรียกใช้รหัส servlet ดังนั้น Servlets จึงปลอดภัย หากใช้อย่างไม่เหมาะสมปัญหาอาจเกิดขึ้น นี่คือตัวอย่าง:
แพ็คเกจ com.wang.servlet; นำเข้า java.io.ioException; นำเข้า java.io.printwriter; นำเข้า Javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า Javax.servlet.http.httpservlet javax.servlet.http.httpservletResponse; คลาสสาธารณะ Threadsafeservlet ขยาย httpservlet {ชื่อสตริงส่วนตัว; // กำหนดชื่อตัวแปรส่วนตัวสาธารณะโมฆะ public doget (httpservletRequest คำขอ httpservleSponse) // รับแอตทริบิวต์ชื่อจากชื่อฟิลด์คำขอ = request.getParameter ("ชื่อ"); // ให้เธรดนอนหลับเป็นเวลา 10 วินาทีลอง {thread.sleep (10,000); } catch (interruptedException e) {e.printStackTrace (); } // ค่าชื่อเอาต์พุตไปยังเบราว์เซอร์ response.getWriter (). พิมพ์ ("name ="+ชื่อ); -เราใช้เบราว์เซอร์สองตัวเพื่อเข้าถึง Threadsafeservlet? name = "Zhangsan" และ ThreadSafeservlet? name = "Lisi" ภายในสิบวินาที ผลลัพธ์เป็นทั้งชื่อ = lisi ซึ่งหมายความว่ามีปัญหากับโปรแกรม การอ่านและการเขียนพร้อมกันหลายเธรดจะนำไปสู่ข้อมูลจากการซิงโครไนซ์ ดังนั้นเมื่อใช้ Servlets เราพยายามที่จะไม่กำหนดคุณลักษณะส่วนตัวทั่วโลก แต่กำหนดตัวแปรเป็นวิธี DOGET () และ DOPOST () ตามลำดับ แน่นอนถ้ามันเป็นเพียงการดำเนินการอ่านจะไม่มีปัญหา ดังนั้นหากคุณต้องการกำหนดแอตทริบิวต์แบบอ่านอย่างเดียวทั่วโลกใน Servlets จะเป็นการดีที่สุดที่จะกำหนดประเภทสุดท้าย
การดำเนินการใน struts2 สร้างอินสแตนซ์สำหรับแต่ละคำขอ ไม่มีความแตกต่างระหว่างคลาสการกระทำและคลาส Java ทั่วไปและจะไม่มีข้อมูลจากการซิงค์ดังนั้นจึงเป็นแบบเธรดที่ปลอดภัย
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับการเรียนรู้ของทุกคน