أعتقد أنه لا أحد لا يعرف عن SSH. Struts2+Spring+Hibernate ، الهندسة "الأساسية" لتطوير المؤسسات ، لماذا يتم تمييز الأساسيات في عروض الأسعار؟ لأن هذا الأساس هو ما يعتقده الكثير من الناس في الأمر. الأكثر أساسية هو servlet. لا تقوم العديد من مؤسسات التدريب بتدريس العديد من الأساسيات ، وسيكون لها ثلاثة أطر رئيسية مباشرة. SSH أو SSI ، مما يجعل الكثير من الناس يعتقدون أن تطوير Javaweb يجب أن يكون له أطر. بدون إطار عمل ، هو نفسه فقدان الأيدي. لا يوجد أي ضرر في الأطر الثلاثة الرئيسية وهي عملية. تستخدمها العديد من الشركات ويمكنها البدء مباشرة في تطويرها. لكن بعد التخرج ، اعتقدت أنني لم أستخدم الأطر الثلاثة الرئيسية لفترة طويلة. الربيع مفيد ، وخاصة springMVC. إنه شعور أكثر إثارة للاستخدام من Struts2. في الواقع ، إذا كنت تفكر في ذلك ، فإن Spring يمتص بعض مزايا الدعامات ، ومع بعض الأشياء المريحة ، فإنه يبدو أكثر متعة. لكن اليوم لن نشاهد springMVC ، وسوف نأخذ بعض الوقت لرؤية الأجزاء الأنيقة من springMVC في المستقبل.
وصلت إلى النقطة. قامت SSH بتحديث الإصدار ، لذلك ما زلت أريد التحدث عن الإصدار هنا ، وإلا فإن الكثير من الأصدقاء سوف يوبخونني. أستخدم 2.3.4 للدعامات 2 ، و SPRING هو أحدث 3.2.2 ، و Hibernate هو 4.1.9 ، وهو جديد تمامًا.
قبل إدخال الكود ، دعونا أولاً نفهم الأدوار التي تلعبها الأطر الرئيسية الثلاثة.
1) الدعامات: لماذا نستخدم الدعامات؟ ما هو الفرق بينهم وبين Servlets؟ في الواقع ، لا يزال بإمكاننا القيام بـ MVC بدون دعامات ، ولكن قد يكون أكثر من الاكتئاب في ملف التكوين. تساعدنا الدعامات بشكل أساسي على إدراك وظيفة التوزيع ، وتقسيم طلباتنا المحددة إلى فئة معينة ، وتساعدنا على تعيين خصائص (والتي يتم من خلال ActionForm في Struts1.x). أحرزت Struts2 الكثير من التقدم مقارنة بالدعامات 1. إنه يضبط القيم تلقائيًا ، ولا يتطلب فئات التنفيذ أو الميراث ، ولديه سلسلة من المفاهيم مثل سلاسل الطلب. نظرًا لأن هذه لا تستخدم كثيرًا ، فلن أضللك إخوانك ، لذلك لن أقول الكثير.
2) الربيع: أعتقد أن Daimyo الربيع ليس جافا ، لا أعرف. كان ينبغي على الكثير من الناس أن يتعلموا عن الربيع من خلال IOC في البداية ، أو لم يعرفوا أي شيء ، فقط الأطر الرئيسية الثلاثة التي جاءت SSH. لا يهم ، على أي حال ، عندما نستخدم الأطر الثلاثة الرئيسية ، يعد Spring أداة إلى حد كبير لفئة الارتباط. إلى جانب الإطارين الرئيسيين الآخرين ، SSI و SSH ، فهي متشابهة. يوفر Spring فقط أدوات لجعلنا أكثر ملاءمة لاستخدام الأطر الرئيسية الثلاثة. بالطبع ، يعتمد عدد كبير من البرامج في مجموعة الإطارات أيضًا على IOC في الربيع ، وسنستخدم بالطبع المعاملات. AOP وغيرها من الأشياء الأكثر تقدما تعتمد على الاحتياجات. إذا كان هناك أي متطلبات السجل ومتطلبات الاعتراض ، فمن الأفضل استخدام AOP لتحقيق ذلك.
3) السبات: تشتهر السبات أيضًا في عالم جافا ، وهو أساسًا معيار ORM. يوفر ذاكرة التخزين المؤقت ، المستوى الأول والمستوى الثاني ، وهناك أيضًا HQL. ماذا نستخدم عند الجمع بين الأطر الثلاثة الرئيسية؟ بالطبع ، إنها الوظيفة الرئيسية لرسم خرائط ORM ، لذلك لن نفكر في ذاكرة التخزين المؤقت في الوقت الحالي. كثير من الناس لم يفكروا أبدًا في سبب حاجتهم إلى ORM. في الواقع ، يرجع ذلك بشكل أساسي إلى الصراع بين حقول البيانات والفئة. إذا كنت تستخدم JDBC لتشغيل وتعيين الحقول واحدة تلو الأخرى ، فمن المحتمل أن تشعر بالجنون بعد القيام بذلك لفترة طويلة ، لذلك يظهر ORM في هذا الوقت.
الأطر الثلاثة الرئيسية هي المسؤولة عن الأشياء التالية: Struts2 - المسؤولة عن إعادة توجيه المعالجة والمعالجة المقابلة للنماذج ، تنظيم فئة الربيع (أي IOC) ، تدير الإجراء الذي تتم إدارته في الأصل بواسطة struts2 كفاصوليا ، و hibernate - رسم الخرائط ، رسم الفصول إلى الجداول.
بعد فهم التقسيم العام للعمل ، بالطبع بدأنا الترميز. الشيء الأكثر إثارة للقلق حول الأطر الرئيسية الثلاثة هو الحزمة. يحب الكثير من الناس استخدام Myeclipse بشكل رئيسي لأنه يمكن أن يساعدنا في استيراد حزم الأطر الرئيسية الثلاثة. ولكن يوصى بعدم استخدام المبتدئين ذلك. أولاً ، لدى Myeclipse هيكل المشروع الخاص به. عندما تحصل على دليل Eclipse ، يجب عليك إعداد بعض جوانب المشروع ، مما سيؤدي إلى إزعاج للآخرين ؛ ثانياً ، نادراً ما يستخدمها Myeclipse في الشركة ، لذلك من الأفضل أن تكون على دراية بـ Eclipse. أو إنه جيد إذا كنت تحب الأفكار.
الحزم اللازمة للدعامات 2 هي كما يلي: Antlr ، ASM ، XWORK ، Struts2-Core ، ognl ، logging المشتركة ، المرفق المشترك ، STRUTS-SPRING-PLUGIN. ربما لا يوجد سوى عدد قليل ، وقد لا يتم كتابته بالكامل. يمكنك إضافة الأخطاء عند بدء التشغيل. لا ينصح بإلقاء جميع الحزم بمجرد أن تبدأ. بعض الحزم في الأطر الثلاثة في صراع.
الحزم المطلوبة من قبل Spring3 هي كما يلي: BANS Spring ، و SPRING-CORDECT ، و SPRING-COUNTER ، ودعم النابض ، والتعبير عن الربيع ، والربيع (نستخدم ثلاثة أطر رئيسية ونطلب دعم ORM) ، و WEB Spring ، و Spring-TX (نستخدم المعاملات ، ولكن لا نشارك في المثال).
الحزم المطلوبة من قبل Hibernate4 هي كما يلي: تنزيل Hibernate جميع حزم الجرة في المجلد المطلوب في الحزمة.
تمامًا مثل هذه الحزم ، لا يزال نفس الشيء. لا ينصح بوضع جميع الحزم بمجرد أن تبدأ ، لأن بعض الحزم في الأطر الثلاثة لها تعارضات ، لذلك فقط أضفها حسب الاقتضاء عند الحاجة. عندما يظهر ClassNotFound ، ضع حزمة JAR المقابلة في دليل LIB.
تنتهي الاستعدادات هنا وتبدأ رسميًا.
1) أولاً وقبل كل شيء ، نحتاج إلى استخدام Struts2 ، ويجب أن نجعله يعترض الطلب
<Ivilter> <ilter-name> struts2 </filter-name> <ilter-class> org.apache.struts2 </filter mapping>
يتيح هذا الرمز الدعامات لاعتراض جميع الطلبات. بالطبع ، هذا لا يعني أن جميع الطلبات يتم اعتراضها بحلول الربيع. يمكننا أيضًا تكوين Struts.xml لاعتراض أسماء اللاحقة المحددة. بشكل عام ، إنه عمل. على النحو التالي:
<name constant = "struts.objectfactory" value = "spring" /> <name name = "struts.action.extense" value = "Action" />
Struts.Action.Extension يهيئ اسم لاحقة الافتراضية لاعتراضه ، بحيث يتم التحقق من اسم لاحقة عند الاعتراض ، وسيتم إعادة توجيه المطابقة بواسطة الدعامات. تعني STRUTS.ObjectFactory أن فئة معالجة عمليات إعادة توجيه الدعامات يتم تسليمها إلى الربيع للإدارة ، أي أنه يتم إدارته كحبة.
2) عادةً عندما نستخدم Spring مباشرة ، سنقوم بالاتصال *ApplicationContext ، لكننا الآن في الويب ، لذلك لا يمكننا تسميته يدويًا. في الواقع ، يوفر Spring طريقة للاتصال في حالة الويب ، مع servlet (لم أستخدم هذا ، لا أعرف كيفية استخدامه) ، المستمع ، Servlet مخصصة لخوادم التطبيقات التي لا تدعم المرشحات ، ولكن الآن نستخدم المستمع بشكل أساسي.
<StaNeer> <Segner-Class> org.springframework.web.context.contextloaderListener </leader-class> </stanter>
في هذه الحالة ، فإن معظم الحالات التي تحتاج فيها الربيع إلى الجمع بين أطر أخرى. عندما نستخدم SPRINGMVC فقط ، يمكننا تكوين Sipatcherservlet مباشرة لاستبدال Servlet Servlet أعلاه. دعنا نلقي نظرة على التفاصيل عند استخدام springMVC لاحقًا.
في هذه الحالة ، سيتم تحميل ملف ApplicationContext.xml في دليل الويب بشكل عام. عندما لا يكون اسم الملف الخاص بك هذا أو المسار ليس هنا ، يمكنك تكوين خاصية ConfigContextPath.
<Context-param> <Param-Name> configContextPath </param-name> <param-value> web-inf/applicationContext.xml </parm-value> </suctext-param>
وهو يدعم استخدام ClassPath: بادئة ، وما إلى ذلك ، لن أتحدث عنه هنا ، يمكنك قراءة ملف التكوين في الربيع بالتفصيل. وبهذه الطريقة ، قمنا بالفعل بدمج الدعامات والربيع ، لكننا لم نفعل بعض تكوينات الفاصوليا وإعادة توجيه الدعامات.
3) بصفته ORM ، تتم إدارة السبات أيضًا بحلول الربيع في هذا الوقت. الربيع يوفر alcalsessionfactory. لاحظ أن هذه الفئة ، Hibernate3 و 4 مختلفة ، يوفر Spring اثنين. التكوين التالي في ApplicationContext.xml
<bean id = "sessionfactory"> <property name = "dataSource" ref = "datasource"/> <property name = "MapPingResources"> <list> </list> </sprement> <Propert
في الواقع ، فإن التكوين مشابه للتكوين في الإسبات ، لذلك لن أتحدث عن الكود المحدد هنا.
4) في الماضي ، عندما يكون الربيع 2.5.x ، استخدمنا HibernatedaoSupport أكثر من غيرها ، لكن Spring 3.x لم يقدم هذا الدعم في البداية. نحتاج إلى استخدام الجلسة الأصلية للعمل (فقط حقن SessionFactory) ، ولكن هناك بالفعل مشكلة هنا. إذا فتحنا الاتصال وأغلقنا كل طلب ، فسوف يستهلك المزيد من الموارد ، ولكن إذا لم نغلق الاتصال ، فلن يكون جيدًا جدًا. لذلك هناك حل مفاضلة ، ومدير لإدارة الاتصال. هنا الربيع يوفر opensessioninview. في كل مرة يتم فتح عرض (في الأساس كل طلب) ، سيتم فتح الجلسة. سوف نتجاهل كيفية إدارتها داخليًا في الوقت الحالي.
<Ivilter> <ilter-name> OpenSessionInViewFilter </filter-name> <filter-class> org.springframework.orm.hibernate4 <Url-pattern>/*</url-pattern> </filter-mapping>
هنا ما زلنا نطلب منه اعتراض جميع الطلبات. بالطبع ، يمكن تكوينه على اعتراض اللواحق فقط ، لذلك ليست هناك حاجة لإهدار الموارد.
5) في الأساس ، تم إعداد إطار عمل SSH الخاص بنا ، والشيء التالي هو مجرد مشكلة في الكود. تحتاج فقط إلى تكوين الحبة في ملف تكوين الربيع ، أو إذا كنت تحب التعليق التوضيحي ، يمكنك فقط component (value = 'bean name') مباشرة ، ولكن تذكر تمكين المستحيل المكون في ملف التكوين.
لن يتم كتابة الرمز بالتفصيل ، على النحو التالي:
component (value = "useraction") فئة عامة المستخدم {} <package name = "user" تمدد = "Struts-default" namepace = "/user"> <!-تسجيل الدخول إلى المستخدم-> <action name = "login" method = "login" في الواقع ، إنه يحتاج فقط إلى تعديل المؤشر في الفصل إلى فول المؤشر.
لن أنشر الكود التفصيلي ، بعد كل شيء ، إنه ملخص. بشكل عام ، يعد SSH أكثر فائدة لرمز مواصفات الفريق ، لأن الرمز المكتوب بموجب مواصفات الإطار يحتوي بشكل أساسي على نموذج محدد ، وهو أفضل للصيانة في المستقبل. ولكن بالنسبة للمبتدئين ، يوصى بعدم الاعتماد على الإطار. إذا كان عليك حقًا استخدامه ، فأنت بحاجة إلى فهم بشكل عام ما يفعله هذا الإطار ، والظروف التي تحتاج إلى استخدامها ، والظروف التي يجب ألا تستخدمها أبدًا.