مثال على التطوير باستخدام JSP + JAVABEAN + XML
الكاتب:Eve Cole
وقت التحديث:2009-07-02 17:12:18
يشير هذا المثال إلى المستندات ذات الصلة بعمليات 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
شفرة:
<?xml version="1.0" encoding="UTF-8" ?>
- <المستخدمون>
<اسم المستخدم = "joard" كلمة المرور = "joard" الأدوار = "admin" />
<اسم المستخدم = "joard01" كلمة المرور = "joard01" الأدوار = "المستخدم" />
<اسم المستخدم = "joard02" كلمة المرور = "joard02" الأدوار = "المستخدم" />
</المستخدمين>
الوصف: معنى الحقول هو اسم المستخدم وكلمة المرور وهوية المستخدم
/tomcat/webapps/canyin/data/restaurants.xml
شفرة:
<?xml version="1.0" encoding="UTF-8" ?>
- <رقم المطاعم = "10">
- <معرف المطعم = "1">
<الاسم>مطعم شنغهاي تينغ للوجبات السريعة</الاسم>
<هاتف>021-76546726</phone>
<address>برج برودواي بلازا ب</address>
</مطعم>
- <معرف المطعم = "8">
<الاسم>فندق شانغريلا</الاسم>
<هاتف>021-2312134</phone>
<العنوان>رقم 1023، طريق نانجينغ</العنوان>
</مطعم>
</المطاعم>
ملاحظة: تسجل السمة <num> إجمالي عدد السجلات في ملف Restaurants.xml في كل مرة يتم إضافة سجل جديد، ستزيد القيمة بمقدار 1 بغض النظر عما إذا تم حذفه لاحقًا، تمامًا مثل المعرف الذي يتم استخدامه. زيادة تلقائيا بنسبة 1 في عنصر قاعدة البيانات. يُستخدم لتعيين قيمة فريدة للسمة <id> الخاصة بـ <restaurant> المُضاف حديثًا. معنى المجالات الأخرى أكثر وضوحا.
/tomcat/webapps/ROOT/index.html (رمز HTML خالص)
شفرة:
<أتش تي أم أل>
<الرأس>
<title>نظام تقديم الطعام في عالم غريب</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</الرأس>
<body onload="javascript:dataform.username.focus()">
<div محاذاة = "المركز">
<عرض الجدول = "100%" الحدود = "0" تباعد الخلايا = "0" خلية الحشو = "0" الارتفاع = "22">
<تر>
<td width="1"><img src="images/top_r1.GIF" width="62" height="22"></td>
<td width=150 align="center"> تسجيل الدخول لنظام المطاعم </td>
<td><img src="images/top_r2.GIF" width="294" height="22"></td>
</tr>
</الجدول>
<ر>
<ر>
<عرض الجدول = "300" الحدود = "0" تباعد الخلايا = "1" خلية الحشو = "0">
<تر>
<td height = "200" valign = "top" align = "center">
<p align="center">
<عرض الجدول = "100%" الحدود = "0" تباعد الخلايا = "1" خلية الحشو = "5" bgcolor=#999999 class=a9px>
<تر>
<td bgcolor="#efefef">تسجيل الدخول إلى نظام تقديم الطعام</td>
</tr>
<تر>
<td bgcolor="#FFFFFF" valign="top" align="center">
<عرض الجدول = "100%" الحدود = "0" تباعد الخلايا = "0" خلية الحشو = "0">
<اسم النموذج=طريقة بيانات النموذج=الإجراء اللاحق=''canyin/jsp/loginjudge.jsp''>
<تر>
<td width="100"><b>اسم تسجيل الدخول:</b></td>
<TD>
<إدخال الحد الأقصى للطول = 16
name = "اسم المستخدم" class = قيمة stedit = "joard">
</TD>
</tr>
<تر>
<td width="100"><b>كلمة المرور:</b></td>
<TD>
<فئة الإدخال = الطول الأقصى = 16
الاسم = "userpass" type = قيمة كلمة المرور = "oddworld">
</TD>
</tr>
</النموذج>
</الجدول>
<ر>
<حدود الجدول=0 خلية الحشو=0 تباعد الخلايا=0>
<الجسم>
<تر>
<TD>
<input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="Login">
</TD>
<td> </td>
<TD>
<input class=stbtm name=Submit onClick="javascript:window.location.href=''index.asp?myjoke=1'';" type=button value="تغيير كلمة المرور">
</TD>
<td> </td>
</tr>
</tbody>
</الجدول>
<ر>
</TD>
</tr>
</الجدول>
</TD>
</tr>
</الجدول>
</div>
</الجسم>
</html>
<لغة البرنامج النصي=جافا سكريبت>
<!--
نموذج فحص الوظيفة ()
{
var Checkblank = /^(s*|( )|(.))*$/;
إذا (Checkblank.test(dataform.username.value))
{
تنبيه("لا يمكن أن يكون اسم تسجيل الدخول فارغًا!");
عودة كاذبة.
}
إذا (Checkblank.test(dataform.userpass.value))
{
تنبيه ("لا يمكن أن تكون كلمة المرور فارغة!")؛
عودة كاذبة.
}
window.dataform.submit();
}
-->
</النص>
التعليمات: أرسل اسم المستخدم وكلمة المرور إلى /tomcat/webapps/canyin/jsp/loginjudge.jsp
/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class (الرمز هو ملف جافا المقابل)
حزمة كانيين.
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
فئة عامة checkSessionBean {
منطقية خاصة bolCheckPass=false;
طلب HttpServletRequest الخاص = null;
public boolean checkSessionBean(HttpServletRequest request,String strSessionName,String strCheckValue){
checkSessionBean المنطقية العامة (طلب HttpServletRequest) {
جلسة HttpSession = request.getSession(false);
return(bolCheckPass);
إذا (strSessionName==null || strCheckValue==null){
return(bolCheckPass);
}آخر{
إذا (جلسة!=null && session.getValue(strSessionName)!=null){
bolCheckPass=session.getValue(strSessionName).equals(strCheckValue);
}
return(bolCheckPass);
}
}
}
الوصف: تحقق مما إذا كانت قيمة اسم الجلسة التي تم تمريرها كمعلمة متساوية وقيمة الحقل الذي تم تمريره كمعلمة.
/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class
شفرة:
حزمة كانيين.
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;
الطبقة العامة connXmlBean {
Private DocumentBuilderFactory Factory=null;
public DocumentBuilder builder=null;
وثيقة خاصة doc=null;
connXmlBean() العامة {}
سلسلة عامة connXml(سلسلة xmlFileName){
سلسلة strExc = ""؛
يحاول{
المصنع = DocumentBuilderFactory.newInstance();
builder=factory.newDocumentBuilder();
doc=builder.parse(xmlFileName);
doc.normalize();
}قبض(استثناء ه){
strExc=e.toString();
}
return(strExc);
}
الوثيقة العامة getXmlDoc(){
العودة (وثيقة)؛
}
}
الوصف: فتح ملف XML محدد
/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class
شفرة:
حزمة كانيين.
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
استيراد java.io.File؛
import org.w3c.dom.*;
الفئة العامة writeXmlBean {
الكتابة العامة XmlBean () {}
السلسلة العامة writeXml(Document doc,String xmlFileName){
سلسلة strExc = ""؛
يحاول{
TransformerFactory tfactory = TransformerFactory.newInstance();
محول المحول = tfactory.newTransformer();
مصدر DOMSource = جديد DOMSource(doc);
نتيجة StreamResult = جديد StreamResult(new File(xmlFileName));
Transformer.transform(source,result);
}قبض(استثناء ه){
strExc=e.toString();
}
return(strExc);
}
}
الوصف: اكتب محتوى dom في ملف xml محدد.
/tomcat/webapps/canyin/jsp/loginjudge.jsp
شفرة:
<%-- نظام إدارة تقديم الطعام الغريب (النسخة الصينية المبسطة) 1 ديسمبر 2002
حق النسخ بواسطة joard ast
وظيفة loginjudge.jsp: التحقق من هوية المستخدم، بناءً على الهويات المختلفة للمستخدمين المحددين في ملف /data/user.xml
قرر الانتقال إلى صفحة إدارة الواجهة الخلفية أو صفحة طلب العملاء.
--%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@page language="java" import="javax.xml.parsers.*" %>
<%@page import="org.w3c.dom.*" %>
<%@ page import="canyin.*" %>
<jsp:useBean id = "xmlBean" class = "canyin.connXmlBean" نطاق = "صفحة" />
<%
session.setMaxInactiveInterval(1800);
مستند الوثيقة؛
مستخدمي NodeList؛
سلسلة strExc = ""؛
سلسلة strUsername،strPassword؛
strUsername=(String)request.getParameter("username");
strPassword=(String)request.getParameter("userpass");
//تحقق مما إذا كانت البيانات فارغة
إذا (strUsername=="" || strPassword=="" ){
out.println("<script language=''javascript''>");
println("alert(''اسم المستخدم أو كلمة المرور لها قيمة فارغة!'');");
out.println("window.location.href=''/index.html'';");
out.println("</script>");
يعود؛
}
xmlBean.connXml("webapps/canyin/data/users.xml");
doc=xmlBean.getXmlDoc();
يحاول{
users =doc.getElementsByTagName("user");
for (int i=0;i<users.getLength();i++){
العنصر المستخدم = (العنصر) users.item(i);
String strAtrNameValue=user.getAttributeNode("name").getNodeValue();
String strAtrPassWordValue=user.getAttributeNode("password").getNodeValue();
String strAtrRoleValue=user.getAttributeNode("roles").getNodeValue();
إذا (strAtrNameValue.equals(strUsername) && strAtrPassWordValue.equals(strPassword)){
إذا (strAtrRoleValue.equals("admin")){
out.println("<script language=''javascript''>");
out.println("alert(''مرحبًا بالمسؤول لتسجيل الدخول إلى النظام!'');");
out.println("</script>");
// قم بتعيين الجلسة (sesUserRole) للإشارة إلى هوية المستخدم، وهوية المسؤول هي admin
session.setAttribute("sesUserRole"،"admin");
// انتقل إلى صفحة الإدارة
Response.sendRedirect("admin/admin_rest.jsp");
يعود؛
}آخر{
// قم بتعيين الجلسة (sesUserRole) للإشارة إلى هوية المستخدم، وهوية المسؤول هي user
session.setAttribute("sesUserRole"،"user");
// انتقل إلى صفحة المستخدم العادية
Response.sendRedirect("index.jsp");
يعود؛
}
}آخر{
out.println("<script language=''javascript''>");
out.println("alert(''اسم مستخدم أو كلمة مرور خاطئة!'');");
println("history.go(-1);");
out.println("</script>");
يعود؛
}
}
}قبض(استثناء ه){
strExc=e.toString();
}
%>
يوضح:.......
/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp
شفرة:
<%-- نظام إدارة تقديم الطعام الغريب (النسخة الصينية المبسطة) 1 ديسمبر 2002
حق النسخ بواسطة joard ast
وظيفة admin_rest.jsp: صفحة إدارة الواجهة الخلفية، وصفحة إدارة المطعم.
--%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@page language="java" import="javax.xml.parsers.*" %>
<%@ page import="javax.xml.transform.*" %>
<%@page import="org.w3c.dom.*" %>
<%@ page import="canyin.*" %>
<%@ include file="../../include/sys_dialog.jsp" %>
<jsp:useBean id="checkSessionBean" class="canyin.checkSessionBean" نطاق = "صفحة" />
<jsp:useBean id = "xmlBean" class = "canyin.connXmlBean" نطاق = "صفحة" />
<jsp:useBean id = "writeXmlBean" class = "canyin.writeXmlBean" نطاق = "صفحة" />
<%//تحقق من هوية المستخدم لتحديد ما إذا كان مسؤولاً
if(!checkSessionBean.checkSessionBean(request,"sesUserRole", "admin")){
out.print(showDialog("ليس لديك حقوق إدارية!""،/index.html"));
يعود؛
}
// احصل على البيانات ذات الصلة من ملف معلومات المطعم Rest.xml
مستند الوثيقة؛
مطاعم NodeList؛
سلسلة strAct؛
int intId=0;
سلسلة strOperation = "إظهار"؛
// قبول المعلمات الخارجية التي تم تمريرها
strAct=(String)request.getParameter("act");
xmlBean.connXml("webapps/canyin/data/restaurants.xml");
doc=xmlBean.getXmlDoc();
المطاعم =doc.getElementsByTagName("restaurant");
// تحديد تشغيل ملف Restaurant.xml بناءً على المعلمات الخارجية التي تم تمريرها
إذا (strAct!=null){
إذا(strAct.equals("addnewDo")){
اسم السلسلة؛
سلسلة سترفون؛
سلسلة strAddress;
نصوص نصية، على سبيل المثال؛
strName=(String)request.getParameter("name").trim();
strPhone=(String)request.getParameter("phone").trim();
strAddress=(String)request.getParameter("address").trim();
// التحقق من البيانات
إذا (strName==null){
out.print(showDialog("لا يمكن أن يكون اسم المطعم فارغًا!"));
يعود؛
}
إذا(strPhone==null){
out.print(showDialog("لا يمكن أن يكون رقم هاتف المطعم فارغًا!"));
يعود؛
}
/*if(strAddress==null){
out.print(showDialog("لا يمكن أن يكون عنوان المطعم فارغًا!"));
يعود؛
}*/
// التحقق من تفرد البيانات
for(int i=0;i<restaurants.getLength();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");
Attr newArrId=doc.createAttribute("id");
// السمة newArrId = new Attribute("id",String.valueOf(intNum));
texteg=doc.createTextNode(String.valueOf(intNum));
newArrId.setValue(String.valueOf(intNum));
newRestaurant.setAttributeNode(newArrId);
العنصر newName=doc.createElement("name");
texteg=doc.createTextNode(strName);
newName.appendChild(textseg);
newRestaurant.appendChild(newName);
العنصر newPhone=doc.createElement("phone");
texteg=doc.createTextNode(strPhone);
newPhone.appendChild(textseg);
newRestaurant.appendChild(newPhone);
العنصر newAddress=doc.createElement("address");
texteg=doc.createTextNode(strAddress);
newAddress.appendChild(textseg);
newRestaurant.appendChild(newAddress);
doc.getDocumentElement().appendChild(newRestaurant);
// اتصل بالفاصوليا لكتابة ملف xml المقابل
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
Response.sendRedirect(request.getRequestURI());
يعود؛
}
إذا(strAct.equals("modiDo")){
اسم السلسلة؛
سلسلة سترفون؛
سلسلة strAddress;
نصوص نصية، على سبيل المثال؛
int modiId;
// سجل العنصر (i) الذي سيتم تعديله في السجل
intI=0;
strName=(String)request.getParameter("name").trim();
strPhone=(String)request.getParameter("phone").trim();
strAddress=(String)request.getParameter("address").trim();
modiId=Integer.parseInt(request.getParameter("recordId").trim());
// التحقق من البيانات
إذا (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.getLength();i++){
مطعم العنصر=(العنصر) Restaurants.item(i);
if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==modiId){
RecordExist=true;
intI=i;
}
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue() )!=modiId ){
out.print(showDialog("اسم مطعم مكرر!"));
يعود؛
}آخر{
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue() )!=modiId ){
out.print(showDialog("كرر رقم هاتف المطعم!"));
يعود؛
}
}
}
إذا (! سجل موجود) {
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");
Response.sendRedirect(request.getRequestURI());
يعود؛
}قبض(استثناء ه){}
}
}
// إجراء عملية الحذف
إذا (strAct.equals("ديل")){
int delId;
// سجل العنصر (i) الذي سيتم تعديله في السجل
intI=0;
delId=Integer.parseInt(request.getParameter("recordId").trim());
إذا (delId==0){
out.print(showDialog("سجل المطعم الذي تريد تعديله غير موجود!"));
يعود؛
}
تُظهر العلامة file:// أن السجل موجود
السجل المنطقي Exist=false;
// التحقق من تفرد البيانات
for(int i=0;i<restaurants.getLength();i++){
مطعم العنصر=(العنصر) Restaurants.item(i);
if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==delId){
RecordExist=true;
intI=i;
}
}
إذا (! سجل موجود) {
out.print(showDialog("سجل المطعم الذي تريد حذفه غير موجود!"));
يعود؛
}آخر{
// تنفيذ عملية حذف السجل
يحاول{
Node delNode=(Node)restaurants.item(intI);
doc.getElementsByTagName("restaurants").item(0).removeChild(delNode);
// اتصل بالفاصوليا لكتابة ملف xml المقابل
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
Response.sendRedirect(request.getRequestURI());
يعود؛
}قبض(استثناء ه){}
}
}
}
// يتم تحديد حالة المعالجة المقابلة للصفحة بواسطة معلمات خارجية.
إذا (strAct==null){
strOperation = "إظهار"؛
}آخر{
إذا (strAct.equals("modi")){
strOperation = "modi" ؛
intId=Integer.parseInt(request.getParameter("recordId"));
}آخر{
إذا(strAct.equals("addnew")){
strOperation="addnew";
}آخر{
strOperation = "إظهار"؛
}
}
}
// إذا كان السجل فارغا، قم بتغيير حالة الصفحة إلى "جديد"
إذا (المطاعم.getLength()==0){
strOperation="addnew";
}
%>
<أتش تي أم أل>
<الرأس>
<title>نظام تقديم الطعام في عالم غريب</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="expires" content="0">
<link rel="stylesheet" href="../../include/itsp.css" type="text/css">
</الرأس>
<الجسم>
<div محاذاة = "المركز">
<عرض الجدول = "100%" الحدود = "0" تباعد الخلايا = "0" خلية الحشو = "0" الارتفاع = "22">
<تر>
<td width="1"><img src="../../images/top_r1.GIF" width="62" height="22"></td>
<td width=150 align="center"> إدارة نظام تقديم الطعام--إدارة المطاعم</td>
<td><img src="../../images/top_r2.GIF" width="294" height="22"></td>
<td width=100 align="center"><a href="/index.html">[الخروج من النظام]</a></td>
</tr>
</الجدول>
<ر>
<ر>
<جدول bgcolor = "#999999" محاذاة = الحد الأوسط = 0 خلية الحشو = 1 تباعد الخلايا = 1
العرض = "90%">
<الجسم>
<tr bgcolor="#efefef" align="center" valign="middle">
<td class=ttTable height=30 width="20"> </td>
<td class=ttTable height=30 width="0">اسم المطعم</td>
<td class=ttTable height=30 width="0">رقم هاتف المطعم</td>
<td class=ttTable height=30 width="0">
<div align="center">عنوان المطعم</div>
</TD>
<td class=ttTable height=30 width='30'>
<div align="center">تعديل</div>
</TD>
<td class=ttTable height=30 width='30'>
<div align="center">حذف</div>
</TD>
</tr>
<%
for(int i=0;i<restaurants.getLength();i++)
{
مطعم العنصر=(العنصر) Restaurants.item(i);
if (strOperation=="modi" && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==intId){
%>
<%//إظهار التنسيق المعدل%>
<tr align="center" bgcolor="#ffffff" valign="middle">
<form name=dataform action="<%=request.getRequestURI()%>?act=modiDo"method="post" onSubmit=''return checkform(this);'' >
<td class=tdsmall height=25 width='20'>
<input type = "hidden" name = "recordId" value = "<%=restaurant.getAttributeNode("id").getNodeValue()%>">
<%=(i+1)%></td>
<فئة td=ارتفاع tdsmall=25>
<اسم الإدخال = "الاسم" class=stedit
style="HEIGHT: 22px; WIDTH: 150px" value="<%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
}%>
"الطول الأقصى = "40">
</TD>
<فئة td=ارتفاع tdsmall=25>
<input name="phone" class=stedit
style="HEIGHT: 22px; WIDTH: 100px" value="<%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue());
}%>" الحد الأقصى للطول = "20">
</TD>
<فئة td=ارتفاع tdsmall=25>
<input name="address" class=stedit
النمط = "الارتفاع: 22 بكسل؛ العرض: 200 بكسل" القيمة = "<%
إذا (restaurant.getElementsByTagName("address").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue());
}%>" الحد الأقصى للطول = "100">
</TD>
<td class=tdsmall height=25 width="25"><a href="javascript:if (checkform()==false);"><img border=0
الارتفاع=15 src="../../images/editok.gif" width=15></a></td>
<td class=tdsmall height=25 width="25"> </td>
</النموذج>
</tr>
<% }آخر{
// عرض التنسيق العادي %>
<tr align="center" bgcolor="#ffffff" valign="middle">
<td class=tdsmall height=25 width="20"><%=(i+1)%></td>
<td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
}%>
</TD>
<td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue());
}%></td>
<td class=tdsmall height=25 width='0'>
<%
إذا (restaurant.getElementsByTagName("address").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue());
}%>
</TD>
<td class=tdsmall height=25 width="30"><a href="<%=request.getRequestURI()%>?act=modi&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()% >"><img border=0
الارتفاع=15 src="../../images/edit.gif" width=15></a></td>
<td class=tdsmall height=25 width="30"><img border=0
الارتفاع = 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> </td>
</tr>
<%}
}%>
<% إذا (strOperation==addnew){
//إظهار التنسيق الجديد%>
<tr align="center" bgcolor="#ffffff" valign="middle">
<form name=dataform2 action="<%=request.getRequestURI()%>?act=addnewDo"method="post" onSubmit=''return checkform2(this);'' >
<td class=tdsmall height=25 width="20"></td>
<فئة td=ارتفاع tdsmall=25>
<اسم الإدخال = "الاسم" class=stedit
النمط = "الارتفاع: 22 بكسل؛ العرض: 150 بكسل" القيمة = "" الحد الأقصى للطول = "40">
</TD>
<فئة td=ارتفاع tdsmall=25>
<input name="phone" class=stedit
النمط = "الارتفاع: 22 بكسل؛ العرض: 100 بكسل" القيمة = "" الحد الأقصى للطول = "20">
</TD>
<فئة td=ارتفاع tdsmall=25>
<input name="address" class=stedit
النمط = "الارتفاع: 22 بكسل؛ العرض: 200 بكسل" القيمة = "" الحد الأقصى للطول = "100">
</TD>
<td class=tdsmall height=25 width="25"><a href="javascript:if (checkform2()==false);"><img border=0
الارتفاع=15 src="../../images/editok.gif" width=15></a></td>
<td class=tdsmall height=25 width="25"> </td>
</النموذج>
</tr>
<% } %>
</tbody>
</الجدول>
<ر>
<محاذاة الجدول=الحدود المركزية=0 حشوة الخلايا=0 تباعد الخلايا=2 العرض='95%'>
<الجسم>
<tr فالين = المركز>
<td align=middle> <br>
<حدود الجدول=0 خلية الحشو=0 تباعد الخلايا=0>
<تر>
<TD>
<% إذا (strOperation==addnew){
%>
<input class=stbtm name=update onClick="javascript:if (checkform2()==false);" type=button value="تحديث السجل">
<% }آخر{
إذا (strOperation = = "modi") {
%>
<input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="تحديث السجل">
<%
}آخر{
%>
<input class=stbtm type="button" name="Button" value="New" onClick="javascript:window.location.href=''<%=request.getRequestURI()%>?act=addnew'' ; "><%
}
} %>
</TD>
<TD>
<input class=stbtm type = "button" name = "Button" value = "Return" onClick = "javascript:window.location.href =''index.jsp''؛">
</TD>
</tr>
</الجدول>
</TD>
</tr>
</الجدول>
<ص> </ص>
</div>
</الجسم>
</html>
<لغة البرنامج النصي=جافا سكريبت>
<!--
نموذج فحص الدالة 2()
{
var Checkblank = /^(s*|( )|(.))*$/;
إذا (Checkblank.test(dataform2.name.value))
{
تنبيه("لا يمكن أن يكون اسم المطعم فارغًا!");
dataform2.name.focus();
عودة كاذبة.
}
إذا (Checkblank.test(dataform2.phone.value))
{
تنبيه("لا يمكن أن يكون رقم هاتف المطعم فارغا!");
dataform2.phone.focus();
عودة كاذبة.
}
window.dataform2.submit();
}
نموذج فحص الوظيفة ()
{
var Checkblank = /^(s*|( )|(.))*$/;
إذا (Checkblank.test(dataform.name.value))
{
تنبيه("لا يمكن أن يكون اسم المطعم فارغًا!");
dataform.name.focus();
عودة كاذبة.
}
إذا (Checkblank.test(dataform.phone.value))
{
تنبيه("لا يمكن أن يكون رقم هاتف المطعم فارغا!");
dataform.phone.focus();
عودة كاذبة.
}
window.dataform.submit();
}
-->
</النص>
ملحوظة: كتابة هذه الوثيقة ليست موجزة في العديد من الأماكن، لأنه في عملية تطوير البرنامج، غالبًا ما تؤدي البرامج المختصرة بشكل مفرط إلى صعوبات في الصيانة اللاحقة.
تجربة التطوير:
القيمة المرجعة لـ doc.getElementsByTagName("restaurants").item(int i) هي من نوع العقدة. إذا كنت لا تريد استدعاء قيمة السمة الخاصة بها، فلا داعي لتحويلها إلى نوع العنصر. يمكن تشغيلها مباشرة. بسبب وجود أخطاء في المواد المرجعية للتطوير، يستخدم هذا النظام التحويل القسري. يمكنك التفكير في استخدام العقدة للعمل مباشرة في التطوير المستقبلي.
لا تقبل الدالتان Trim() وInterger.parseInt() القيم الخالية.
الملفات اليسرى واليمنى ضمن Tomcat هي أدلة تبدأ من TOMCAT للحصول على التفاصيل، يرجى الرجوع إلى webappscanyinjspuserjudge.jsp لكتابة مسار xml.
يرجى من الأصدقاء المهتمين بالكود الأصلي الاتصال بي عبر عنوان البريد الإلكتروني التالي، [email protected]