1. الوصول إلى سمات الطلب/الجلسة/التطبيق أو إضافتها
نطاق السلسلة العامة () يطرح الاستثناء {
ActionContext ctx = ActionContext.getContext();
ctx.getApplication().put("app", "نطاق التطبيق");// ضع التطبيق في ServletContext
ctx.getSession().put("ses", "session range");// ضع ses في الجلسة
ctx.put("req", "نطاق الطلب");// ضع الطلب في الطلب
إرجاع "النطاق" ؛
}
جسب:
<الجسم>
${applicationScope.app} <br>
${sessionScope.ses<br>
${requestScope.req<br>
</الجسم>
2. الحصول على كائن HttpServletRequest / HttpSession / ServletContext / HttpServletResponse
الطريقة الأولى، الحصول عليها مباشرة من خلال فئة ServletActionContext:
سلسلة rsa () العامة تطرح استثناءً {
HttpServletRequest request = ServletActionContext.getRequest();
ServletContext servletContext = ServletActionContext.getServletContext();
طلب.getSession ()
استجابة HttpServletResponse = ServletActionContext.getResponse();
إرجاع "النطاق" ؛
}
الطريقة الثانية، تنفيذ الواجهة المحددة وإدخالها عند تشغيل إطار عمل الدعامات:
الطبقة العامة HelloWorldAction تنفذ ServletRequestAware، ServletResponseAware، ServletContextAware{
طلب HttpServletRequest الخاص؛
ServletContext الخاص servletContext;
استجابة HttpServletResponse الخاصة؛
public void setServletRequest(HttpServletRequest req) {
this.request=req;
}
مجموعة الفراغ العام ServletResponse (HttpServletResponse res) {
this.response=res;
}
مجموعة الفراغ العامةServletContext(ServletContext ser) {
this.servletContext=ser;
}
}
3. تحميل الملف
الخطوة الأولى: قم بإضافة commons-fileupload-1.2.1.jar وcommons-io-1.3.2.jar ضمن WEB-INF/lib. يمكن تنزيل كلا الملفين من http://commons.Apache.org/.
الخطوة 2: قم بتعيين نوع enctype لجدول النموذج على: "متعدد الأجزاء/بيانات النموذج"، كما يلي:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action"method="post">
<نوع الإدخال = "ملف" اسم = "uploadImage">
</النموذج>
الخطوة 3: أضف السمات التالية في فئة الإجراء. الجزء الأحمر من السمة يتوافق مع اسم حقل الملف في النموذج:
الطبقة العامة HelloWorldAction {
Private File uploadImage;// احصل على الملف الذي تم تحميله
سلسلة خاصة uploadImageContentType;//احصل على نوع الملف
سلسلة خاصة uploadImageFileName;// احصل على اسم الملف
// تم حذف أساليب getter/setter للخصائص هنا.
تحميل السلسلة العامة () يطرح استثناءً {
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
ملف الملف = ملف جديد (المسار الحقيقي)؛
if(!file.exists()) file.mkdirs();
FileUtils.copyFile(uploadImage, new File(file, uploadImageFileName));
إرجاع "النجاح" ؛
}
}
4. تحميل ملفات متعددة
الخطوة الأولى: قم بإضافة commons-fileupload-1.2.1.jar وcommons-io-1.3.2.jar ضمن WEB-INF/lib. يمكن تنزيل كلا الملفين من http://commons.Apache.org/.
الخطوة 2: قم بتعيين نوع enctype لجدول النموذج على: "متعدد الأجزاء/بيانات النموذج"، كما يلي:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action"method="post">
<نوع الإدخال = "ملف" اسم = "uploadImages">
<نوع الإدخال = "ملف" اسم = "uploadImages">
</النموذج>
الخطوة 3: أضف السمات التالية في فئة الإجراء. الجزء الأحمر من السمة يتوافق مع اسم حقل الملف في النموذج:
الطبقة العامة HelloWorldAction {
ملف خاص[] uploadImages;// احصل على الملف الذي تم تحميله
سلسلة خاصة [] uploadImagesContentType;// احصل على نوع الملف
سلسلة خاصة[] uploadImagesFileName;// احصل على اسم الملف
// تم حذف أساليب getter/setter للخصائص هنا.
تحميل السلسلة العامة () يطرح استثناءً {
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
ملف الملف = ملف جديد (المسار الحقيقي)؛
if(!file.exists()) file.mkdirs();
for(int i=0 ;i<uploadImages.length; i++){ File uploadImage = uploadImages[i];
FileUtils.copyFile(uploadImage, new File(file, uploadImagesFileName[i]));
}
إرجاع "النجاح" ؛
}}
5. اعتراضية مخصصة
لتخصيص المعترض، تحتاج إلى تنفيذ واجهة com.opensymphony.xwork2.interceptor.Interceptor:
فئة عامة PermissionInterceptor تنفذ Interceptor {
serialVersionUID الطويل النهائي الثابت الخاص = -5178310397732210602L؛
تدمير الفراغ العام () {
}
الحرف الفراغي العام () {
}
اعتراض السلسلة العامة (استدعاء ActionInvocation) يطرح استثناء {
System.out.println("أدخل المعترض");
إذا (المستخدم موجود في الجلسة) {
نتيجة السلسلة = invocation.invocation();
}آخر{
إرجاع "تسجيل الدخول" ؛
}
//System.out.println("قيمة الإرجاع:"+ result);
// نتيجة الإرجاع؛
}
}
<اسم الحزمة = "csdn" namespace = "/ اختبار" يمتد = "struts-default">
<المعترضات>
<اسم المعترض = "إذن" />
<interceptor-stack name="permissionStack">
<interceptor-ref name="defaultStack" />
<اسم المرجع المعترض = "إذن" />
</interceptor-stack>
</المعترضات>
<action name="helloworld_*"method="{1}">
<result name="success">/WEB-INF/page/hello.jsp</result>
<interceptor-ref name="permissionStack"/>
</أكشن>
</حزمة>
نظرًا لأن الوظائف في الدعامات 2 مثل تحميل الملفات والتحقق من البيانات وتغليف معلمات الطلب في إجراءات يتم تنفيذها جميعًا بواسطة المعترض في defaultStack الافتراضي للنظام، يحتاج المعترض الذي نحدده إلى الرجوع إلى defaultStack الافتراضي للنظام حتى يتمكن التطبيق من استخدام struts2 العديد الميزات التي يوفرها الإطار.
إذا كنت تريد أن تستخدم جميع الإجراءات ضمن الحزمة اعتراضًا مخصصًا، فيمكنك تعريف المعترض باعتباره المعترض الافتراضي من خلال <default-interceptor-ref name="permissionStack"/>. ملحوظة: يمكن تحديد جهاز اعتراض افتراضي واحد فقط لكل حزمة. بالإضافة إلى ذلك، بمجرد أن نحدد بشكل صريح اعتراضًا لإجراء ما في الحزمة، فإن المعترض الافتراضي لن يعمل.
6. التحقق من الإدخال
في struts2، يمكننا التحقق من جميع طرق العمل أو التحقق من طرق عمل محددة.
يوفر Struts2 طريقتين للتنفيذ للتحقق من المدخلات:
1. يتم تنفيذه عن طريق كتابة التعليمات البرمجية يدويًا.
2. تم التنفيذ بناءً على تكوين XML.
7. اكتب التعليمات البرمجية يدويًا للتحقق من إدخال جميع الطرق في الإجراء
من خلال تجاوز طريقة التحقق من الصحة ()، ستقوم طريقة التحقق من الصحة () بالتحقق من جميع الطرق في الإجراء التي لها نفس التوقيع مثل طريقة التنفيذ. عندما تفشل عملية التحقق من بيانات معينة، يجب علينا استدعاء طريقة addFieldError() لإضافة معلومات فشل التحقق إلى fieldErrors في النظام (من أجل استخدام طريقة addFieldError()، يمكن أن يرث الإجراء ActionSupport إذا كانت أخطاء fieldErrors في النظام تحتوي على معلومات فشل، struts2 سوف تتم إعادة توجيه الطلب إلى النتيجة المسماة input. يمكن عرض معلومات الفشل من خلال <s:fielderror/> في عرض الإدخال.
التحقق من صحة () مثال الاستخدام:
التحقق من صحة الفراغ العام () {
if(this.mobile==null || "".equals(this.mobile.trim())){ this.addFieldError("اسم المستخدم"، "لا يمكن أن يكون رقم الهاتف المحمول فارغًا");
}else{ if(!Pattern.compile("^1[358]//d{9}").matcher(this.mobile.trim()).matches()){
this.addFieldError("mobile", "تنسيق رقم الهاتف المحمول غير صحيح");
}
}
بعد فشل التحقق، تتم إعادة توجيه الطلب إلى عرض الإدخال:
<result name="input">/WEB-INF/page/addUser.jsp</result>
استخدم <s:fielderror/> في صفحة addUser.jsp لعرض معلومات الفشل.
سيتم تنفيذ validateXxx () من خلال طريقة validateXxx () فقط للتحقق من الطريقة المسماة Xxx في الإجراء. يجب أن يكون الحرف الأول من Xxx مكتوبًا بحرف كبير. عندما تفشل عملية التحقق من بيانات معينة، يجب علينا استدعاء طريقة addFieldError() لإضافة معلومات فشل التحقق إلى fieldErrors في النظام (من أجل استخدام طريقة addFieldError()، يمكن أن يرث الإجراء ActionSupport إذا كانت أخطاء fieldErrors في النظام تحتوي على معلومات فشل، struts2 سوف تتم إعادة توجيه الطلب إلى النتيجة المسماة input. يمكن عرض معلومات الفشل من خلال <s:fielderror/> في عرض الإدخال.
مثال على استخدام طريقة validateXxx():
سلسلة عامة add () تطرح استثناءً {إرجاع "النجاح"؛}
التحقق من صحة الفراغ العام () {
if(username==null && "".equals(username.trim())) this.addFieldError("username", "لا يمكن أن يكون اسم المستخدم فارغًا");
}
بعد فشل التحقق، تتم إعادة توجيه الطلب إلى عرض الإدخال:
<result name="input">/WEB-INF/page/addUser.jsp</result>
استخدم <s:fielderror/> في صفحة addUser.jsp لعرض معلومات الفشل.
8. عملية التحقق من الإدخال
1. يقوم محول النوع بإجراء تحويل النوع على معلمات الطلب ويقوم بتعيين القيمة المحولة للسمة في الإجراء.
2. في حالة حدوث استثناء أثناء تحويل النوع، سيقوم النظام بحفظ معلومات الاستثناء في ActionContext، وسيضيف معترض ConvertError معلومات الاستثناء إلى fieldErrors. بغض النظر عما إذا حدث استثناء أثناء تحويل النوع، سيتم إدخال الخطوة 3.
3. يقوم النظام أولاً باستدعاء طريقة validateXxx() في الإجراء من خلال تقنية الانعكاس، حيث Xxx هو اسم الطريقة.
4. ثم قم باستدعاء طريقة التحقق من الصحة () في الإجراء.
5. بعد الخطوات الأربع المذكورة أعلاه، إذا كانت هناك معلومات خطأ في حقل الأخطاء في النظام (أي أن حجم المجموعة التي تخزن معلومات الخطأ أكبر من 0)، فسيقوم النظام تلقائيًا بإعادة توجيه الطلب إلى العرض المسمى الإدخال. إذا لم تكن هناك معلومات خطأ في الحقلأخطاء في النظام، فسيقوم النظام بتنفيذ طريقة المعالجة في الإجراء.
9. تنفيذ التحقق من المدخلات لجميع طرق العمل بناءً على طريقة تكوين XML
عند استخدام طريقة التكوين المستندة إلى XML لتنفيذ التحقق من الإدخال، يحتاج الإجراء أيضًا إلى وراثة ActionSupport وتوفير ملف التحقق، ويتم وضع ملف التحقق وفئة الإجراء في نفس الحزمة. تنسيق تسمية الملف هو: ActionClassName-validation. xml، حيث ActionClassName هو اسم فئة الإجراء البسيط، و-validation هي طريقة كتابة ثابتة. إذا كانت فئة الإجراء هي cn.csdn.UserAction، فيجب أن يكون اسم الملف: UserAction-validation.xml. فيما يلي نموذج لملف التحقق:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<المدققون>
<اسم الحقل = "اسم المستخدم">
<نوع التحقق من الحقل = "requiredstring">
<param name="trim">صحيح</param>
<message>لا يمكن أن يكون اسم المستخدم فارغًا!</message>
</field-validator>
</الحقل>
</التحقق من الصحة>
يحدد <field> السمات التي سيتم التحقق منها في الإجراء، ويحدد <field-validator> المدقق. يتم توفير سلسلة التحقق المطلوبة أعلاه من قبل النظام. يوفر النظام أدوات التحقق التي يمكنها تلبية معظم متطلبات التحقق يمكن العثور على أداة التحقق من الصحة في ملف default.xml ضمن com.opensymphony.xwork2.validator.validators في xwork-2.x.jar.
<message> هي الرسالة السريعة بعد فشل التحقق. إذا كان التدويل مطلوبًا، يمكنك تحديد سمة المفتاح للرسالة، وقيمة المفتاح هي المفتاح في ملف المورد.
في ملف التحقق هذا، يتم التحقق من سمة اسم المستخدم لنوع السلسلة في الإجراء، ويجب أولاً استدعاء طريقة القطع () لإزالة المسافات، ثم تحديد ما إذا كان اسم المستخدم فارغًا.
عند كتابة ملف التحقق، لا يمكن أن تظهر رسالة المساعدة. عند كتابة ملف التحقق ActionClassName-validation.xml، إذا لم تظهر رسالة المساعدة، يمكنك حل المشكلة كما يلي:
windowwos->التفضيلات->myeclipse->الملفات والمحررات->xml->xmlcatalog
انقر فوق "إضافة"، وحدد "نظام الملفات" في الموقع في النافذة التي تظهر، ثم حدد xwork-validator-1.0.3.dtd في دليل src/java الخاص بدليل إلغاء الضغط xwork-2.1.2، ثم ارجع إلى المجلد نافذة الإعداد لا تتسرع في إغلاق النافذة، يجب عليك تغيير نوع المفتاح في النافذة إلى URI. تم تغيير المفتاح إلى http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd