لقد تعلمت للتو إطار عمل SpringMVC مؤخرًا ، ويشعر أنه في الواقع أكثر ملاءمة ويقلل الكثير من الكود الزائد. فعلت مشروع صغير لممارسة. هذا هو مشروع تطبيق SpringMVC أساسي. لم يتم استخدام MyBatis. وظائف المشروع كاملة تمامًا ، وتحقق الوظائف الأساسية للإضافة والحذف والتعديل والبحث.
بيئة المشروع:
نظام: Win10
بيئة التطوير: EclipseoxygenreleAsecandidate3 (4.7)
-JDK الإصدار: Java1.8 (121)
-mysql: 5.7
-صنف: 4.0
-Tomcat: 8.5
التقنيات المستخدمة:
springmvcspringjspjdbcjavabeanjsjstl
عنوان الوصول: http: // localhost: 8080/اسم المشروع/الكل
بيان: أنا مجرد مبتدئ بدأ للتو ، وهناك حتما أي أخطاء في الكود الذي كتبته. إذا وجدت ذلك ، يرجى الإشارة إليها ، شكرا لكم الجميع.
تم نشر العملية التفصيلية أدناه
1. قم أولاً بإنشاء مشروع ويب (DynamicWebProject)
كتبت اسم المشروع بنفسي ، لم يعد هناك تفصيل
2. هذا هو بنية المشروع المكتملة
لقد استخدمت الوظيفة للتو ولم أستخدم الواجهة. لقد استخدمت فقط ثلاث فئات بسيطة ، فئة الكيان تحت حزمة الفول ، وفئة الوصول إلى قاعدة بيانات DAO ، وفئة التحكم في واجهة طبقة وحدة التحكم.
جميع حزم الجرة المشار إليها موجودة في مجلد/webcontent/web-inf/lib ، والذي يختلف عن مشاريع Java العادية.
3. رمز جافا محدد
1. فئة الدراسة ، يحتاج فئة الكيان أولاً إلى كتابة جافابين. منجم طالب مثل Javabean. الرمز التفصيلي كما يلي:
Package Bean ؛ Public Class student {private Integer ID ؛ // id id idt ide private name ؛ // اسم الطالب الخاص Javascore ؛ // Java Score private double htmlscore ؛ // html score private double cssscore ؛ // css score private double otalscore ؛ عدد صحيح عام getId () {معرف الإرجاع ؛ } public void setId (integer id) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } public double getjavascore () {return javascore ؛ } public void setjavascore (double javascore) {this.javascore = javascore ؛ } public double gethtmlscore () {return htmlscore ؛ } public void sethtmlscore (double htmlscore) {this.htmlscore = htmlscore ؛ } public double getCssscore () {return cssscore ؛ } public void setcssscore (double cssscore) {this.cssscore = cssscore ؛ } public double gettotalscore () {return TetalScore ؛ } public void settotalscore (doubletalscore) {this.totalscore = TotalScore ؛ }}2. StudentDao ، فئة تشغيل الوصول إلى قاعدة البيانات هي رمز طبقة DAO ، أي طبقة الوصول إلى البيانات. فيما يلي فئة مغلفة بموجب الربيع (JDBCtemplate) ، والتي تحتوي على بعض الطرق لتشغيل قاعدة البيانات. ليست هناك حاجة لكتابة الكثير من التعليمات البرمجية المتكررة بنفسك ، فقط اكتب عبارات SQL. هنا هو الرمز المحدد:
حزمة dao ؛ استيراد java.sql.resultset ؛ استيراد java.sql.sqlexception ؛ استيراد java.sql.types ؛ استيراد java.util.list ؛ استيراد org.springframework.jdbc.core.jdbctemplate { / ** * @fields jdbctemplate: todo * / private jdbctemplate jdbctemplate ؛ / ** * الفئة المقدمة بواسطة Spring * * param jdbctemplate * نوع القيمة الإرجاع: void * author Janinus */ public void setjdbctemplate (jdbctemplate jdbctemplate) {this.jdbctemplate = jdbctemplate ؛ } / ** * استعلام جميع الطلاب * * return قيمة القيمة: قائمة <Tudtude> * Author Janinus * / Public List <Tudent> QueryAll () {String sql = "Select id ، name ، javascore ، htmlscore ، cssscore from student" ؛ // خريطة نتيجة الاستعلام في فصل الطالب ، وأضفه إلى القائمة ، وإرجاع jdbctemplate.query (SQL ، New StudentMapper ()) ؛ } / ** * QUERY by name * * param اسم * return نوع القيمة الإرجاع: قائمة <Tudtude> * Author Janinus * / Public List <Tudent> QueryByName (اسم السلسلة) {String sql = "Select id ، name ، Javascore ، htmlscore ، cssscore من student where" ٪ "". return jdbctemplate.query (SQL ، New StudentMapper ()) ؛ } / ** * أضف الطالب * * param student * return قيمة الإرجاع نوع: boolean * author Janinus * / public boolean addstu (طالب الطالب) {String sql = "insert في الطالب (id ، name ، javascore ، htmlscore ، cssscore) (0 ،؟ ،؟ ،؟ ،؟ ،؟ ،؟) return jdbctemplate.update (SQL ، كائن جديد [] {student.getName () ، student.getjavascore () ، student.gethtmlscore () ، student.getcssscore ()} ، new int [] {types.varchar ، types.double ، types.double ، types.double ، } / ** * حذف الطالب * * param id * return نوع القيمة الإرجاع: boolean * author Janinus * / public boolean deletestu (integer id) {String sql = "delete from student where where where where where =؟" ؛ return jdbctemplate.update (sql ، id) == 1 ؛ } / ** * تحديث معلومات الطالب * * param student * return نوع القيمة الإرجاع: Boolean * Author Janinus * / public boolean updatestu (student student) {String sql = "update student set name =؟ ، javascore =؟ ، htmlscore =؟ ، cssscore =؟ where id =؟" كائن stuobj [] = كائن جديد [] {{student.getName () ، student.getjavascore () ، student.gethtmlscore () ، student.getcssscore () ، student.getid ()} ؛ return jdbctemplate.update (sql ، stuobj) == 1 ؛ } / ** * إرجاع النتيجة الإجمالية لأفضل الطلاب * * param num * return نوع القيمة الإرجاع: قائمة <Tudtude> * Author Janinus * / Public List <Tudtude> TopNum (int num) {String sql = "select id ، name ، javascore+htmlscore+cssscore from javascore+htmlscore+ return jdbctemplate.query (SQL ، New Rowmapper <Tudent> () {Override Public Student Maprow (ResultSet RS ، int rownum) يلقي sqlexception {// todo todo method method studtude = new student () ؛ student.SettOtalScore (Rs.GetDouble (3)) ؛ } / ** * * * Mappase Database StudentMapper * * classname studentMapper * Author Janinus * date 27 يونيو 2017 * version v1.0 * / class studentMapper تنفذ rowmapper <stustude> {oovride studentment maprow (results rs ، int rownum) throws squpection student.setid (rs.getint (1)) ؛ student.setName (rs.getString (2)) ؛ student.setjavascore (rs.getDouble (3)) ؛ student.sethtmlscore (rs.getDouble (4)) ؛ student.setcssscore (rs.getDouble (5)) ؛ عودة الطالب }}}3. StudentController ، فئة التفاعل في الواجهة الأمامية هي أخيرًا فئة التحكم في طبقة الطالب المرتبطة بتفاعل المستخدم. يستخدم هذا الفئة بشكل أساسي للجمع بين الواجهة الأمامية والخلفية لتحقيق التفاعل الكامل. هنا هو الرمز المحدد:
وحدة تحكم الحزمة ؛ استيراد org.springframework.context.applicationContext ؛ استيراد org.springframework.context.support.classpathxmlapplicationcont ؛ import org.springframework.stereopee.controller org.springframework.web.bind.annotation.requestmapping ؛ import bean.student ؛ استيراد dao.studentdao ؛ controllerpublic class studentController requestmapping (value = "/all") السلسلة العامة QueryAll (نموذج النموذج) {ApplicationContext Context = new ClassPathxMlActionContext ("ApplicationContext.xml") ؛ // الحصول على DAO studentdao dao = (studentdao) context.getBean ("dao") ؛ model.addattribute ("students" ، dao.queryall ()) ؛ model.addattribute ("Tops" ، dao.topnum (3)) ؛ إرجاع "index.jsp" ؛ }/** * ابحث عن الطلاب حسب الاسم ، واستخدم البحث الضبابي ، وأرجع النتيجة إلى index.jsp * * param name * param model * return type type type: string * author Janinus */ @requestmapping (value = "/QueryByName") السلسلة العامة classpathxmlapplicationContext ("ApplicationContext.xml") ؛ // احصل على DAO من IOC Container Studentdao Dao = (studentdao) context.getBean ("dao") ؛ Model.AdDattribute ("الطلاب" ، dao.querybyname (name)) ؛ model.addattribute ("Tops" ، dao.topnum (3)) ؛ إرجاع "index.jsp" ؛ }/** * أضف طالبًا جديدًا وأرجع النتيجة إلى جميع الصفحة ، تم إعادة توجيهها من الجميع إلى الصفحة الرئيسية * param name * param javascore * param htmlscore * @param cssscore * model @param type type: string string ، string jav ، HTMLSCORE ، String CSSSCORE ، MODEL) studentdao dao = (studentdao) context.getBean ("dao") ؛ الطالب الطالب = طالب جديد () ؛ student.setName (name) ؛ student.setjavascore (double.parsedouble (javascore)) ؛ student.sethtmlscore (double.parsedouble (htmlscore)) ؛ student.setcssscore (double.parsedouble (cssscore)) ؛ نتيجة منطقية = dao.addstu (طالب) ؛ إذا (النتيجة) نموذج. else model.addattribute ("msg" ، "<script> ALERT (" تمت إضافة بنجاح! ") </script>") ؛ العودة "الكل" ؛ }/** * حذف الطالب حسب المعرف * param معرف * param model * return نوع القيمة الإرجاع: string * author Janinus */ @REquestMapping (value = "/deleteByid") السلسلة العامة deletebyid (string ، model) studentdao dao = (studentdao) context.getBean ("dao") ؛ نتيجة منطقية = dao.deletestu (integer.parseint (id)) ؛ إذا (النتيجة) نموذج. else model.addattribute ("msg" ، "<script> ALERT ('DELETE بنجاح!') </script>") ؛ العودة "الكل" ؛ }/** * * * param id * param الاسم * param javascore * param htmlscore * param cssscore * param model * @return return type: string * unuthor janinus */ @requestmapp (value = "/update") {ApplicationContext Context = جديد classPathxMlAppLicationContext ("ApplicationContext.xml") ؛ studentdao dao = (studentdao) context.getBean ("dao") ؛ الطالب الطالب = طالب جديد () ؛ student.setId (integer.parseint (id)) ؛ student.setName (name) ؛ student.setjavascore (double.parsedouble (javascore)) ؛ student.sethtmlscore (double.parsedouble (htmlscore)) ؛ student.setcssscore (double.parsedouble (cssscore)) ؛ نتيجة منطقية = dao.updatestu (طالب) ؛ إذا (النتيجة) نموذج. else model.addattribute ("msg" ، msg ("تعديل تعديل")) ؛ العودة "الكل" ؛ }/** * رسالة صفحة إلى pop up * param msg * return نوع القيمة الإرجاع: string * author Janinus */public string msg (string msg) {return "<script> ALERT ('" + msg + "') </script>" ؛ }}تم الانتهاء من جميع رمز Java ، ولم يتم ترك سوى تكوين XML المحدد وصفحة الواجهة الأمامية أدناه.
4. صفحة الواجهة الأمامية
نظرًا لأنه مشروع صغير بسيط ، فإن JS و CSS كلها على نفس الصفحة ، ولم يتم فصلها ، صفحتين فقط ،
1.index.jsp
الصفحة الرئيسية ، لقطة الشاشة
يحرر
رمز مفصل:
<٪@ page language = "java" contentType = "text/html ؛ charset = utf-8" pageencoding = "utf-8" ٪> <٪@ taglib prefix = "fn" uri = "http://java.sun.com/jsp/jstl/functions" ٪> <٪ taglib prefix = "c" uri = "http://java.sun.com/jsp/JSTL/CORE } .lall {العرض: 40 ٪ ؛ الهامش: 20px 100px ؛ محاذاة النص: المركز ؛ الارتفاع: 300 بكسل ؛ تعويم: اليسار. } الجدول {العرض: 80 ٪ ؛ الهامش: 20 بكسل Auto ؛ حجم الخط: 14px ؛ الفائض: السيارات ؛ } #tab02 {width: 80 ٪ ؛ الهامش: 20 بكسل Auto ؛ حجم الخط: 14px ؛ } الجدول th ، table td {border-bottom: 1px #000 Solid ؛ Line-Leight: 23px ؛ } #edit_comm {width: 500px ؛ الهامش: 20 بكسل Auto ؛ الحدود اليسرى: 3px الصلبة #000 ؛ العرض: لا شيء ؛ } #add_comm {width: 500px ؛ الهامش: 20 بكسل Auto ؛ الحدود اليسرى: 3px الصلبة #000 ؛ } #ALL_COMM {الارتفاع: 600px ؛ } .edit_stu {width: 200px ؛ الارتفاع: 30 بكسل ؛ الخلفية: #fff ؛ Font-Family: "Microsoft ya Black Light" ، "Arial Black" ؛ حجم الخط: 18 بكسل ؛ الحدود: لا شيء ؛ Border-Bottom: 1px Solid #000 ؛ الهامش: 20px 10px ؛ } </style> <script src = "http://code.jquery.com/jquery-latest.js"> </script> <script type = "text/javaScript"> $ (function () {$ ("#cancel"). }) $ ("input"). addClass ("edit_stu") ؛ } الدالة add_reg () {var name = $ ("#add_edit_name"). val () ؛ var javascore = $ ("#add_edit_java"). val () ؛ var htmlscore = $ ("#add_edit_html"). val () ؛ var cssscore = $ ("#add_edit_css"). val () ؛ var namenot = name! = null && name! = '' ؛ var javascorenot = javascore! = null && javascore! = '' ؛ var htmlscorenot = htmlscore! = null && htmlscore! = '' ؛ var cssscorenot = cssscore! = null && cssscore! = '' ؛ if (namenot & javascorenot && htmlscorenot && cssscorenot) return true ؛ عودة أخرى خاطئة. } الدالة delete_stu (id) {var result = تأكيد ("هل تم حذفه؟") ؛ if (النتيجة) window.location.href = "deletebyid؟ id =" rel = "خارجي nofollow" +id ؛ } الدالة edit_stu (id) {var name = $ ("#name"+id) .text () ؛ var java = $ ("#java"+id) .text () ؛ var html = $ ("#html"+id) .text () ؛ var css = $ ("#css"+id) .text () ؛ $ ("#edit_id"). val (id) ؛ $ ("#edit_name"). val (name) ؛ $ ("#edit_java"). val (java) ؛ $ ("#edit_html"). val (html) ؛ $ ("#edit_css"). val (css) ؛ $ ("#add_comm"). fadeout () ؛ $ ("#edit_comm"). fadein () ؛ } </script> <body> $ {msg} <h1 align = "center"> إدارة الطلاب </h1> <div id = "all_comm" <td> css Score </td> <td> العملية </td> </td> </td> <c: foreach edine = "$ {{} <td id = "java $ {student.id}"> $ {student.javascore} </td> <td id = "html $ {student.id}"> $ {student.htmlscore} </td> <td id = "css $ { onClick = "delete_stu ($ {{student.id})"> حذف </a> | <a onClick = "edit_stu ($ {{student.id})"> تحرير </a> </td> </td> </td> </c: foreach> <td> id </td> <td> name </td> <td> إجمالي الدرجات </td> </tr> <c: foreach عناصر = "$ {TOPS}" var = "student" varstatus = "i"> <tr> $ {i.Index+1} } </td> <td> $ {student.name} </td> <td id = "name $ {student.id} t"> $ {student.totalscore} </td> </tr> </c: foreach> </lid> إذا لم يتم عرضه: <a onclick = "refush () <h2> ابحث عن الطالب </h2> <form action = "querybyname" method = "post"> <input type = "text" placeholder = "student name" name = "name"> <input name = "name" /> <input type = "text" placeholder = "java score" name = "javascore" /> <input type = "text" placeholder = "html score" name = "htmlscore" /> <input type = "text" placeholder = "css score" name = "cssscore" /> id = "edit_comm"> <h2 id = "edit_title"> تحرير الطالب </h2> <form action = "update" method = "post"> <input id = "edit_name" name = "name" /> <input type = "text" placeholder = "java score" id = "edit_java" name = "javascore"> <input type = "text" placeholder = "html score" id = "edit_html" name = "htmlscore" /> id = "edit_css" name = "cssscore"/> <input type = "subvice" value = "تأكيد تعديل"/> <إدخال type = "button" value = "إلغاء تعديل" id = "cancel"/> </form> </viv> </body> </html>2. login.jsp
<٪@ page language = "java" contentType = "text/html ؛ charset = utf-8" pageencoding = "utf-8" ٪> <! "http://www.w3. rel = "nofollow external" rel = "nofollow"> أدخل الصفحة الرئيسية </a> </h1> </body> </html>
5. تكوين الملفات التفصيلية
1. ApplicationContext.xml
هذا هو ملف تكوين حاوية IOC الخاصة بـ Spring ، وتستخدم لتنفيذ حقن التبعية. ما يلي هو الرمز المحدد:
<؟ xmlns: context = "http://www.springframework.org/schema/context" xmlns: tx = "http://www.springframework.org/schema/tx XSI: Schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5 <!-تحميل فئة برنامج التشغيل-> <property name = "driverClassName" value = "com.mysql.jdbc.driver"> </property> <!-عنوان الوصول إلى قاعدة البيانات-> <property name = "url" value = "jdbc: mysql: // localhost: 3306/test"> value = "root"> </property> <!-كلمة مرور الوصول إلى قاعدة البيانات-> <property name = "password" value = "123123"> </property> </boan> <!-إدارة معاملات قاعدة البيانات المقدمة بواسطة Spring-> <bean id = "txmanager"> <property name = "datasource" ref = "datasource" المعاملة-manager = "txmanager"/> <!-تكوين فئة كيان javabean-> <bean id = "studentbean"> <!-السمة التكوين التلقائي-> </bean> <!-فئة تشغيل قاعدة البيانات المقدمة حسب الربيع-> <bean id = "jdbctemplate" التكوين غير صالح-> <bean id = "controller"> <property name = "dao" ref = "dao"> </propert
2. SpringMVC-Servlet.xml ، فئة تكوين MVC Spring ،
لقد قمنا بتنفيذ معظم مدونة Servlet بالنسبة لنا ، ونحن بحاجة فقط إلى كتابة تطبيق تجاري. أدناه هو الرمز المحدد
<؟ xmlns: p = "http://www.springframework.org/schema/p" http://www.springframework.org/schema/beans/spring-beans-3.0.xsd <!-مسح الفئة تلقائيًا ضمن الحزمة المحددة-> <السياق: مكون المسح الضوئي backage = "Controller" /> </bans>
3. web.xml
هذا هو ملف التكوين لمشروع الويب ، وما يلي هو الرمز الرئيسي:
<؟ XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5. <filter-name> encodingFilter </filter-name> <lipter-class> org.springframework.web.filter.characterencodingfilter </filter-class> واجهة-> <-list-file-lister> <lispile-file>/all </iship-file> <self-file> index.html </ishified-file> <lispile-file> index.htm </iship-file> </iship-file-lister> <!-config springmv servlet-> servlet> <servlet-name> springmvc <Srevlet-Class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <load-on-startup> 1 </toad-on-startup> </urdlet>
6. ملخص المشروع والملحق
هذا المشروع هو برنامج الممارسة اليومي. لكي أكون أكثر كفاءة ، قمت بمراجعة العملية الكاملة مرة أخرى وأصبحت على دراية بها كثيرًا.
التذييل إلى حزمة الجرة المستخدمة للمشروع:
بالإضافة إلى حزمة الربيع ، هناك أيضًا حزمة جرة MySQL-JBDC وحزمة JSTL JAR
عنوان التنزيل:
حزمة جرة Spring Framework (إصدار اختياري): موقع Spring الرسمي
mysql-jdbc.jar (إصدار اختياري): موقع MySQL الرسمي
JSTL.JAR (الإصدار الاختياري): العنوان الرسمي Maven
ما سبق هو المحتوى الكامل لهذه المقالة حول المثال الكامل لتنفيذ SPRING MVC لتنفيذ قاعدة بيانات MySQL والحذف والتعديل والبحث. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى هذا الموقع:
شرح مفصل لتكوين وحدة الويب في الربيع
مقدمة نمط الراحة springmvc ومثل رمز التنفيذ مثال
ينفذ اعتراض springmvc علامة واحدة
إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!