قبل الحديث عن سلامة موضوع Struts2 ، اسمحوا لي أولاً أن أتحدث عن ما هي سلامة الموضوع؟ هذا ما قاله مستخدم الإنترنت.
إذا كان الرمز الخاص بك في العملية التي تكون فيها ، فهناك عدة مؤشرات ترابط تعمل في نفس الوقت ، وقد تقوم هذه المواضيع بتشغيل هذا الرمز في نفس الوقت. إذا كانت نتيجة كل تشغيل هي نفس نتيجة تشغيل مؤشر ترابط واحد ، وكانت قيم المتغيرات الأخرى هي نفسها كما هو متوقع ، فهي آمنة مؤشرات الترابط.
وهذا يعني ، في عملية ، تنفذ مؤشرات ترابط متعددة في وقت واحد. أثناء تنفيذ كل مؤشر ترابط ، تكون القيم المتغيرة هي نفسها ونتائج التنفيذ هي نفسها ، وهي آمنة مؤشرات الترابط. خلاف ذلك ، الخيط غير آمن.
ثم مراجعة قضايا سلامة الخيط في servlets. نظرًا لأن Servlets هي وضع Singleton ، سيتم إنشاء مثيل واحد فقط. عندما يطلب العديد من المستخدمين servlet في نفس الوقت ، سوف يستمد Tomcat مؤشرات ترابط متعددة لتنفيذ رمز Servlet. لذلك ، Servlets آمنة مؤشرات الترابط. إذا تم استخدامه بشكل غير صحيح ، فقد تحدث المشكلات. هنا مثال:
package com.wang.servlet ؛ استيراد java.io.ioException ؛ استيراد java.io.printwriter ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservlet ؛ javax.servlet.http.httpservertrequest ؛ يمتد Class Threadsafeservlet httpservlet {اسم السلسلة الخاصة ؛ // تحديد اسم متغير خاص بفضل الفراغ العام doget (httpservletrequest طلب ، httpservletresponse) يلقي servleTexception ، ioException {response.setContentType ("text/html") ؛ // الحصول على اسم الاسم من اسم حقل الطلب = request.getParameter ("name") ؛ // دع الخيط ينام لمدة 10 ثوانٍ حاول {thread.sleep (10000) ؛ } catch (interruptedException e) {E.PrintStackTrace () ؛ } // قيمة اسم الإخراج إلى Response.getWriter (). print ("name ="+name) ؛ }}نستخدم متصفحين للوصول إلى ThreadSafeservlet؟ name = "Zhangsan" و ThreadSafeservlet؟ name = "lisi" في غضون عشر ثوان. النتائج كلاهما اسم = ليزي ، مما يعني أن هناك مشكلة في البرنامج. ستؤدي القراءة والكتابة المتزامنة متعددة الخيوط إلى الخروج من بيانات التزامن. لذلك ، عند استخدام servlets ، نحاول عدم تحديد السمات الخاصة العالمية الخاصة ، ولكن نحدد المتغيرات إلى أساليب DOGE () و DOPOST () على التوالي. بالطبع ، إذا كانت مجرد عملية قراءة ، فلن تكون هناك مشكلة. لذلك ، إذا كنت ترغب في تحديد سمات القراءة العالمية فقط في Servlets ، فمن الأفضل تحديد النوع النهائي.
يقوم الإجراء في Struts2 بإنشاء مثيل لكل طلب. لا يوجد فرق بين الفصول العادية وفئات Java العادية ، ولن تكون هناك بيانات خارج المزامنة ، لذلك فهي آمنة مؤشرات الترابط.
ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.