JBuilder2005 التحكم الفعلي في تبديل JSP (3)
الكاتب:Eve Cole
وقت التحديث:2009-07-02 17:10:13
نظرًا لأنه تم تحديد Switch.jsp كملف استجابة JSP من خلال سمة الإجراء في نموذج تسجيل الدخول.jsp، فعندما يحدد المستخدم مستخدم تسجيل الدخول في تسجيل الدخول.jsp ويدخل كلمة المرور لإرسال النموذج، سيرسل العميل طلب HTTP إلى الخادم، والخادم، أي استدعاء Switch.jsp للرد على هذا الطلب.
سيتم تمرير بيانات مكونات اسم المستخدم وكلمة المرور في النموذج إلى Switch.jsp الخاص بالخادم من خلال طلب HTTP، وسيقوم الخادم بتغليف هذه المعلومات في كائن الطلب وتمريرها إلى Switch.jsp، بحيث يمكن استرجاع Switch.jsp. من خلال request.getParameter(String paraName) احصل على هاتين القيمتين.
String userId = request.getParameter("userId"); كلمة مرور السلسلة = request.getParameter("password"); |
تخيل إذا كان نموذج تسجيل الدخول.jsp يحتوي على أكثر من 10 مكونات بيانات، فيجب الحصول على قيمته من خلال العدد المقابل من أساليب request.getParameter() في Switch.jsp. بالإضافة إلى ذلك، إذا لم تكن البيانات من نوع سلسلة حقل، ولكنها عدد صحيح أو رقم فاصلة عائمة، نظرًا لأن القيم التي يتم إرجاعها بواسطة طريقة request.getParameter() كلها سلاسل، فيجب إجراء تحويل النوع ليس فقط مملة، ولكن أيضا عرضة للخطأ.
يسمح لك JSP بتلقي بيانات نموذج الويب من خلال Bean بطريقة التعيين. يقوم Bean بتعيين بيانات النموذج وفقًا لهذه القاعدة: اسم سمة Bean = اسم مكون بيانات النموذج، أي يتم ملء جميع حقول بيانات النموذج بنفس اسم سمة Bean تلقائيًا. Bean، وأكمل تحويل نوع البيانات. على سبيل المثال، يوجد مكونان للبيانات في نموذج تسجيل الدخول.jsp، أحدهما يسمى معرف المستخدم والآخر هو كلمة المرور في قيمة مكون البيانات.
اكتب User.java
لنقم أولاً بكتابة User.java Bean وإنشاء User.java في المشروع، ويكون الكود كما يلي:
قائمة التعليمات البرمجية 7 User.java
1. حزمة مكتبة. 2. 3. مستخدم الطبقة العامة 4. { 5.معرف مستخدم السلسلة الخاصة؛//userId 6. كلمة مرور السلسلة الخاصة؛//password 7. اسم مستخدم السلسلة الخاصة؛//اسم المستخدم 8. سلسلة عامة getPassword() { 9. إرجاع كلمة المرور؛ 10. } 11. سلسلة getUserId العامة () { 12. إرجاع معرف المستخدم؛ 13. } 14. سلسلة getUserName العامة () { 15. إرجاع اسم المستخدم؛ 16. } 17. مجموعة باطلة عامة (كلمة مرور السلسلة) { 18. this.password = كلمة المرور؛ 19. } 20. public void setUserId(String userId) { 21.this.userId = userId; إثنان وعشرون. } 23. public void setUserName(String userName) { 24. this.userName = userName; 25. } 26. } |
بالإضافة إلى اسمي السمات userId وpassword، هناك أيضًا سمة اسم مستخدم userName. لم يتم استلام قيمة هذه السمة من نموذج تسجيل الدخول.jsp. عندما يتم التحقق من اسم المستخدم وكلمة المرور بشكل صحيح، يتم الحصول على اسم المستخدم من البيانات جدول T_USER وتخزينه في هذه الخصائص بحيث يمكن الرجوع إليها في مكان آخر، وحفظ هذه الفئة وتجميعها.
تَلمِيح:
يمكنك إنشاء رمز User.java بسرعة من خلال أداة Bean Express الخاصة بـ JBuilder. في ظل الظروف العادية، يجب عليك إنشاء خصائص Bean من خلال Bean Express. وهذا لا يؤدي فقط إلى إنشاء طرق الوصول إلى خاصية get/set، بل يضمن أيضًا اصطلاحات تسمية Bean. |
برنامج كتابة الصفحة
بعد إنشاء Bean الخاص بـ User.java، ننتقل إلى إنشاء Switch.jsp والإشارة إلى Bean في Switch.jsp.
ابدأ تشغيل معالج إنشاء JSP من خلال ملف->جديد..->الويب->انقر نقرًا مزدوجًا على أيقونة JSP.
1. حدد اسم Switch.jsp
الشكل 10: حدد اسم Switch.jsp |
استمر في الضغط على التالي للوصول إلى الخطوة 3 من المعالج.
2. مرجع User.java Bean
الشكل 11 حدد الفول المشار إليه في JSP |
انقر فوق الزر Add Bean... ليظهر مربع الحوار Select a Class حدد فئة bookstore.User في مربع الحوار، كما هو موضح في الشكل التالي:
الشكل 12: حدد الفئة كـ Bean |
بعد الضغط على "موافق"، قم بالعودة إلى مربع الحوار في الخطوة 3 من المعالج. يوجد في هذا الوقت صف إضافي من السجلات في قائمة Bean في مربع الحوار. يمكنك تحديد اسم للفاصوليا في عمود المعرف نطاق الفول في النطاق، كما هو موضح في الشكل أدناه:
الشكل 13 إشارة إلى حبة الفول |
قمنا بتسمية userBean userBean وقمنا بتعيين نطاقه على مجال الصفحة. نطاق الصفحة هو نطاق الصفحة وهو متاح ضمن نطاق الصفحة الحالية. عندما يقوم JSP بإرجاع استجابة أو يتم نقل الطلب إلى صفحات JSP أخرى، فإنه لم يعد متاحًا، ويتم وصف النطاقات الثلاثة الأخرى على النحو التالي:
· نطاق الطلب: عند إنشاء طلب، يكون صالحًا ضمن النطاق حتى يتم إرجاع الاستجابة. على سبيل المثال، يتم الإعلان عن Bean كنطاق طلب في a.jsp، عندما يقوم a.jsp بنقل الطلب إلى صفحة b.jsp من خلاله. <jsp:forward> ولا يزال متاحًا في منتصف العام.
· نطاق الجلسة: ويتوفر ضمن دورة جلسة المستخدم. دورة الجلسة تبدأ من وقت دخول المستخدم إلى النظام حتى تسجيل خروجه من النظام.
· نطاق التطبيق: هذا النطاق هو الأطول، مما يدل على أن حاوية الويب صالحة حتى يتم تشغيلها حتى يتم إغلاقها.
اضغط على التالي للانتقال إلى الخطوة التالية.
3. قم بتعيين عناصر التكوين قيد التشغيل
في الخطوة الأخيرة من المعالج، يمكنك إنشاء عنصر تكوين وقت التشغيل لـ JSP الذي تم إنشاؤه. على الرغم من أن مجموعات المعالج تقوم بإنشاء عنصر تكوين وقت التشغيل كخيار افتراضي، أعتقد أن هذه ليست قيمة افتراضية معقولة إنشاء عنصر تكوين وقت التشغيل، ولا تقم بإنشاء عنصر تكوين تشغيل JSP، كما هو موضح في الشكل التالي:
اضغط على زر "إنهاء" لإنشاء ملف Switch.jsp بالكود التالي:
قائمة التعليمات البرمجية 8 Switch.jsp التي تم إنشاؤها بواسطة المعالج
1. <%@ page contentType="text/html; charset=GBK" %> 2.<html> 3. <الرأس> 4. <العنوان> 5. التبديل 6.</العنوان> 7.</الرأس> 8. <jsp:useBean id = "userBean" نطاق = "صفحة" فئة = "bookstore.User" /> 9. <jsp:setProperty name="userBean" property="*" /> 10.<body bgcolor="#ffffff"> 11.<h1> 12. تم إنشاء JBuilder بواسطة JSP 13.</h1> 14.</الجسم> 15.</html> |
السطر 8 هو علامة JSP التي تشير إلى Bean. يملأ السطر 9 قيم سمات Bean ببيانات النموذج، أي يملأ معلمات الطلب في سمات Bean عن طريق مطابقة الاسم، ويكمل تحويل النوع في نفس الوقت (فقط). أنواع البيانات الأساسية أو لا يمكن إكمال التحويل إلا إذا كان المُنشئ يدعمه). بعد تنفيذ السطر 9، سيتم تعيين سمات معرف المستخدم وكلمة المرور في userBean على قيم اسم المستخدم وكلمة المرور المرسلة في صفحة تسجيل الدخول.jsp.
نظرًا لأن Switch.jsp يُستخدم فقط للتحكم ولا يحتاج إلى عرض المحتوى للعميل، فإننا نزيل كود HTML الموجود في Switch.jsp ونضبط Switch.jsp على:
قائمة التعليمات البرمجية 9 Switch.jsp بعد إزالة كود HTML الثابت
1. <%@ page contentType="text/html; charset=GBK" %> 2. <jsp:useBean id = "userBean" نطاق = "صفحة" فئة = "bookstore.User" /> 3. <jsp:setProperty name="userBean" property="*" /> |
قم بتوفير برنامج نصي في Switch.jsp لإرسال معرف المستخدم وكلمة المرور إلى قاعدة البيانات ومقارنتها بالمستخدمين في جدول T_USER لمعرفة ما إذا كانوا مستخدمين شرعيين، وإعادة التوجيه إلى صفحات مختلفة بناءً على نتائج التحقق. يبدو الكود النهائي لـ Switch.jsp كما يلي:
قائمة التعليمات البرمجية 10 التبديل النهائي.jsp
1. <%@page contentType="text/html; charset=GBK"%> 2.<%@page import="bookstore.*"%> 3. <%@page import="java.sql.*"%> 4. <jsp:useBean id = "userBean" نطاق = "جلسة" فئة = "bookstore.User"/> 5. <jsp:setProperty name="userBean" property="*"/> 6.%% 7. اتصال conn = null; 8. حاول { 9.conn = DBConnection.getConnection(); 10. PreparedStatement pStat = conn.prepareStatement( 11. "اختر USER_NAME من T_USER حيث USER_ID=؟ وكلمة المرور =؟"); 12.pStat.setString(1, userBean.getUserId()); 13.pStat.setString(2, userBean.getPassword()); 14.ResultSet rs = pStat.executeQuery(); 15. if (rs.next()) { // كلمة المرور صحيحة 16.userBean.setUserName(rs.getString(1));//تعيين اسم المستخدم 17. session.setAttribute("ses_userBean", userBean);// ضع userBean في كائن الجلسة 18. %><jsp:forward page=" Welcome.jsp "></jsp:forward> 19. <%} else { // كلمة مرور خاطئة%> 20.<jsp:forward page="fail.jsp"></jsp:forward> 21.% 22. }} أخيرا { 23. if(conn != null) conn. Close(); أربعة وعشرون } 25.%> |
· قم بتقديم الفصول المطلوبة في كود البرنامج النصي في الأسطر من 2 إلى 3.
· تقوم الأسطر من 7 إلى 14 من الكود بإرسال عبارات SQL للاستعلام إلى قاعدة البيانات وإرجاع النتائج.
· يحدد السطر 15 بشكل غير مباشر ما إذا كانت كلمة مرور المستخدم صحيحة عن طريق التحقق من عدد السجلات في مجموعة النتائج.
· الأسطر من 16 إلى 18 هي رموز الاستجابة لكلمات مرور المستخدم الصحيحة أولاً، املأ قيمة سمة userName الخاصة بـ userBean بسمة USER_NAME لمجموعة النتائج، ثم ضع كائن userBean في الجلسة، وأخيرًا انتقل إلى صفحة Welcome.jsp.
· عندما يقوم المستخدم بإدخال كلمة مرور غير صحيحة، لن يكون هناك أي سجل في مجموعة النتائج في هذا الوقت، يقوم rs.next() بإرجاع خطأ، وينتقل البرنامج إلى السطر 20. يقوم الكود الموجود في السطر 20 بإعادة توجيه الصفحة إلى الخطأ. صفحة معالجة إدخال كلمة المرور Fail.jsp.
· يتم استخدام الكود الموجود في الأسطر من 22 إلى 24 لإغلاق اتصال قاعدة البيانات.
ربما اكتشفت أنه على الرغم من أن الأسطر 9 ~ 21 ستطرح SQLException، إلا أنه ليس لدينا كتلة مناسبة لاصطياد الاستثناءات في برنامج Java القياسي، مما سيؤدي إلى حدوث خطأ في وقت الترجمة، ولكن في JSP، يمكن تجميعها بشكل تسلسلي وذلك لأن صفحة JSP نفسها تلتقط جميع الاستثناءات التي يتم طرحها في الصفحة.
افترض أن هناك خطأ في عبارة استعلام SQL في السطر 11، مثل كتابة اسم جدول المستخدم عن طريق الخطأ كمستخدم (بشكل صحيح T_USER) عند استدعاء Switch.jsp، سيتم طرح SQLException في السطر 14، ويتم التبديل. سيعرض jsp صفحة معلومات التتبع الخاصة بتتبع مكدس الاستثناءات كما هو موضح أدناه:
الشكل 14: صفحة معالجة الأخطاء الفادحة |
يمكن وصف صفحة معالجة الأخطاء الموضحة في الصورة أعلاه بأنها ذات وجه أخضر، وشرسة، وغير ودية للغاية. قد يكون هذا النوع من صفحات الإبلاغ عن الأخطاء مناسبًا للمطورين لأنه يوفر الكثير من معلومات تتبع الأخطاء، لكنه مستحيل النهاية المستخدمين لقبول هذا النوع من صفحة الخطأ. يتيح لك JSP تحديد صفحة JSP خصيصًا لمعالجة الأخطاء من خلال <%@ page errorPage%>، بحيث يمكن عرض الأخطاء بشكل سهل وبديهي. في القسم التالي، سنقوم بإنشاء صفحة JSP لمعالجة الأخطاء. بعد الإنشاء، سنحدد صفحة JSP لمعالجة الأخطاء لـ Switch.jsp.