تبدأ هذه المقالة بمشروع مركز تجاري عبر الإنترنت ، بدءًا من بناء البيئة ودمج S2SH خطوة بخطوة. يلخص منشور المدونة هذا بشكل أساسي كيفية دمج Struts2 و Hibernate4.3 و Spring4.2.
لدمج الأطر الثلاثة الرئيسية الثلاثة ، يجب عليك أولاً البدء ببناء بيئات مختلفة ، أي أولاً ، يجب عليك بناء بيئات الربيع ، السبات والدعامات 2 لضمان عدم وجود مشاكل ثم دمجها. الترتيب الذي يتبعه منشور المدونة هذا هو: أولاً بناء بيئة الربيع -> ثم قم ببناء بيئة السبات -> دمج الربيع والإسبات -> بناء بيئة Struts2 -> دمج الربيع والدعامات 2.
1. إدارة حزمة جرة المشروع بأكملها
الربيع لديه العديد من حزم جرة. يوصى بتصنيفها في فئة ثم إضافتها إلى مكتبة المستخدم بدورها لسهولة الإدارة وتوضيح في لمحة. هنا سألخص حزم الجرة الأساسية المطلوبة لكامل SSH وشاهد الصورة التالية:
كما يتضح من الشكل ، أولاً ، يتم تقسيم الجرار الربيعية إلى أربع فئات: Spring-4.2.4-Core ، Spring-4.2.4-AOP ، Spring-4.2.4-Persistence و Spring-4.2.4-Web. ضع جميع الحزم الأساسية في الربيع في قلب ، ووضع كل ما يتعلق بـ AOP في AOP ، وضع كل ما يتعلق بالمثابرة (المدمجة مع السبات) في الثبات ، ووضع كل ما يتعلق بالويب (المدمج مع Struts2) في الويب. ما هي حزم الجرة التي لدى كل جزء؟ يرجى الاطلاع على لقطة الشاشة أدناه:
ملاحظة: لا تحتوي الحزم في كل فئة أعلاه على جميع الجرار في الحزمة الأصلية. لا يتم استخدام بعض ملفات جرة. فقط أضفها عندما يحتاج المشروع المحدد عليه. الصورة أعلاه هي حزمة جرة أساسية مطلوبة للتأكد من أن بيئة المشروع يمكنها بناء حزمة جرة أساسية.
2. بناء بيئة الربيع
الشاشة المذكورة أعلاه لحزمة JAR هي جميع حزم الجرة التي تم دمجها في آخر مرة. عندما تقوم ببناء البيئة لأول مرة ، لا تحتاج إلى إضافتها جميعًا مرة واحدة. يمكنك إضافتها شيئًا فشيئًا. هذا أيضًا أكثر ملاءمة لفهم حزم الجرة في كل جزء. بالطبع ، من الممكن أيضًا إضافتها جميعًا مرة واحدة.
2.1 إضافة تكوين ملفات beans.xml وحزم جرة المقابلة
قم بإنشاء مشروع جديد ، ثم أضف المكتبة الخاصة بك إلى مكتبة المستخدم. فيما يلي اثنان رئيسيان ، وهما spring-4.2.4-core و spring4.2.4-aop. لن أخوض في تفاصيل حول إضافة حزم الجرة. بعد الإضافة ، أضف ملف beans.xml في دليل SRC. هناك العديد من القوالب لهذا الملف عبر الإنترنت ، وهناك أيضًا أمثلة توفرها الربيع. فقط خذ نسخة ، انظر الصورة التالية:
2.2 اختبار بيئة IOC في الربيع
دعونا نكتب فئة Java Java.Util.date العادية لاختبار ما إذا كان الربيع IOC طبيعيًا. إذا كان من الممكن حقنها بشكل طبيعي في برنامج الاختبار ، فهذا يعني أن بيئة DRIPT IOC تم إنشاؤها بنجاح. لنكتب حالة اختبار أدناه:
/** * description todo (باستخدام تصحيح توضيح الربيع ، يدعم فقط Spring3.1 وما فوق) * Author ni Shengwu * * / / * * بعد Spring3.1 ، هناك حزمة إضافية من الربيع- يتم استخدام هذه الحزمة JAR خصيصًا لدعم الاختبارات المستندة إلى التعليقات التوضيحية. حزمة JAR موجودة في Spring-4.2.4-Core * هناك springjunit4classrunner.class في هذه الحزمة الجرة ، ويمكنك إضافتها باستخدام @Runwith annotation * * annotation @contextConfiguration تعني حقن كائن ApplicationContex contextConfiguration (مواقع = "classpath: beans.xml") الفئة العامة sshtest {resource تاريخ التاريخ الخاص ؛ test // اختبار بيئة تطوير الربيع IOC public void springioc () {system.out.println (date) ؛ }} أخيرًا ، يمكن أن يخرج بشكل طبيعي: الخميس 28 أبريل 22:45:13 CST 2016. هذا يشير إلى أن كائن التاريخ قد تم حقنه بحلول الربيع ، مما يتحقق من أن وظيفة الربيع IOC طبيعية. لهذا السبب ، تم بناء بيئة الربيع.
3. بناء بيئة السبات
إن بناء البيئة في Hibernate أكثر تعقيدًا من الربيع لأنه يستخدم الهندسة العكسية في Myeclipse. نتبع الخطوات التالية لبناء بيئة تطوير السبات:
3.1 أضف حزمة الجرة المقابلة
هنا نضيف بشكل أساسي حزمتين من جرة إلى مكتبة المستخدم: Hibernate4.3.11 وحزمة برنامج تشغيل MySQL MySQL-Connector-Java-5.1.26 ، والتي لن يتم وصفها بالتفصيل.
3.2 إنشاء قاعدة بيانات وجدول جديد
إسقاط قاعدة البيانات إذا كانت موجودة متجر ؛ قم بإنشاء مجموعة الأحرف الافتراضية لمتجر قاعدة البيانات UTF8 ؛ استخدم متجر ؛ إسقاط الجدول إذا كانت موجودة فئة ؛ إنشاء فئة الجدول ( /* رقم الفئة ، النمو التلقائي* / id int not null auto_increment ، /* اسم الفئة* / type varchar (20) ، /* ما إذا كانت الفئة هي فئة ساخنة ، يمكن عرض الفئة الساخنة على الصفحة الرئيسية* / hot bool الافتراضي الخاطئة ، /* تعيين رقم الفئة على المفتاح الأساسي* / الأساسي / الابتدائي) ؛
3.3 متصفح DB يتصل بقاعدة بيانات MySQL
يشير متصفح DB إلى نافذة عرض في Myeclipse. يمكنك أن ترى بشكل حدسي قواعد البيانات والجداول الموجودة في MySQL. طريقة فتح متصفح DB: Window-> فتح منظور-> متصفح DB يفتح نافذة عمل متصفح DB. إذا لم يكن هناك متصفح DB ، فاتبع ما يلي: Window-> عرض العرض-> other-> أدخل متصفح DB وابحث عنه لفتحه.
بعد الافتتاح ، نبدأ في الاتصال بقاعدة بيانات MySQL. انقر بزر الماوس الأيمن -> جديد في المساحة الفارغة لنافذة متصفح DB ، وسيظهر مربع الحوار التالي:
بعد ملء الدخول ، انقر فوق اختبار برنامج التشغيل لاختباره. يجتاز الاختبار الاختبار ويشير إلى أنه تم تكوين برنامج تشغيل اتصال قاعدة البيانات ، ثم أنهيه. وبهذه الطريقة ، يمكننا رؤية قاعدة البيانات MySQL 5.6 في نافذة متصفح DB. انقر بزر الماوس الأيمن لفتحه لرؤية المكتبات والجداول الموجودة في قاعدة البيانات ، على النحو التالي:
3.4 إنشاء ملف تعيين XML و SessionFactory
يتم استخدام SessionFactory لإنشاء جلسات. نقوم بإنشائها بالطريقة التالية: انقر بزر الماوس الأيمن على اسم المشروع-> myeclipse-> إضافة إمكانيات السبات. إذا لم تكن هناك إمكانيات إضافة سبات ، فانقر فوق جوانب المشروع-> تثبيت جوانب السبات ، وستظهر النافذة التالية:
بعد ذلك ، أضف دعم Hibernate ، أي ، ملف التعيين hibernate.cfg.xml و sessionfactory في myeclipse. هنا نقوم بإنشاء حزمة لـ SessionFactory ، ولا يمكن استخدام الحزمة الافتراضية.
بعد ذلك ، أضف برنامج تشغيل. نظرًا لأننا قمنا بتكوين برنامج تشغيل من قبل ، يمكننا تحديد برنامج التشغيل الذي تم تكوينه حديثًا هنا.
بعد ذلك ، نظرًا لأننا أضفنا حجز JAR الخاص بنا من قبل ، ليست هناك حاجة للاختيار هنا ، ما عليك سوى الانتهاء منه مباشرة.
وبهذه الطريقة ، نكممل إنشاء ملف تكوين السبات و SessionFactory. دعونا نلقي نظرة موجزة على ما هو موجود في SessionFactory التي أنشأتها Myeclipse:
الفئة العامة HibernatesessionFactory {private Static Final ThreadLocal <Session> threadlocal = new threadlocal <Session> () ؛ // يتم استخدام SessionFactory في sessionfactory static org.hibernate.SessionFactory SessionFactory ؛ // SessionFactory: إنشاء مصنع للجلسة تكوين التكوين الثابت الخاص = التكوين الجديد () ؛ جنود الخدمة الثابتة الخاصة ؛ ثابت {// تهيئة SessionFactory Try {configuration.configure () ؛ serviceRegistry = جديد serviceRegistryBuilder (). applictStings (configuration.getProperties ()). BuildServiceregistry () ؛ SessionFactory = configuration.buildSessionFactory (serviceRegistry) ؛ // طريقة لإنشاء SessionFactory في hibernate4} catch (استثناء e) {system.err.println ("٪٪٪٪٪ خطأ إنشاء SessionFactory ٪٪٪٪") ؛ E.PrintStackTrace () ؛ }} private hibernatesessionfactory () {// طريقة المنشئ الخاصة تمنع الكائنات الجديدة من إطلاقها ، مما يضمن أن SessionFactory Singleton} getSession Sessionfactory Singleton () remernateException {جلسة الجلسة = (الجلسة) threadlocal.get () ؛ // احصل على جلسة من مجموعة مؤشرات الترابط إذا (الجلسة == null ||! session.isopen ()) {// إذا كان تجمع مؤشر الترابط فارغًا ، أو فشل فتح الجلسة إذا (SessionFactory == null) {RebuildSessionFactory () ؛ // إذا كانت SessionFactory فارغة ، فقم بإنشائها مرة أخرى ، مثل الجزء الثابت} الجلسة = (SessionFactory! = null)؟ SessionFactory.OpenSession (): NULL ؛ // SessionFactory ليس فارغًا ، قم بإنشاء threadlocal.set (الجلسة) ؛ // ثم ضع هذه الجلسة في مجموعة مؤشرات الترابط واحصل عليها في المرة القادمة} ؛ ) serviceRegistry = جديد serviceRegistryBuilder (). applictStings (configuration.getProperties ()). BuildServiceregistry () ؛ SessionFactory = configuration.buildSessionFactory (serviceRegistry) ؛ } catch (استثناء e) {system.err.println ("٪٪٪٪٪ خطأ إنشاء SessionFactory ٪٪٪") ؛ E.PrintStackTrace () ؛ }} public static void closeSession () يلقي HibernateException {جلسة الجلسة = (الجلسة) threadlocal.get () ؛ threadlocal.set (null) ؛ if (الجلسة! = null) {session.close () ؛ }} org.hibernate. } التكوين الثابت العام getConfiguration () {configuration return ؛ }} يمكن أن نرى من HibernatesessionFactory الذي تم إنشاؤه أن نمط Singleton وتقنية تجميع الخيوط تستخدم بشكل أساسي. ليس من الصعب فهم.
3.5 قم بإنشاء ملفات Model و ORM من خلال الهندسة العكسية
بعد ذلك ، سنبدأ في استخدام الهندسة العكسية لإنشاء كائن مثيل ، أي النموذج المقابل لجدول قاعدة البيانات. في نافذة DB Browsera ، انقر بزر الماوس الأيمن على متجر الطاولة ، لقد أنشأنا للتو وحدد Hibernate Engineering للبدء في إنشاء:
هناك طريقتان لإنشاءه ، استنادًا إلى ملفات التكوين واستنادًا إلى التعليقات التوضيحية. ذلك يعتمد على مزاج المطور. يمكنك اختيار:
بعد ذلك ، في الخطوة التالية ، حدد طريقة Autoincrement الرئيسية الرئيسية ، ثم أكمل الهندسة العكسية لإنشاء نموذج ورسم ORM.
بعد الانتهاء ، سيتم إنشاء نموذج الفئة ، وسيتم إنشاء التعيينات المقابلة أيضًا في ملف hibernate.cfg.xml. ستكون التعيينات السابقة بناءً على ملفات التكوين والشروح بناءً على التعليقات التوضيحية مختلفة.
3.6 اختبار قاعدة البيانات المستمرة
نظرًا لأنه لم يتم دمجه مع الربيع ، فهو مجرد بناء بسيط لبيئة تطوير السبات ، لذلك لا نحتاج إلى استخدام التعليقات التوضيحية. نقوم بتنفيذ إدخال البيانات في قاعدة البيانات عن طريق خدمة جديدة مباشرة.
اكتب أولاً واجهة الخدمات الفئة وفئة التنفيذ:
الواجهة العامة CatevoryService {public void save (فئة الفئة) ؛ // استخدم لاختبار بيئة السبات} فئة الفئة العامة تنفذ CatevoryService {Override // لا يوجد تكامل مع SPRING Public Void Save (فئة الفئة) {// الحصول على جلسة الجلسة = hibernatesessionfactory.getSession () ؛ جرب {// اليدوي Session.getTransaction (). begin () ؛ // تنفيذ Session.Save (الفئة) ؛ // إرسال يدوي Session.getTransaction (). الالتزام () ؛ } catch (استثناء e) {session.getTransAction (). rollback () ؛ رمي new RunTimeException (e) ؛ } أخيرًا {hibernatesessionfactory.closeessession () ؛ }}} ما يلي هو إضافة اختبار السبات في حالة الاختبار الآن فقط:
Runwith (SpringJunit4ClassRunner.Class) contextConfiguration (مواقع ClassPath: Beans.xml ") الفئة العامة sshtest {resource تاريخ التاريخ الخاص ؛ test // اختبار بيئة تطوير الربيع IOC public void springioc () {system.out.println (date) ؛ } test // اختبار /اختبار بيئة تطوير السبات ، لأنه لا يوجد تكامل ، يمكنك مباشرة الفراغ العام الجديد hiHernate () {categoryservice catevoryservice = new CateServiceImpl () ؛ فئة الفئة = فئة جديدة ("الرجال غير الرسمي" ، صحيح) ؛ categoryservice.save (فئة) ؛ }}لقد فحصنا قاعدة البيانات ووجدنا أن هناك الكثير من العناصر التي تم إدخالها للتو ، مما يعني أنه لم تكن هناك مشكلة في بيئة الإسبات. في هذه المرحلة ، قمنا ببناء بيئة تطوير السبات.
4. دمج الربيع والإسبات
بعد بناء بيئة التطوير لفصل الربيع والإسبات ، بدأنا في دمج الاثنين. بعد دمج Spring و Hibernate ، يمكنك استخدام AOP للسماح لـ Spring بإدارة معاملات السبات. يبدأ دمج الربيع والإسبات بشكل أساسي من جانبين: أحدهما هو استيراد حزم الجرة اللازمة ، والآخر هو تكوين ملف beans.xml. أدناه ندمج الربيع و hibernate خطوة بخطوة.
4.1 استيراد حزمة الجرة المقابلة
هناك حزمان رئيسيتان للجرة تحتاج إلى استيرادها عند دمج الربيع والإسبات ، spring4.2.4-persistence و C3P0-0.9.5.1. بالنسبة لملفات JAR المحددة في كل حزمة جرة ، يرجى الرجوع إلى لقطة الشاشة أعلاه ، ولن يتم وصفها هنا. الآن سنبدأ في تكوين ملف beans.xml.
4.2 تكوين مصدر بيانات مصدر البيانات
قم أولاً بتكوين مصدر البيانات ، ثم يمكن قتل الجزء المقابل في hibernate.cfg.xml. نظرًا لأنه تم تكوينه في فصل الربيع ، فسوف يقوم Spring بتهيئة مصدر البيانات هذا ، مما يعني أن هذا يتم تركه إلى الربيع لإكماله ، ويمكن حذف الجزء المقابل في hibernate.cfg.xml. على النحو التالي:
<!-com.mchange.v2.c3p0.combopooledDatasource Class في حزمة com.mchange.v2.c3p0 من C3p0-0.9.5.jar package-> <bean id = "dataSource"> <property name = "driverClass" value = "com.mysql.jdbc.driver value = "jdbc: mysql: // localhost: 3306/shop"/> <property name = "user" value = "root"/> <Propert
الجزء الذي يجب قتله في hibernate.cfg.xml:
4.3 تكوين SessionFactory
تم تكوين SessionFactory لإنشاء جلسة. بالإضافة إلى ذلك ، HibernateTemplate ممكن أيضا. ومع ذلك ، يتم استخدام SessionFactory هنا بدلاً من HibernateMeMplate لأن HibernateTemplate يتم توفيره في الربيع ويعتمد في الربيع. إذا لم يتم استخدام الربيع في يوم من الأيام ، فسيتم الإبلاغ عن خطأ. ويتم توفير SessionFactory بواسطة السبات ، لا مشكلة. HibernateTemplate يعتمد للغاية. دعونا نلقي نظرة على التكوين المحدد:
<!-org.springframework.orm.hibernate4.localsessionfactorybean في org.springframework.imt.hibernate4 حزمة من spring-orm-4.2.4.Release.jar package-> <bean id = "sessionfactory" value = "classpath: hibernate.cfg.xml" /> <!-تحميل ملف تكوين Hibernate-> < /bean>
لقد استخدمنا للتو البيانات في SessionFactory للإشارة إلى مصدر البيانات مع سمة Ref. لم نعد نستخدم التكوين هنا. نقوم بتحميل ملف hibernate.cfg.xml مباشرة ونستخدم التكوين في ملف تكوين Hibernate لجعله أكثر إيجازًا ومريحًا.
4.4 تكوين مدير المعاملات
يتم استخدام مدير معاملات التكوين لإدارة SessionFactory ، بحيث تتم إدارة جميع الجلسات التي تم إنشاؤها بواسطة SessionFactory بشكل إعلاني. التكوين كما يلي:
<!-org.springframework.orm.hibernate4.hibernatetransactionmanager فئة spring-lorm-4.2.4.release.jar حزمة في org.springframework.orm.hibernate4 package-> <bean id = "TransactactionManager"> <spertyfactory
وبالمثل ، يمكننا استخدام SessionFactory للتو تكوينه والرجوع إليه مع سمة Ref. في هذه المرحلة ، ستجد أن على طول الطريق من الأعلى عبارة عن سلسلة من العمليات ، مستشهدة بها واحدة تلو الأخرى.
4.5 تكوين المشورة (الإخطار)
الغرض من تكوين النصيحة هو تحديد الأساليب التي تتطلب نوع وضع المعاملة. انظر التكوين:
<tx: exply id = "excloy" المعاملة-manager = "TransactionManager"> <tx: entributes> <tx: method name = "save*" spection = "requiret
مطلوب يعني أنه إذا كانت هناك معاملة ، يتم دعم المعاملة الحالية. إذا لم يكن هناك ، يتم إنشاء معاملة جديدة. يتم تطبيق وضع المعاملة هذا على جميع الطرق التي تبدأ بحفظ وتحديث وحذف ، أي دعم المعاملات مطلوب عند إضافة قاعدة البيانات وحذفها وتعديلها. الدعم يعني أنه إذا كانت هناك معاملة ، يتم دعم المعاملة الحالية ، وإذا لم يكن هناك أحد ، فسيكون ذلك جيدًا.
4.6 تكوين جوانب AOP
<aop: config> <!-قم بتكوين فئات الحزم التي يجب إدخالها في المعاملة-> <aop: pointcut id = "pointcut" expression = "execution (*cn.it.shop.service.impl.*.*. style = "font-family: microsoft yahei ؛"> و pointcut أعلاه-> <!-aOP: يجب كتابة pointcut على AOP: Advisor ، وإلا سيتم الإبلاغ عن خطأ-> </aop: config>
AOP هو البرمجة الموجهة نحو الظل. AOP: PointCut يحدد الظل. يعني التكوين في خاصية التعبير أن جميع الطرق ضمن حزمة cn.it.shop.service.impl ، بغض النظر عن قيمة الإرجاع والمعلمات ، يجب إدخال المعاملة. تنتمي هذه الحزمة إلى طبقة DAO وتدير قاعدة البيانات مباشرة. AOP: نصيحة تجمع بين الإخطارات والأقسام. يمكننا استخدام النصيحة وتكوين النقاط أعلاه مباشرة لتقديمها. بعد هذا التكوين ، هذا يعني أن جميع الطرق تحت cn.it.shop.service.impl تحتاج إلى إدخال إدارة المعاملات. على وجه التحديد ، الأساليب التي تبدأ بحفظ وتحديث وحذف استخدام الطريقة المطلوبة ، والطرق الأخرى تستخدم طريقة الدعم. هذا يجعل من السهل فهم معنى هذا التكوين.
4.7 نتائج تكامل الاختبار
عندما قمنا ببناء بيئة السبات من قبل ، قمنا باختبار أننا نريد خدمة جديدة مباشرة لتشغيل قاعدة البيانات ، لأنها لم يتم دمجها مع الربيع في ذلك الوقت. الآن ، بعد تكوين beans.xml ، يُسمح لـ Spring بإدارة معاملات السبات. لذلك ، يحتاج الاختبار الحالي إلى تسليم الخدمة إلى إدارة الربيع ، وحقنها خلال الربيع ، والاعتماد على SessionFactory. إذا كان يمكن إدراج البيانات في قاعدة البيانات ، فهذا يعني أن المعاملة على ما يرام.
أولاً ، نحتاج إلى مطابقة هذه الخدمة في ملف Configuration File Beans.xml:
انسخ الرمز كما يلي: <bean id = "categoryservice">
<property name = "SessionFactory" ref = "SessionFactory" /> <!-يستخدم SessionFactory التبعية SessionFactory التي أجريناها مسبقًا->
</bean>
ثانياً ، نحتاج إلى إضافة طريقة إلى واجهة الخدمات الفئة وفرقة فئة التنفيذ الخاصة بها لاختبار حالة التكامل:
الواجهة العامة CatevoryService {public void save (فئة الفئة) ؛ // المستخدمة لاختبار تحديث الفراغ العام للبيئة (فئة الفئة) ؛ // المستخدمة لاختبار تكامل الربيع و hibernate} فئة الفئة العامة تنفذ CatevoryService {Override // الموقف الذي لا يوجد فيه تكامل مع SPRING Public Void Save (فئة الفئة) {// الحصول على جلسة الجلسة = hibernatesessionfactory.getssentess () ؛ جرب {// اليدوي Session.getTransaction (). begin () ؛ // تنفيذ Session.Save (الفئة) ؛ // إرسال يدوي Session.getTransaction (). الالتزام () ؛ } catch (استثناء e) {session.getTransAction (). rollback () ؛ رمي new RunTimeException (e) ؛ } أخيرًا {hibernatesessionfactory.closeessession () ؛ }} /*Spring and Hibernate كامل* / sessionfactory sessionfactory ؛ // تحديد SessionFactory // عندما تحتاج إلى استخدام SessionFactory ، ستقوم Spring بحقن SessionFactory في setSessionFactory (SessionFactory SessionFactory) {this.sessionFactory = SessionFactory ؛ } GetSession GetSession () {// احصل على جلسة من الموضوع الحالي. إذا لم يكن الأمر كذلك ، قم بإنشاء جلسة جديدة SessionFactory.getCurrentsession () ؛ } Override // الموقف بعد الربيع و hibernate يتم دمج تحديث الفراغ العام (فئة الفئة) {getSession (). التحديث (الفئة) ؛ }} الآن يمكننا إضافة طرق اختبار إلى فئة الاختبار لاختبار النتائج بعد دمج الربيع والإسبات:
Runwith (SpringJunit4ClassRunner.Class) contextConfiguration (مواقع ClassPath: Beans.xml ") الفئة العامة sshtest {resource تاريخ التاريخ الخاص ؛ Resource الخاص فئة الخدمات الخدمات ؛ test // اختبار الربيع IOC Development Environment public void springioc () {system.out.println (date) ؛ } test // test // بيئة تطوير Hibernate ، لأنه لا يوجد تكامل ، يمكنك مباشرة الفراغ العام الجديد HiHernate () {categoryservice catevoryservice = new CateSorviceImpl () ؛ فئة الفئة = فئة جديدة ("الرجال غير الرسمي" ، صحيح) ؛ categoryservice.save (فئة) ؛ } test // test public void hibernateandspring () {categoryservice.update (فئة جديدة (1 ، "Casual Women" ، true)) ؛ // categoryservice تم حقنها من الأعلى إلى الربيع}}ثم فحصنا قاعدة البيانات ووجدنا أن الفئة التي تحتوي على ID = 1 قد تم تعديلها في أسلوب المرأة غير الرسمية ، مما يعني أن التحديث كان ناجحًا. في هذه المرحلة ، تم دمج Spring و Hibernate بنجاح.
5. بناء بيئة Struts2
5.1 أضف التكوين المقابل وحزم الجرة
لقد وضعت حزمة JAR المطلوبة لـ Struts2 لتشغيلها في مكتبة Struts2.3.41 ، حتى أتمكن من تقديمها مباشرة ، ولن أكررها. بالإضافة إلى ذلك ، يجب تكوين ملف web.xml على النحو التالي:
<؟ XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xd <Spishose-name> e_shop </display-name> <-list-file-list> <lisp-file> index.jsp </iship-file> </iship-file-lister> <lipter> <filter-name> struts2 </filter-name> <ilter-class> org.struts.dispatcher.ng.filter.strutsparean> </filter> <filter-mapping> <filter-name> struts2 </filter-name> <url-pattern>*. الإجراء </url-pattern> </filter-mapping> </bil-app>
كما هو مذكور أعلاه ، قمنا بتكوين مرشح StrutSpreparexecuteFilter وضبطت نماذج عنوان URL للمرشح إلى *.
5.2 إنشاء الإجراء وتكوينه في ملف struts.xml
ننشئ إجراءً على النحو التالي:
يمتد فئة الفئة العامة ActionSupport {Private CatevoryService Service ؛ // يتم تعيين خدمات الفئة على رؤية الاختلافات بشكل حدسي قبل وبعد التكامل مع SPRING Public Void setCategoryService (CategoryService Service) {this.categoryService = CategoryService ؛ } public string update () {system.out.println ("---- update ----") ؛ System.out.println (CategoryService) ؛ // إخراج عائد مختلف "فهرس" ؛ } السلسلة العامة Save () {system.out.println ("---- Save ----") ؛ System.out.println (CategoryService) ؛ // فتح عوائد مختلفة "فهرس" قبل وبعد التكامل ؛ }} ثم نقوم بتكوين ملف struts.xml ، الذي يتم وضعه في دليل SRC:
<؟ category_update.actiocan: طريقة تحديث الوصول-> <action name = "category_*" method = "{1}" 5.3 اختبار بيئة Struts2
طريقة الاختبار هي: اكتب إجراء Access JSP ، وإذا كان يمكن إنشاء الإجراء ، فهذا يعني أن بيئة Struts2 على ما يرام. أي أنه يمكن إكمال سلسلة من العمليات في Struts2 بشكل طبيعي: JSP-> Struts.xml-> Action-> Struts.xml-> JSP ، بحيث تكون بيئة STRUTS2 جاهزة. دعونا نكتب فهرس بسيط. jsp
<٪@ page language = "java" import = "java.util.*" pageencoding = "utf-8" ٪> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> يمكن الوصول إليها-> </span> <a href = "$ {pagecontext.request.contextpath} /category_update.action"> تحديث الوصول </a> <a href = "category_save.action"> الوصول ثم ننشر المشروع التالي ، ونفتح خادم Tomcat ، وإدخال: http: // localhost: 8080/e_shop/index.jsp في المتصفح ، ستظهر صفحة JSP العادية ، ثم انقر فوق زريين ، ولا يزالون يقفزون إلى index.jsp ، ثم نلقي نظرة على معلومات الإخراج الخاصة بالرقم:
---تحديث---
باطل
---يحفظ---
باطل
هذا يدل على أنه تم الانتهاء من خط من Struts2 وليس هناك مشكلة في البيئة. في هذه المرحلة ، تم بناء بيئة تطوير Struts2.
نرى أن وحدة التحكم تخرج خالية ، مما يعني أن الخدمات الفئة فارغة ، مما يعني أننا لم نحصل على خدمة الفئة على الإطلاق ، لأننا لم ندمج مع الربيع ولم يتم حقنها ، لذلك لاغية أمر طبيعي. نحن نقلب على طول إخراج المعلومات من وحدة التحكم وسنجد رسالة: اختيار الفول (الدعامات) لـ (com.opensymphony.xwork2.ObjectFactory). تقول الأقواس إن الدعامات يتم إنشاؤها بواسطة Struts2 قبل دمجها مع الربيع.
6. دمج الربيع والدعامات 2
6.1 أضف حزمة الجرة المقابلة
عندما يتم دمج Spring و Struts2 ، تكون حزمة JAR أساسًا في Spring4.2.4-Web ، بما في ذلك Struts2-SPRENG-PLUGIN-2.3.24.1.JAR. لن يتم وصف حزمة الدليل مرة أخرى.
6.2 اترك الإجراءات وتبعياتها في إدارة الربيع
قم بتكوين الإجراء وتبعياته في ملف Configuration File Beans.xml. لدينا حاليًا إجراء واحد فقط ، تم تكوينه على النحو التالي:
<bean id = "date" /> <bean id = "categoryAction" scope = "prototype"> <property name = "categoryservice" ref = "categoryservice" /> <!
6.3 تعديل التكوين في Struts.xml
اتضح أنه في Struts.xml ، تتوافق سمة الفصل مع الاسم المؤهل بالكامل للعمل المحدد. الآن قم بتغيير قيمة سمة الفصل إلى قيمة المعرف للإجراء المكون في الربيع ، أي الفئة ، على النحو التالي:
<struts> <package name = "shop" تمدد = "Struts-Default"> <!-يتوافق الفئة مع قيمة المعرف للإجراء الذي تم تكوينه في الربيع ، لأنه يجب تسليمه إلى إدارة الربيع-> <Action name = "category_*" method = "{1}"> 6.4 تكوين المستمع
قم بتكوين مستمع ContextLoaderListener في web.xml بحيث يمكن تحميل ملفات تكوين الربيع عند بدء تشغيل الخادم. على النحو التالي:
<؟ XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xd <Spishose-name> e_shop </display-name> <-list-file-list> <lisp-file> index.jsp </iship-file> </iship-file-lister> <lipter> <filter-name> struts2 </filter-name> <ilter-class> org.struts.dispatcher.ng.filter.strutsparean> </filter> <filter-mapping> <filter-name> struts2 </filter-name> <url-pattern>*. الإجراء </url-pattern> </filter-mapping> <!-أولوية بدء تشغيل المستمع في web.xml أعلى من المرشحات ، لذلك لا يهم إذا تم تنسيقها أدناه- <StaNerer-Class> org.springframework.web.context.contextloaderListener </stanterer-class> </leader> <context-param> <param-name> contextConfigLocation </param-name> <Param-value> classpath: beans.xml </param-value>
6.5 نتائج تكامل الاختبار
نضيف عبارة جديدة إلى الإجراء لتحديث قاعدة البيانات ، على النحو التالي:
يمتد فئة الفئة العامة ActionSupport {فئة الفئة الخاصة ؛ // تعيين متغير عضو خاص لتلقي المعلمات التي يتم تقديمها بواسطة عنوان URL. لاحظ أنه ينبغي كتابة أساليب Get and Set أدناه. خدمة الخدمات الخاصة. public void setCategoryService (CategoryService CatevoryService) {this.categoryService = CategoryService ؛ } public string update () {system.out.println ("--- تحديث ---") ؛ System.out.println (CategoryService) ؛ // لأنه تم دمجه مع الربيع ، يمكنك الحصول على هذه الخدمات. ليس فارغا بعد طباعته خارج الفئة. // إضافة عبارة جديدة لتحديث إرجاع قاعدة البيانات "الفهرس" ؛ } السلسلة العامة Save () {system.out.println (CateSoryService) ؛ إرجاع "فهرس" ؛ } الفئة العامة getCategory () {فئة الإرجاع ؛ } public void setCategory (فئة الفئة) {this.category = الفئة ؛ }} ثم نقوم بتعديل ملف index.jsp ، على النحو التالي:
أقل href = "$ {pagecontext.request.contextpath} /category_update.action؟ ثم ننشر المشروع التالي ، ونفتح خادم Tomcat ، وإدخال: http: // localhost: 8080/e_shop/index.jsp في المتصفح ، ستظهر صفحة JSP العادية ، ثم انقر فوق الزر "Access Update" ، وما زالت القفز إلى index.jsp ، ثم نلقي نظرة على معلومات الإخراج الخاصة بالرقم:
--- تحديث --- cn.it.shop.service.impl.CategoryServiceImpl@7c5ecf80 hibernate: تحديث فئة set hot =؟ ، type =؟ أين المعرف =؟
يمكننا إخراج معلومات كائن الخدمات الفئة ، ويمكننا أيضًا إخراج عبارة SQL عند تنفيذ عبارة التحديث. ثم نستفسر عن قاعدة البيانات ونجد أنه تم تحديث نوع البيانات باستخدام المعرف = 2 إلى GGA وتم تحديث HOT إلى FALSE. نقلب إخراج المعلومات من وحدة التحكم إلى الأعلى وسنجد رسالة: اختيار Bean (Spring) لـ (com.opensymphony.xwork2.ObjectFactory) ، مع ربيع الأقواس. بالمقارنة مع الموقف أعلاه ، يمكننا أن نرى أنه بعد دمج Struts2 مع الربيع ، يتم تسليم الإجراء إلى الربيع للإدارة.
في هذه المرحلة ، تم الانتهاء من تكامل Struts2 و Hibernate4 و Spring4 ، ويمكننا تطويره في بيئة SSH التالية!
حزمة JAR الكاملة المطلوبة لتكامل SSH المقدمة في هذه المقالة: تنزيل مجاني
عنوان تنزيل رمز المصدر للمشروع بأكمله: //www.vevb.com/article/86099.htm
العنوان الأصلي: http://blog.csdn.net/eson_15/article/details/51277324
(ملاحظة: في النهاية ، يتم توفير تنزيل الكود المصدر للمشروع بأكمله! كل شخص مرحب به لجمع أو متابعة)
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.