يشير هذا المثال إلى المستندات ذات الصلة بعمليات JSP على XML في بعض مواقع الويب، ويجمع بين بعض التجارب الشخصية. يتضمن المثال تطوير جزء من التعليمات البرمجية لإدارة الواجهة الخلفية لنظام الطلب الداخلي للمؤسسة. وتركز الوظيفة بشكل أساسي على إدارة المعلومات الأساسية حول المطاعم.
تم تطوير المثال نفسه كجزء من مزحة أجريتها مع زملائي في شركتي القديمة. وأود أيضًا أن أعرب عن شوقي لهؤلاء الأصدقاء الذين عملوا معًا.
المثال نفسه عبارة عن برنامج منظم B/S يعمل ضمن النظام الأساسي TOMCAT4.01. لن يتم شرح تكوين TOMCAT هنا. ما عليك سوى شرح بنية الدليل للملفات والمجلدات ذات الصلة.
وصف هيكل الدليل: /tomcat/webapps/canyin/ -----الدليل الرئيسي /tomcat/webapps/canyin/jsp/ -----دليل ملفات JSP /tomcat/webapps/canyin/jsp/admin/ -----دليل التخزين لملفات JSP التي تنفذ إدارة الخلفية /tomcat/webapps/canyin/WEB-INF/classes/canyin/ ------دليل تخزين ملفات javabean /tomcat/webapps/canyin/data/ ----- دليل تخزين ملفات xml /tomcat/webapps/ROOT/ -----مجلد تخزين ملف بدء التشغيل Tomcat، يتم تخزين ملف Index.html فقط
وصف موجز للملف: /tomcat/webapps/canyin/data/users.xml ----- سجل معلومات المستخدم /tomcat/webapps/canyin/data/restaurants.xml -----تسجيل المعلومات الأساسية للمطاعم
/tomcat/webapps/ROOT/index.html -----الصفحة الرئيسية، يظهر مربع إدخال على الصفحة، ويطلب من المستخدم إدخال اسم المستخدم وكلمة المرور.
/tomcat/webapps/canyin/jsp/loginjudge.jsp -----صفحة الحكم على هوية المستخدم، بناءً على اسم المستخدم وكلمة المرور، يتم تحديد ما إذا كان سيتم نقل الصفحة إلى محطة إدارة الخلفية أو عميل الواجهة الأمامية . في هذا المثال، بمجرد التأكد من أن هوية المستخدم تتمتع بحقوق الإدارة، يمكنه الدخول إلى محطة إدارة الواجهة الخلفية والانتقال مباشرة إلى صفحة إدارة المعلومات الأساسية للمطعم، مما يبسط عملية الشرح. /tomcat/webapps/canyin/jsp/admin/admin_rest.jsp -----صفحة إدارة معلومات المطعم الأساسية، تدير الاسم ورقم الهاتف والعنوان والمعلومات الأخرى الخاصة بالمطعم
/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class ----- تكتشف محطة إدارة الخلفية قيمة الجلسة التي تشير إلى هوية المستخدم. إذا لم يكن مسؤولاً، فسوف يعود إلى ملف صفحة تسجيل الدخول. /tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class -----ربط ملف xml /tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class -----اكتب ملف xml
مقدمة تفصيلية للملف ووصف التعليمات البرمجية المصاحب له.
/tomcat/webapps/canyin/data/users.xml
شفرة:
- <المستخدمون> <اسم المستخدم = "joard" كلمة المرور = "joard" الأدوار = "admin" /> <اسم المستخدم = "joard01" كلمة المرور = "joard01" الأدوار = "المستخدم" /> <اسم المستخدم = "joard02" كلمة المرور = "joard02" الأدوار = "المستخدم" /> المستخدمين>
الوصف: معنى الحقول هو اسم المستخدم وكلمة المرور وهوية المستخدم
/tomcat/webapps/canyin/data/restaurants.xml
شفرة:
- <رقم المطاعم = "10"> - <معرف المطعم = "1"> <الاسم>مطعم شنغهاي تينغ للوجبات السريعةالاسم> <هاتف>021-76546726 برج برودواي بلازا ب مطعم> - <معرف المطعم = "8"> <الاسم>فندق شانغريلاالاسم> <هاتف>021-2312134 <العنوان>رقم 1023، طريق نانجينغالعنوان> مطعم> المطاعم> ملاحظة: تسجل السمة إجمالي عدد السجلات في ملف Restaurants.xml في كل مرة يتم إضافة سجل جديد، ستزيد القيمة بمقدار 1 بغض النظر عما إذا تم حذفه لاحقًا، تمامًا مثل المعرف الذي يتم استخدامه. زيادة تلقائيا بنسبة 1 في عنصر قاعدة البيانات. يُستخدم لتعيين قيمة فريدة للسمة الخاصة بـ المُضاف حديثًا. معنى المجالات الأخرى أكثر وضوحا. /tomcat/webapps/ROOT/index.html (رمز HTML خالص)
شفرة: <أتش تي أم أل> <الرأس> نظام تقديم الطعام في عالم غريب
الرأس>
<عرض الجدول = "100%" الحدود = "0" تباعد الخلايا = "0" خلية الحشو = "0" الارتفاع = "22"> <تر>
تسجيل الدخول لنظام المطاعم
الجدول> <ر> <ر> <عرض الجدول = "300" الحدود = "0" تباعد الخلايا = "1" خلية الحشو = "0"> <تر>
<عرض الجدول = "100%" الحدود = "0" تباعد الخلايا = "1" خلية الحشو = "5" bgcolor=#999999 class=a9px> <تر>
تسجيل الدخول إلى نظام تقديم الطعام
<تر>
<عرض الجدول = "100%" الحدود = "0" تباعد الخلايا = "0" خلية الحشو = "0"> <اسم النموذج=طريقة بيانات النموذج=الإجراء اللاحق=''canyin/jsp/loginjudge.jsp''> <تر>
اسم تسجيل الدخول:
<إدخال الحد الأقصى للطول = 16 name = "اسم المستخدم" class = قيمة stedit = "joard">
<تر>
كلمة المرور:
<فئة الإدخال = الطول الأقصى = 16 الاسم = "userpass" type = قيمة كلمة المرور = "oddworld">
شفرة: <%-- نظام إدارة تقديم الطعام الغريب (النسخة الصينية المبسطة) 1 ديسمبر 2002 حق النسخ بواسطة joard ast
وظيفة loginjudge.jsp: التحقق من هوية المستخدم، بناءً على الهويات المختلفة للمستخدمين المحددين في ملف /data/user.xml قرر الانتقال إلى صفحة إدارة الواجهة الخلفية أو صفحة طلب العملاء. --%>
<%@ include file="../../include/sys_dialog.jsp" %>
<%//تحقق من هوية المستخدم لتحديد ما إذا كان مسؤولاً if(!checkSessionBean.checkSessionBean(request,"sesUserRole", "admin")){ out.print(showDialog("ليس لديك حقوق إدارية!""،/index.html")); يعود؛ }
// احصل على البيانات ذات الصلة من ملف معلومات المطعم Rest.xml مستند الوثيقة؛ مطاعم NodeList؛
سلسلة strAct؛ int intId=0; سلسلة strOperation = "إظهار"؛
// قبول المعلمات الخارجية التي تم تمريرها strAct=(String)request.getParameter("act");
// التحقق من البيانات إذا (strName==null){ out.print(showDialog("لا يمكن أن يكون اسم المطعم فارغًا!")); يعود؛ } إذا(strPhone==null){ out.print(showDialog("لا يمكن أن يكون رقم هاتف المطعم فارغًا!")); يعود؛ } /*if(strAddress==null){ out.print(showDialog("لا يمكن أن يكون عنوان المطعم فارغًا!")); يعود؛ }*/
// التحقق من تفرد البيانات for(int i=0;i مطعم العنصر=(العنصر) Restaurants.item(i); if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName)){ out.print(showDialog("اسم مطعم مكرر!")); يعود؛ }آخر{ if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone)){ out.print(showDialog("كرر رقم هاتف المطعم!")); يعود؛ } }
}
// احصل على عدد السجلات الموجودة وقم بتعيين سمة معرف تزايدية فريدة لسجل المطعم الجديد int intNum=0; العنصر RestNum=(Element)doc.getElementsByTagName("restaurants").item(0); intNum=Integer.parseInt(restNum.getAttributeNode("num").getNodeValue());
intNum+=1;
// أضف 1 إلى قيمة سمة المطعم num RestNum.getAttributeNode("num").setNodeValue(String.valueOf(intNum));
// أضف عقدة Element newRestaurant=doc.createElement("restaurant");
// اتصل بالفاصوليا لكتابة ملف xml المقابل writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
Response.sendRedirect(request.getRequestURI()); يعود؛ } إذا(strAct.equals("modiDo")){ اسم السلسلة؛ سلسلة سترفون؛ سلسلة strAddress; نصوص نصية، على سبيل المثال؛ int modiId; // سجل العنصر (i) الذي سيتم تعديله في السجل intI=0;
// التحقق من البيانات إذا (strName==null){ out.print(showDialog("لا يمكن أن يكون اسم المطعم فارغًا!")); يعود؛ } إذا(strPhone==null){ out.print(showDialog("لا يمكن أن يكون رقم هاتف المطعم فارغًا!")); يعود؛ } إذا (modiId==0){ out.print(showDialog("سجل المطعم الذي تريد تعديله غير موجود!")); يعود؛ } /*if(strAddress==null){ out.print(showDialog("لا يمكن أن يكون عنوان المطعم فارغًا!")); يعود؛ }*/
// يُظهر العلم أن السجل موجود السجل المنطقي Exist=false;
// التحقق من تفرد البيانات for(int i=0;i مطعم العنصر=(العنصر) Restaurants.item(i);
إذا (! سجل موجود) { out.print(showDialog("سجل المطعم الذي تريد تعديله غير موجود!")); يعود؛ }آخر{ // إجراء تغييرات السجل يحاول{ Element modiRestaurant=(Element) Restaurants.item(intI); modiRestaurant.getElementsByTagName("name").item(0).getFirstChild().setNodeValue(strName); modiRestaurant.getElementsByTagName("phone").item(0).getFirstChild().setNodeValue(strPhone); modiRestaurant.getElementsByTagName("address").item(0).getFirstChild().setNodeValue(strAddress);
// اتصل بالفاصوليا لكتابة ملف xml المقابل writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
إذا (! سجل موجود) { out.print(showDialog("سجل المطعم الذي تريد حذفه غير موجود!")); يعود؛ }آخر{ // تنفيذ عملية حذف السجل يحاول{ Node delNode=(Node)restaurants.item(intI);
// يتم تحديد حالة المعالجة المقابلة للصفحة بواسطة معلمات خارجية. إذا (strAct==null){ strOperation = "إظهار"؛ }آخر{ إذا (strAct.equals("modi")){ strOperation = "modi" ؛ intId=Integer.parseInt(request.getParameter("recordId")); }آخر{ إذا(strAct.equals("addnew")){ strOperation="addnew"; }آخر{ strOperation = "إظهار"؛ } } }
// إذا كان السجل فارغا، قم بتغيير حالة الصفحة إلى "جديد" إذا (المطاعم.getLength()==0){ strOperation="addnew"; } %>
<أتش تي أم أل> <الرأس> نظام تقديم الطعام في عالم غريب
الرأس>
<الجسم>
<عرض الجدول = "100%" الحدود = "0" تباعد الخلايا = "0" خلية الحشو = "0" الارتفاع = "22"> <تر>
<% إذا (restaurant.getElementsByTagName("address").item(0).hasChildNodes()){ out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue());
الارتفاع = 15 onClick="javascript:if(confirm(''هل أنت متأكد من حذف هذا السجل؟ سيؤدي الحذف إلى جعل السجل غير قابل للاستخدام؟'')){window.location.href=''<%=request.getRequestURI()%> ? act=del&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()%>'';}" src="../../images/delete.gif" style="CURSOR: hand" width=15>
<%} }%> <% إذا (strOperation==addnew){ //إظهار التنسيق الجديد%>