تشاركك هذه المقالة معك في تنفيذ Javaweb لنظام إدارة معلومات الطلاب للرجوع إليه. المحتوى المحدد كما يلي
الطبعة الأولية
لا توجد صفحات إضافية للإصدار الأولي. لأنني لم أتعلم الكثير عن الواجهة الأمامية ، فإن الواجهة قبيحة. التقنيات الرئيسية: JSP ، Javabean ، Servlet ، JDBC الرئيسية هي كما يلي:
صفحة تسجيل الدخول
الصفحة الرئيسية
أضف الطلاب
عرض جميع الطلاب
استفسار من الطلاب
دليل المشروع
قاعدة البيانات
جدولين ، جدول المستخدم وجدول الطالب. من أجل استخدام أداة DBUTILS ، تأكد من الانتباه إلى مطابقة تسمية السمة لجدول قاعدة البيانات وطرق GET () و ST () من Javabean. على سبيل المثال ، uname في جدول T_USER هو: سلسلة خاصة uname ، getUname () ، setuname () في Javabean.
إنشاء Table T_USER (UID char (32) المفتاح الأساسي ، Uname varchar (40) وليس NULL ، uppassword varchar (40) غير فارغ) ؛
إنشاء جدول T_Student (SID char (32) المفتاح الأساسي ، sname varchar (40) غير فارغ ، جنس varchar (6) غير فارغ ، عيد ميلاد (10) ، telphone varchar (15) غير فارغ ، البريد الإلكتروني varchar (40) ، الوصف varchar (500)) ؛
نقطة معرفة صغيرة
تسجيل الدخول
عند تسجيل الدخول ، يتم الحكم على ما إذا كان اسم إدخال اسم المستخدم أو كلمة المرور فارغًا بواسطة رمز JS لصفحة تسجيل الدخول. عندما لا يكون فارغًا ، استعد قاعدة البيانات من خلال معلومات اسم المستخدم. إذا تم العثور على المستخدم ، فسيتم تسجيل الدخول بنجاح ، وإلا فمن الضروري تحديد ما إذا كان اسم المستخدم أو خطأ كلمة المرور. تتم معالجة هذه المعاملة في طبقة الخدمة ، وطبقة DAO مسؤولة فقط عن العثور على المستخدمين من خلال أسماء المستخدمين.
رمز المستخدمين:
الفئة العامة sterveservice {private userDao userDao = new userDao () ؛ استعلام المستخدم العام (نموذج المستخدم) يلقي استثناء {user user = userDao.query (form) ؛ // لم يتم العثور على المستخدم إذا (user == null) {رمي استثناء جديد ("اسم المستخدم غير موجود") ؛ } // تم العثور على المستخدم ، لكن كلمة المرور لم تتطابق مع (! form.getUpassword (). equals (user.getUpassword ())))) {رمي استثناء جديد ("خطأ كلمة المرور") ؛ } إرجاع المستخدم ؛ }}مرشح مرشح
من أجل منع المستخدمين الذين لم يتم تسجيل الدخول من القدرة على الوصول مباشرة إلى صفحات أخرى ، هناك حاجة إلى مرشح. ضع جميع الصفحات خارج صفحة تسجيل الدخول بشكل منفصل في مجلد المستخدمين. عندما يقوم المستخدم بتسجيل الدخول بنجاح ، احفظ معلومات المستخدم في خاصية "SessionUser" للجلسة. يحدد المرشح ما إذا كانت هذه الخاصية فارغة. إذا كان فارغًا ، فهذا يعني أن تسجيل الدخول إلى المستخدم غير ناجح ولن يطلقه. انتقل مباشرة إلى صفحة تسجيل الدخول. إذا لم يكن فارغًا ، فقم بإطلاقه. الكود الرئيسي للمرشح:
Dofilter public void (طلب servletRequest ، استجابة servletResponse ، سلسلة filterchain) يلقي ioexception ، servleTexception {// 1. احصل على جلسة // 2. تحديد ما إذا كان هناك مستخدم في الجلسة. إذا كان الأمر كذلك ، أطلق // 3. خلاف ذلك ، انتقل إلى صفحة تسجيل الدخول httpservletrequest req = (httpservletrequest) ؛ مستخدم المستخدم = (المستخدم) req.getSession (). getAttribute ("SessionUser") ؛ if (user! = null) {chain.dofilter (request ، response) ؛ } آخر {httpservletresponse resp = (httpservletresponse) ؛ Resp.SendRedirect (req.getContextPath () + "/index.jsp") ؛ }}استعلام مجموعة متعددة الشرط
في صفحة البحث المتقدم ، هناك أربعة خيارات للاختيار: اسم الطالب ، والجنس ، ورقم الهاتف المحمول ، وعنوان البريد الإلكتروني. يمكن ترتيب الشروط الأربعة ودمجها بشكل تعسفي. واجهت هذه المشكلة من قبل عند كتابة مشاريع QT. لقد استخدمت ربط عبارات SQL في ذلك الوقت ، لكنني لم أكن أتوقع أن يكون استخدام "حيث 1 = 1" أمرًا مزعجًا للغاية. الكود التالي كلاسيكي ويستخدم استعلامات غامضة لجعل البحث أكثر إنسانية.
القائمة العامة <Student> Query (Student S) {try {StringBuilder SQL = New StringBuilder ("SELECT * from t_student حيث 1 = 1") ؛ قائمة <Object> params = new ArrayList <Object> () ؛ if (s.getSname ()! = null &&! params.add ("٪" + s.getSname () + "٪") ؛ } if (s.getGender ()! = null &&! params.add (S.GetGender ()) ؛ } if (S.GetTellPhone ()! = null &&! params.add ("٪" + S.GetTellPhone () + "٪") ؛ } if (s.getemail ()! = null &&! params.add ("٪" + s.getemail () + "٪") ؛ } return qr.query (sql.toString () ، New Beanlisthandler <Tudtude> (student.class) ، params.toarray ()) ؛ } catch (استثناء e) {رمي new runTimeException (e) ؛ }}Evolution Edition: ترقيم الصفحات
عرض صفحات الاستعلام لجعلها أكثر جمالا. الصفحة مثل: الصفحة N/Total M الصفحة الرئيسية الصفحة السابقة 1 2 3 4 5 6 7 8 9 10 الصفحة التالية الصفحة الأخيرة.
تأثير ترقيم الصفحات على النحو التالي:
البيانات المطلوبة للترقيم:
الصفحة الحالية: pagecode
إجمالي الصفحات: TotalPage
إجمالي عدد الرقم القياسي: TotalRecord
عدد السجلات لكل صفحة: Pagesize
بيانات الصفحة الحالية: قائمة الفول
PageBean
نظرًا لأن هذه البيانات المليئة يجب أن يتم تمريرها دائمًا بين الطبقات! نحن نغلف هذه البيانات المليئة بالجافابين ، والتي تسمى الفاصوليا المليئة ، مثل PageBean. عند استخدام استعلام متعدد الأداء والنقر على الصفحة 2 ، لا يحتوي الارتباط التشعبي في الصفحة 2 على شروط استعلام ، وستفقد شروط الاستعلام ، لذلك نحتاج إلى الحفاظ على ظروف الاستعلام على جميع الروابط على الصفحة! نريد حفظ الحالة كسلسلة إلى عنوان URL الخاص بـ PageBean!
الرمز كما يلي:
Public Class PageBean <T> {Private Integer PageCode ؛ // رقم الصفحة الحالية صفحات الصدفة الخاصة ؛ // حجم البيانات لكل صفحة من عدد صحيح خاص TotalRecord ؛ // Total Records List Private List <T> peanlist ؛ // يتم تعريف سجل الصفحة الحالية على أنه عام. من أجل استخدام عنوان URL الخاص للسلسلة الخاصة مباشرة في المستقبل ؛ // يتم دمج الشروط بعد عنوان URL في ظروف متعددة // إرجاع العدد الإجمالي للصفحات العامة getTotalPage () {int tp = totalRecord/pagesize ؛ إرجاع TotalRecord ٪ pagesize == 0؟ TP: TP+1 ؛ } ... // GET ، SET METLESS of the Attribute ...}معالجة الترحيل في كل طبقة
صفحة JSP: عرض بيانات العرض و "الصفحة N/Total M صفحات M السابقة 1 2 3 4 5 6 7 8 9 10 الصفحة التالية الصفحة الأخيرة" ؛ تمرير Pagecode إلى servlet
Servlet: قم بإنشاء كائن PageBean ، وقم بتعيين القيم لجميع سمات PageBean ، ثم تمرير Pagecode و Pagesize إلى طبقة DAO ؛ اقبل كائن PageBean الذي تم إرجاعه بواسطة DAO ، وحفظه إلى حقل الطلب ، والعودة إلى الصفحة
الخدمة: يعمل كسيطور ، لا يلزم معالجة المعاملات
DAO: احصل على pagecode و pagesize ، قم بإنشاء كائن pagebean ، والاستعلام عن قاعدة البيانات للحصول على TotalRecord و BeanList ، وإرجاع PageBean.
رمز رقم صفحة معالجة صفحة JSP:
<Center> الصفحة $ {pb.pagecode} الصفحة/المجموع $ {pb.totalPage} الصفحة <a href = "$ {pb.url} & pc = 1" rel = "severonal nofollow"> الصفحة الرئيسية </a> <c: if test = "$ {pb.pagecode> 1}" } & pc = $ {pb.pageCode-1} "rel =" خارجي nofollow "> الصفحة السابقة </a> </c: if> <!-حساب جدول رقم الصفحة ابدأ نهاية-> <c: اختيار> <c: عندما test =" $ {pb.totalPage <= 10} "> <c: set var = value = "$ {pb.totalPage}"> </c: set> </c: عندما> <c: خلاف ذلك> <٪-صيغة الحساب-٪> <c: set var = "begin" value = "$ {pb.pageCode-5}" </ c: set> <c: set var = "end" value = verflow verflow-٪> <c: if test = "$ {begin <1}"> <c: set var = "begin" value = "1"> </c: set> <c: set var = "end" value = "10"> </c: set> </ c: if> <٪-tail verflow-٪> <c: $ {end> pb value = "$ {pb.totalPage-9}"> </c: set> <c: set var = "end" value = "$ {pb.totalPage}"> </c: set> </c: egn> </c: ally> </c: choice> <٪-looping number list-٪> } "> <c: اختر> <c: عندما test =" $ {i eq pb.pageCode} "> [$ {i}] </c: عندما> <c: خلاف ذلك> <a href =" $ {pb.url} & pc = $ {i} "> $ {i}] </a: test = "$ {pb.pagecode <pb.totalPage}"> <a href = "$ {pb.url} & pc = $ {pb.pagecode+1}" الصفحة </a> </center>رمز الاستعلام متعدد الشرطات بعد إضافة ترقيم الصفحات
Public PageBean <student> Query (Student S ، int PC ، int ps) {try {pageBean <studture> pb = new pagebean <studture> () ؛ PB.SetPageCode (PC) ؛ pb.setpagesize (ps) ؛ /** Query السجل الكلي*/ stringBuilder numSql = جديد StringBuilder ("حدد العد (*) من T_Student") ؛ StringBuilder Wheresql = new StringBuilder ("حيث 1 = 1") ؛ قائمة <Object> params = new ArrayList <Object> () ؛ if (s.getSname ()! = null &&! params.add ("٪" + s.getSname () + "٪") ؛ } if (s.getGender ()! = null &&! params.add (S.GetGender ()) ؛ } if (S.GetTellPhone ()! = null &&! params.add ("٪" + S.GetTellPhone () + "٪") ؛ } if (s.getemail ()! = null &&! params.add ("٪" + s.getemail () + "٪") ؛ } رقم الرقم = (رقم) qr.query (numSql.Append (wheresql) .toString () ، new ScalarHandler () ، params.toarray ()) ؛ int totalRecord = number.IntValue () ؛ PB.SettOtalRecord (TotalRecord) ؛ / * * احصل على مجموعة نتائج BeanList */ StringBuilder SQL = New StringBuilder ("SELECT * من T_STUDENT") ؛ StringBuilder limitsql = new StringBuilder ("limit؟ ،؟") ؛ params.add ((pc-1)*ps) ؛ params.add (ps) ؛ قائمة <Tudent> students = qr.query (sql.append (wheresql) .append (limitsql) .toString () ، New Beanlisthandler <Tudent> (student.class) ، params.toarray ()) ؛ PB.SetBeanList (الطلاب) ؛ إرجاع PB ؛ } catch (استثناء e) {رمي new runTimeException (e) ؛ }}لمزيد من المواد التعليمية ، يرجى الانتباه إلى الموضوع الخاص "تطوير نظام الإدارة".
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.