مقدمة
SSH ليس إطارًا ، ولكنه دمج أطر عمل متعددة (Struts+Spring+Hibernate). إنه حاليًا إطار عمل تكامل مفتوح المصدر شهير لتطبيقات الويب ، ويستخدم لإنشاء تطبيقات ويب متعددة الطبقات مرنة وسهلة التقييد.
ينقسم النظام الذي يدمج إطار SSH إلى أربع طبقات من حيث المسؤولية: طبقة العرض التقديمي ، طبقة منطق العمل ، طبقة ثبات البيانات وطبقة وحدة المجال (طبقة الكيان).
نظرًا لأن البنية التحتية الشاملة للنظام ، فإن الدعامات مسؤولة عن فصل MVC. في الجزء النموذجي من إطار STRUTS ، يتحكم في القفزات التجارية ويستخدم إطار السبات لتوفير الدعم لطبقة الثبات. من ناحية ، يعد Spring حاوية IOC خفيفة الوزن ، مسؤولة عن العثور على التبعيات وتحديد المواقع وإنشاء وإدارة التبعيات بين الكائنات والكائنات ، ومن ناحية أخرى ، يمكن أن تجعل الدعامات وإسبات تعمل بشكل أفضل.
استخدم myeclipse لدمج أطر SSH الرئيسية الثلاثة وتنفيذ عرض تجريبي يحاكي تسجيل المستخدم ، المقابل للإصدار:
نسخة الدعامات: 2.1 ؛
إصدار الربيع: 3.1 ؛
نسخة السبات: 3.3 ؛
1. التحضير قبل التكامل
1. قم بإنشاء مشروع ويب على النحو التالي:
ملاحظة: يجب أن يكون اسم الحزمة الذي يدعم الإجراء "إجراء" ، ويجب أن ينتهي فئة الإجراء مع الإجراء ، أي أن النموذج يشبه xxxaction ، كما هو موضح في الشكل أعلاه
2. قم بإنشاء قاعدة بيانات وجدول:
إنشاء قاعدة بيانات sshdemo ؛ إنشاء جدول T_USER (ID int الأساسي المفتاح ، اسم المستخدم varchar (10) ، كلمة المرور varchar (20))
3. استيراد حزمة اتصال قاعدة البيانات C3P0JAR ، انقر لتنزيل:
C3P0-0.9.2-PRE1.JAR ، MySQL-Connector-Java-5.1.13-Bin.Jar
2. تكوين إطار الدعامات:
1. حدد المشروع وانقر بزر الماوس الأيمن لتحديد: myeclipse -> جوانب المشروع [إمكانات] -> تثبيت apache Struts (2.x) ، على النحو التالي:
2. حدد الإصدار ، هنا اخترت 2.1 ، انقر فوق "إنهاء" ، على النحو التالي:
3. بعد الانتهاء من الخطوات المذكورة أعلاه ، ستجد أن هناك ملفًا إضافيًا
<؟
4. في ملف web.xml في دليل الويب الخاص بـ Web-Inf ، يوجد قسم إضافي من رمز التكوين لمرشحات الدعامات ، على النحو التالي:
5. ارجع إلى الشكل أعلاه ، وتعديل * .
3. تكوين إطار الربيع:
1. راجع تكوين الدعامات ، حدد المشروع ، انقر بزر الماوس الأيمن واختر: Myeclipse -> جوانب المشروع [إمكانات] -> تثبيت الوجه الربيعي ، حدد الإصدار ، وحدد 3.1 على النحو التالي:
2. انقر فوق "إنهاء" وستجد أن هناك ملف ApplicationContext.xml في دليل SRC ، وملفات srpl-form.tld و spring.tld في دليل web-inf ، ويتم إضافة جزء من التعليمات البرمجية المتعلقة بتكوين الربيع في ملف web.xml. تم إكمال بناء إطار الربيع بشكل أساسي (سيتم مناقشة إدخال مساحة الاسم لاحقًا) ، كما هو موضح أدناه:
4. تكوين إطار السبات:
1. راجع تكوين الدعامات ، حدد المشروع ، انقر بزر الماوس الأيمن واختر: Myeclipse -> جوانب المشروع [إمكانات] -> تثبيت HibernateFacet ، حدد الإصدار ، وحدد 3.3 هنا على النحو التالي:
2. انقر فوق "إنهاء" وستجد أن هناك حزمة افتراضية إضافية في دليل SRC (يمكن حذفها) وقطعة من الكود في ملف web.xml (سيتم إعادة تكوينه لاحقًا) ، كما هو موضح أدناه:
3. استيراد حزم الجرة التي تدعم شرح التعليق التوضيحي "entity": حدد المشروع ، انقر بزر الماوس الأيمن لتحديد: myeclipse -> جوانب المشروع [القدرات] -> إدارة ... ، ثم اتبع الخطوات في الشكل التالي:
بعد الانتهاء من الخطوات المذكورة أعلاه ، يتم تصميم الأطر الرئيسية الثلاثة بشكل أساسي ، ثم يتم دمجها.
5. التكامل
1. من أجل منع ApplicationContext.xml من البحث عن الانتفاخ للغاية وسهل الإدارة ، نقوم بحفظ التكوين المتعلق بالإسبنات في ملف .xml آخر ، ثم استيراده في ApplicationContext.xml. الخطوات المحددة:
(1) إنشاء ملف يسمى hibernatecontext.xml في دليل SRC (نفس المستوى مثل ApplicationContext.xml) ، ونسخ المحتويات في ApplicationContext.xml ، ثم إجراء تغييرات ؛
(2) محتويات في ملف hibernatecontext.xml:
<؟ Xmlns: p = "http://www.springframework.org/schema/p" http://www.springframework.org/schema/beans/spring-beans-3.1.xsd "> <!-تكوين SessionFactory-> <bean id =" SessionFactory "> <!-سيتم تكوين خاصية DataSource في ملف ApplicationContext.xml. ref = "dataSource"> </sorterperation> <!-تعيين عناصر التكوين المتعلقة بـ Hibernate-> <property name = "hibernateProperties"> <!-Props Tag هي حقن خصائص Properties Type-> <!-يجب أن يكون المفتاح hibernate.prefix-> <props> key = "hibernate.dialect"> org.hibernate.dialect.mysqldialect </prop> <!-show_sql هو الغرض من طباعة عبارات SQL-> <propernate = "hibernate.show_sql"> true </prop> <! <!-أ) إنشاء-قم بإنشاء جدول بيانات عند تنفيذ البرنامج ، وحذف الجدول بعد التنفيذ. في التطوير الفعلي ، غالبًا ما يتم استخدامه للاختبار ب) إنشاء: إعادة إنشاء جدول البيانات في كل مرة يتم تنفيذ البرنامج ج) تحديث: عند تنفيذ البرنامج ، سيتم الحكم على أنه إذا كان هناك ، فلن يتم إنشاء الجدول ، وإلا فإن جدول البيانات سيتم إنشاؤه ، وسيتم إنشاء الحقول في الفئة المسبقة ، عند التنفيذ: مع الحقول الموجودة في الجدول ، سيتم الإبلاغ عن خطأ (بيئة الإنتاج)-> <prop key = "hibernate.hbm2ddl.auto"> التحقق من صحة </prop> </props> </property> <!-تكوين فئة الكيان من hibernate-> <property name = "packagestoscan"> <!-قائمة القائمة المستخدمة في مكان الإقامة []. قيمتها هي عمومًا الاسم الكامل لحزمة الفاصوليا المقابلة ، والفئات الموجودة في حزمة الفول تتوافق عمومًا مع الجدول في قاعدة البيانات-> <list> <value> com.beauxie.bean </value> </list> </sprement> </bean> <!-configation hibernateTemplate tump-> <bean id = Ref = "SessionFactory"> </property> </bean> </bans>
(3) حذف تكوين "SessionFactory" في ApplicationContext.xm (لأنه تم تكوينه في hibernatecontext.xml) ، ثم استيراد محتوى hibernatecontext.xml المعدل. بعد الاستيراد ، يكون محتوى ApplicationContext.xml كما يلي:
<؟ Xmlns: p = "http://www.springframework.org/schema/p" http://www.springframework.org/schema/beans/spring-beans-3.1.xsd "> <bean id =" datasource "> </bean> <!-استيراد ملفات تكوين الربيع الأخرى. إذا تم وضعها في ملف واحد ، فستبدو متضخمة -> <import Resource = "HibernateContext.xml"/> </bans>
2. استنادًا إلى مصدر البيانات الأصلي في ملف ApplicationContext.xm ، قم بتعديل التكوين (اسم قاعدة البيانات ، اسم المستخدم ، كلمة المرور ، إلخ) ( ملاحظة: يجب ألا تحتوي علامة القيمة على مسافات أو إدخال !! ) ، كما هو موضح أدناه:
<bean id = "datasource"> <property name = "jdbcurl"> <!-إذا كنت تستخدم سمة القيمة مباشرة بدلاً من علامة القيمة ، فأنت بحاجة إلى الهروب "و" واستخدام علامة القيمة. يجب ألا تحتوي العلامة على <span style = "color:#ff0000 ؛ <value> <! rue & prepstmtcachesqllimit = 256 & cacheprepstmts = true & prepstmtcachesize = 256 & rewriteBatchedStatements = true]]> </value> </property> <property name = "driverclass" value = "com.mysql.jdbc.driver"> </spleneration> <property name = "user" value = "root"> </propert name = "minpoolsize" value = "2"> </property> <property name = "maxpoolsize" value = "10"> </propert
3. في ApplicationContext.xm ، قم بتكوين الماسح الضوئي لـ Spring ، وذلك لإضافة تعليقات مكونات Spring إلى فئتنا ، ويمكن تحميل الفول تلقائيًا. الخطوات المحددة هي كما يلي: (1) تقديم مساحة اسم السياق ، ودعم علامة السياق ، وانقر فوق "مساحات الأسماء" في الأسفل ، ثم تحقق من عنصر السياق:
(2) تكوين ماسح الربيع:
<!-قم بتكوين ماسح الينابيع وأضف تعليقات مكونات الربيع إلى فئتنا لتحميل الفاصوليا تلقائيًا->
<Context: component-scan base-package = "com.beauxie.action ، com.beauxie.service ، com.beauxie.dao">
</سياق: مكون المساحة>
في هذه المرحلة ، تم إنشاء بيئات إطار عمل SSH الرئيسية الثلاثة ، والخطوة التالية هي تنفيذ تسجيل المستخدم بناءً على إطار SSH.
6. الحالة: تقليد بسيط لتسجيل المستخدم
1. رمز صفحة تسجيل مكتب الاستقبال ، index.jsp:
<٪@ page language = "java" import = "java.util.*" pageencoding = "utf-8" ٪> <٪ string path = request.getContextPath () ؛ String BasePath = request.getScheme () + ": //" + request.getServerName () + ":" + request.getServerPort () + path + "/" ؛ ٪> <! doctype html public "-// w3c // dtd html 4.01 Transitional // en"> <html> <head> <base href = "<٪ = basepath ٪"> <title> مرحبًا بك في التسجيل </title> <meta http-equiv = "pragma" http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "Expires" content = "0"> <meta http-equiv = "keywords" content = "keyword1 ، keyword2 ، keyword3"> <meta http-equiv = "description" content = type = "text/css" href = "styles.css">-> </head> <body> <form action = "$ {pagecontext.request.contextpath}/user/Regist" method = "post"> <!-يمكنك أيضًا استخدام user.usernam type = "text" name = "username"> <bword> كلمة المرور: <إدخال type = "password" name = "password"> <br> <input type = "submit" value = "registration"> </form> </body> </html>2. رمز فئة المستخدم:
حزمة com.beauxie.bean ؛ استيراد javax.persistence.entity ؛ استيراد javax.persistence.id ؛ استيراد javax.persistence.table ؛ /** * Author Beauxie * هنا يجب أن تكون خصائص المستخدم هي نفسها مثل الحقول في جدول T_User ، * خلاف ذلك ، تحتاج إلى تحديد الحقول يدويًا في الجدول المقابل للخصائص المختلفة */ @intity // map database absiale (name = "t_user") جدول T_USER الخاص معرف int ؛ // معرف المستخدم الخاص بالسلسلة الخاصة المستخدم ؛ } public void setId (int id) {this.id = id ؛ } السلسلة العامة getUserName () {return username ؛ } public void setusername (string username) {this.userName = username ؛ } السلسلة العامة getPassword () {return password ؛ } public void setPassword (سلسلة كلمة مرور) {this.password = password ؛ }} 3. رمز فئة Userdao:
حزمة com.beauxie.dao ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.orm.hibernate3.hibernateTemplate ؛ استيراد org.springframework.stereotePe.Repository ؛ استيراد com.beauxie.bean.user ؛ /*** Author Beauxie* Dao Layer ، تعمل على قاعدة البيانات*/ @ropository // هذه الخاصية تتوافق مع طبقة الثبات (عادةً طبقة Dao) ، مما يعني أنه يتم تسليمه إلى إدارة الربيع ، ولن يكون هناك حاجة إلى تحديد قيمة الفئة المتماثلة أيضًا ، حيث تم تدوين المبلغ الخاص بـ "splict". في ملف تكوين الربيع ؛ /*** تسجيل المستخدم ، أي إضافة سجل جديد إلى الجدول* param user*/public void adduser (مستخدم المستخدم) {// إضافة بيانات إلى قاعدة البيانات ، ويمكنك الحصول على template.save (مستخدم) ؛ }} 4. رمز فئة UserService:
حزمة com.beauxie.service ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.stereotype.service ؛ استيراد com.beauxie.bean.user ؛ استيراد com.beauxie.dao.userdao ؛ ] public void adduser (المستخدم) {// استدعاء طريقة adduser من dao layer userdao.adduser (user) ؛ }} 5. رمز فئة UserAction:
حزمة com.beauxie.action ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد org.apache.struts2.ServleTActionContext ؛ استيراد org.apache.struts2.convention.annotation.action ؛ استيراد org.apache.struts2.convention.annotation.namespace ؛ استيراد org.apache.struts2.convention.annotation.Results ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.context.annotation.scope ؛ استيراد org.springframework.stereotype.controller ؛ استيراد com.beauxie.bean.user ؛ استيراد com.beauxie.service.userservice ؛ /** * Author Beauxie * * // @controller // المستخدمة لتعليق مكون طبقة التحكم @namespace ("/user") // url prefix scope ("النموذج الأولي"). الافتراضي هو "Struts-Default" ، و reResults ({result (name = "ligistsuccess" ، location = "/msg.jsp")}) الطبقة العامة useraction { @autowired // حقن خدمة المستخدمين الخاصة تلقائيًا ؛ // الدعامات الافتراضية للاعتراض ". عمل وبدون أي لاحقة" @value = "Regist") // Access: /user/regist.action أو/user/Regist Public String Regist () {// get request httpsertrequest request = servletactionContext.getRequest () ؛ // احصل على نموذج username username = request.getParameter ("اسم المستخدم") ؛ سلسلة كلمة مرور = request.getParameter ("كلمة المرور") ؛ // مغلف مستخدم UserBean = مستخدم جديد () ؛ user.setid (1000) ؛ user.setUserName (اسم المستخدم) ؛ user.setPassword (كلمة المرور) ؛ // استدعاء طريقة طبقة الخدمة لإضافة سجل إلى Service.AdDuser (المستخدم) ؛ // احفظ معلومات المطالبة في مجال الطلب وعرض الطلب. إرجاع "منسقية" ؛ }} 6. واجهة مطالبة الرسائل: رمز msg.jsp ، على النحو التالي:
<٪@ page language = "java" import = "java.util.*" pageencoding = "utf-8" ٪> <٪ string path = request.getContextPath () ؛ String BasePath = request.getScheme () + ": //" + request.getServerName () + ":" + request.getServerPort () + path + "/" ؛ ٪> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<٪ = basepath ٪"> <title> مطالبة الرسائل </title> <meta http-equiv = "pragma" = "no-cache" content = "no-cache"> <meta http-equiv = "Expires" content = "0"> <meta http-equiv = "keywords" content = "keyword1 ، keyword2 ، keyword3"> <meta http-equiv = "description description =" this is is my part "<! HREF = "STYLES.CSS"> -> </head> <body> $ {msg} </body> </html>7. أضف المشروع إلى الخادم ، وابدأ الخدمة ، وفتح المتصفح ، وزيارة: http: // localhost/sshdemo/user/regist
8. أدخل اسم المستخدم وكلمة المرور ، انقر فوق "تسجيل" لعرض النتائج:
9. يخرج وحدة التحكم عبارة SQL (تم تكوين الإخراج وتم تجميل عبارة SQL في ملف HibernateContext.xml):
10. عرض نتائج قاعدة البيانات:
انتهت هذه الحالة البسيطة. لا توجد مشكلة في التحقق من البيانات المقدمة من النموذج والرمز المشتعلة. يجب تحديثه في المستقبل.
7. الملخص:
1. يجب تقديم تكامل الأطر الرئيسية الثلاثة أولاً ثم دمجها ؛
2. تأكد من تذكر استيراد حزمة جرة قاعدة البيانات ؛
3. يجب وضع فئة الإجراء تحت اسم الحزمة "الإجراء" ، ويجب أن ينتهي اسم الفصل مع الإجراء ، مثل "XXXAction" ؛
4. عند تكوين Hibernate ، تأكد من استيراد حزم الجرة التي تدعم التعليق التوضيحي "entity" ؛
5. يمكنك تحديد نوع الطلب للدعامات التي تم اعتراضها في ملف Struts.xml ، والذي يضع افتراضيًا إلى.
6. يمكنك تحديد نوع المرشح لفلتر الدعامات في ملف web.xml. الافتراضي هو *.Action ، ويجب تغييره إلى / *؛
7. في ملف ApplicationContext.xm ، تحتاج إلى تكوين: SessionFactory ، فئة كيان Hibernate ، قالب HibernateTemplate ، مصدر بيانات مصدر البيانات ، والماسح الضوئي الربيعي (بما في ذلك hibernatecontext.xml) ؛
8. يجب أن تضيف كل فئة التعليقات التوضيحية المقابلة ، ويجب إضافة الأساليب في العمل أيضًا.
قم بتنزيل رمز مصدر المثيل:
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.