أپاتشي سترتس
إيمان سعد الدين ساهم بشكل رئيسي في تحرير هذا المقال
|
أپاتشي سترتس Apache Struts | |
---|---|
طوره | Apache Software Foundation |
أحدث إصدار | 2.2.1 / 16 أغسطس 2010 |
مكتوب بلغة | جاڤا |
نظام التشغيل | Cross-platform |
النوع | إطار تطبيق الوب |
الرخصة | رخصة أپاتشي 2.0 |
موقع وب | http://struts.apache.org/ |
أپاتشي سترتس هو web application framework مفتوح المصدر يستخدم لتطوير java EE web application. وهو يستخدم ال java servlet Avdk pi لتشجيع المطورين لتبني ال MVC.
وسمي Struts لأن هذه البيئة تعني التزويد بالمساعدة غير المرئية invisible underpinning التي تدعم تطوير المشاريع الاحترافية struts تؤمن الرابط بين مكونات متنوعة تحت بيئة
جافا لتشكل منهم وحدة متكاملة
الهدف الأساسي هو جعل المقاييس الموجودة حاليا تسيطر بواسطة إنتاج القطع المفقودة التي
نحتاجها لإنتاج التطبيقات enterprise-grade التي يكون من السهل الحفاظ عليها مع مرور
الوقت وهو في الأصل صمم من قبل craig mcclanahan ومنح ل Apache Foundation في أيار عام ال2000
سابقا كان يتوضع تحت ال Apache Jakarta project ويعرف باسم Jakarta struts واصبح
المشروع الأعلى مستوى بين مشاريع Apache عام ال 2005.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
نظرة شاملة عن ال struts والهدف من تصميمه
في ال java EE web application القياسية الزبون يرسل معلومات إلى ال server عبر
واجهة التطبيق وهذه المعلومات تسلم إلى ال java servlet الذي يعالجها ويتفاعل مع
قواعد المعطيات وينتج الرد بصيفة HTML أو تعطى لصفحة Java sever pages وهي عبارة عن
مزيج من كود JAVA, HTML
كلا الطريقتين السابقتين تعتبر غير كافية لتنفيذ المشاريع الكبيرة لأنها تخلط منطقية
المشروع مع العرض وتجعل الصيانة صعبة
الهدف من ال struts هو فصل ال model (منطق المشروع الذي يتعامل مع قواعد المعطيات )
عن ال view (صفحات ال HTML التي تعرض للمستخدم ) وال CONTROLLER ( النموذج الذي
يمرر المعلومات بين ا لmodel وال view ) Struts
تؤمن ل controller (servlet يسمى ب actionservlet) وكذلك تسهل كتابة قوالب لطبقة
العرض والإظهار (نموذجيا بلغة jps , ولكن لغة xml/xsltو velocity أيضا مدعومة )
ال web application مسؤول عن كتابة ال model وعن تكوين ملف تشكيلة رمزي (central configuration file) يدعى stuts –config.xml الذي يربط بين ال view,model,controller معا
طلب المستخدم يرسل إلى ال controller بصيغة action معرف في ملف التشكيلة , وإذا
استقبل ال controller طلب من هذا الشكل يستدعي ال action Class المناسب الذي يتفاعل
مع جزء model code المناسب من التطبيق
ال model code يعيد Action forward وهي عبارة عن string تخبر ال controller أي
صفحة إ ظهار يجب إرسالها للمستخدم .
المعلومات تمرر بين ال model وال view على شكل صيغة خاصة من ال javaBeans . Custom tag library
تسمح بالقراءة والكتابة لمحتويات هذه ال beans من طبقة العرض بدون الحاجة لأي سطر java code .
وتحتوي أيضا على آلية لتشكيل القوالب تدعى tiles والتي تسمح _على سبيل المثال _ لطبقة
العرض بأن تتكون من header و footer ومحتويات الصفحة بحيث تكون هذه المكونات جميعها
مستقلة بعضها عن بعض .
بنية ال struts :
يتكون ال struts من 3 مكونات مفتاحية :
- Request handler والذي يطلب من مطور المشروع , ويستخدم لتصفح url الخاص2
- Response handlerالذي يستخدم لنقل التحكم لمورد آخر يكون مسؤول عن إكمال
الطلب
- Tag library والتي تساعد المطورين من إنتاج مشاريع معتمدة على الواجهات
التفاعلية مع صفحات السيرفر
وال struts تتكون تقريبا من 300 صف وواجهة مرتبين ب 12 packages برفقة الخدمات
والصفوف المساعدة وهذه البنية تؤمن الصفوف والواجهات للتعامل مع ال controller وال presentation
بمساعدة custom type libraries
the struts controller components
عندما يطلب مستخدم شيئا ما يتحول الطلب إلى struts action servlet الذي يعترض ال url
ويعتمد على ال struts configuration files ويعطى لل action class . Action class
هو جزء من ال controller المسؤول عن الاتصال مع طبقة ال model . The struts view component
وهو المسؤول عن معلومات العرض للمستخدم ويستقبل منه المدخلات وهو مسؤول عن إظهار
المعلومات المزودة من قبل ال model
غالبا ما نستخدم ال jsp لعرض الإظهار , ولزيادة القدرة الإظهارية نستطيع استخدام custom tags,java script
The struts model component
الذي يؤمن ال business logic والتعامل مع قواعد الممطيات أو أنظمة ال back-ends
وهو في الغالب صف جافا ,ولا يوجد صيغة محددة لشكل ال model component هذا يعني
إمكانية استخدام ال java code المكتوب لتطبيق آخر .
علينا اختبار ال model حسب متطلبات الزبون التي لدينا.
إعداد بيئة عمل ال struts
- تنزيل ال JDK : قم بتنزيل ال JDK 1.4 أو نسخة أحدث
- تنزيل ال Tomcat :قم بتحميل ال tomcat من موقع Apache نسخة Jakarta-tomcat-5.0.4
مثلا , ثم قم بتنزيله ,للتأكد من أن تنزيله قد تم بشكل صحيح : افتح مجلد التنزيل /bin وولد تعليمة بدء التشغيل لتشغيل السيرفر ,افتح المتصفح الخاص بك واكتب العنوان التالي http://localhost:8080
/ لاختبار السيرفر سوف تظهر صفحة ترحيب
تنزيل تطبيق ال struts : قم بتحميل النسخة الأخيرة من ال struts من الموقع
الرسمي لها http://jakarta.apache.org/struts , قم بفك ضغط الملف في المسار الذي
تريده , ثم قم بنسخ الملفات struts-blank.war,struts-documenatation.war,struts-example.war
من مجلد
"Jakarta-struts-1.1\webapps" إلى مجلد "Jakarta-tomcat-5.0\webapps"
Struts-documentation.war :ويحوي ال API والمستندات الأساسية لتطوير ال struts application . Struts-blank.war : وهو struts application فارغ ,وهو مفيد في البدء بتطبيق struts
معد مسبقا Struts-example.war :وهو تطبيق mail reader demonstration بسيط 4
- البدء بتطوير ال struts application الأول : قم بتغيير اسم struts-blank .war
إلى struts-tutorial.war في ال Jakarta –tomcat-5.0.4\webapps ثم انسخ الملف إلى Jakarta-tomcat-5.0.4\webapps Tomcat يقوم تلقائيا بفك ضغط الملف وتحميل التطبيق
==كيف يعمل ال struts== : 1- أي تطبيق تقوم بتطويره يكون له واصف انتشار (deployment descriptor )مثل
WEB-INF/web.xml
وهذا الملف الذي يقرأه ال container ,ويحتوي على معلومات التشكيل التي عرفناها لل
web application الخاص بنا وهذه المعلومات تتضمن ملف ال index وصفحة الترحيب
الافتراضية
وخارطة ال servlet الخاص بنا متضمنا المسار واسم الامتداد وكل المتحولات الابتدائية
والمعلومات المتعلقة بعناصر السياق
في ملف ال WEB-INF/web.xml الخاص بتطبيقات ال sturts نحن بحاجة لأن نصمم ال
struts action servlet الذي يسلم كل الطلبات الصادرة من المتصفح إلى خريطة الموقع
Struts action servlet هو العنصر الرئيسي لل controller في ال struts وهذا الservlet يرث من ال httpservlet
وهذا ال SERVLET يؤمن خدمتين أساسيتين :
- عندما يبدأ عمل ال container يقرأ ملف التشكيلة الخاص بال struts ويحمله
للذاكرة بواسطة التابع init()
- يعترض طلبات ال H ttp بواسطة التابعين doGet(),doPost() ويعالجهم بالشكل الصحيح
2- في ال struts لدينا ملف xml آخر هو ملف التشكيلة لل struts ويدعى struts.config.xml واسم هذا الملف قابل للتغيير ويمكن أن يذكر في ملف web.xml
هذا الملف يتوضع تحت مجلد ال web-inf الخاص بالتطبيق وهذا الملف هو ملف xml يصف كل أجزاء تطبيق ال struts وهذا الملف يحوي معلومات عن عدة أنواع من ال struts ويصف تفاعلاتهم وأعمالهم ,ويستخدم هذا الملف لربط المسارات مع مكونات ال controller الخاص بالتطبيق والتي تعرف ب action path
3- في كل action يجب تزويد ال struts بأسماء صفحات النتائج التي ستعرض كنتيجة لل action في المشروع الواحد قد تتواجد أكثر من صفحة عرض ,وتعرض حسب نتيجة ال action وال struts يعرف كيف يوجه الصفحة المناسبة للوجهة الصحيحة ,وال model المناسب يتم استدعاؤه من قبل المكونات الداخلية لل controller
4- ال action ممكن أن تتشارك مع ال javabeans في ملف التشكيلة للstruts
5- للإظهار في الstruts نستخدم صفحات ال jsp أو قوالب ال velocity أو صفحات ال HTML ولكن سيئة هذه اللغة أننا لا نستطيع الاستفادة من الميزات الكاملة للأدوات المرفقة مع البيئة
ويوجد أيضا مجموعة من ال custom tag library والتي تسهل إنشاء واجهات تفاعلية بشكل أنيق مع الaction form beans
ال struts jsp taglibs تملك عددا من ال tags التي تمكننا من التعامل مع المعطيات الديناميكية في الإظهار وهذه ال tags تمكننا من التفاعل مع ال controller بدون كتابة الكثير من سطور الجافا .
تنافس بنى ال mvc
على الرغم من أن ال struts موثقة بشكل جيد وناضجة وتعتبر بنية معروفة لبناء front ends لتطبيقات الجافا لكنها الآن تواجه تحديات جديدة من بنى جديدة وخفيفة الوزن مثل tapestry,spring mvc,stripes
مقاييس ال xform والبنى الجديدة قد تصبح خيار آخر لبناء مصداقية واجهات التطبيق المعقدة مع ال struts في المستقبل
بنى ال webwork صممت باستخدام apache struts لعدة سنوات مضت طموحا لتقديم الزيادة والتحسين مع ثبات نفس البنية العامة لل struts الأصلي .
وقد تم الإعلان عن إعادة دمج ال struts مع ال webwork في كانون الأول عام 2005
webwork2.2 اعتمدت ك struts2 التي بلغت إصدارها الكامل في شباط 2007
مؤخرا قدمت شركة sun إضافات جديدة ل java plat form تدعى java server faces , بالإضافة إلى البنية الأساسية قدم
وهكذا نرى أن ال apache struts project يقدم نسختين رئيسيتين من بنية ال struts :
- struts1 :وتعتبر ال web application framework الأكثر انتشارا للجافا ,وهذه النسخة تعتبر كاملة ,موثقة بشكل جيد ومدعومة بشكل كبير , وتعتبر الخيار الأمثل للذين يفضلون الحلول الأكيدة للمشاكل العامة
- struts2 :وبشكل عام تعرف ب web work2 .بعد العمل بشكل منفصل لعدة سنوات تم الدمج بين بين ال webwork و ال struts communities ليقدموا ال struts 2 والذي يعتبر الخيار الأمثل للذين يفضلون الحلول الأنيقة للمشاكل الصعبة
بنى mvc آخرى لا تعتمد على j2EE:
castle monorail for Asp.Net ,TurboGears,Catalyst,Django,WebObject, Ruby on Rails ,SYmfony (for php)cakephp
وأيضا struts4php وهي نسخة من ال struts مخصصة لل php
انظر أيضا
- Model-view-controller
- مشروع جاكرتا
- Java EE
- JavaServer Faces
- Stripes
- Comparison of web application frameworks
- ZK Framework
المصادر
قائمة المراجع
- James Holmes: Struts: The Complete Reference, McGraw-Hill Osborne Media, ISBN 0-07-223131-9
- Bill Dudney and Jonathan Lehr: Jakarta Pitfalls, Wiley, ISBN 978-0-471-44915-7
- Bill Siggelkow: Jakarta Struts Cookbook, O'Reilly, ISBN 0-596-00771-X
- James Goodwill, Richard Hightower: Professional Jakarta Struts, Wrox Press, ISBN 0-7645-4437-3
- John Carnell and Rob Harrop: Pro Jakarta Struts, Second Edition, Apress, ISBN 1-59059-228-X
- John Carnell, Jeff Linwood and Maciej Zawadzki: Professional Struts Applications: Building Web Sites with Struts, ObjectRelationalBridge, Lucene, and Velocity, Apress, ISBN 1-59059-255-7
- Ted Husted, etc: Struts in Action, Manning Publications Company, ISBN 1-930110-50-2
- Struts View Assembly and Validation, (PDF format).
- Stephan Wiesner: Learning Jakarta Struts 1.2, Packt Publishing, 2005 ISBN 1-904811-54-X