Web Programming
مع Borland Delphi
Mastring Delphi 6
صفحات الويب الديناميكية :
عندما ندخل إلى موقع ويب (web site) ونقوم باستعراضة , غالبا ما تكون هذة المواقع هي عبارة عن صفحات ستاتيكية مكودة بتنسيق HTML , يمكن صنع هذا النوع الستاتيكي ببساطة , والمقصود بكلمة ستاتيكي ,أي أن هذة الصفحات هي صفحات ميتة غير تفاعلية ..
مثلا صفحة تحتوي على مجموعة من النصوص والصور ويوجد بها بالتأكيد إرتباطات تشعبية متعددة . ببساطة هذة الصفحات ميتة لإنها لا تتفاعل مع المستخدم , فهو لا يحصل على النتائج على أساس المعلومات التي أدخلها , بل لا يدخل لها أي معلومات أصلا , ويكون الهدف منها هو الإستعراض فقط , حيث يحصل جميع الزائرين للموقع على نفس الصفحة ونفس المعلومات , .
بالمقارنة مع ذلك .. فإنة يوجد بالطبع الجزء الآخر من المعادلة والمسمى صفحات الويب الديناميكية ((تفاعلية)) , وهو ما يطلق علية تطبيقات الإنترنت (Web Application) .
فإذا افترضنا مثلا حالة بنك الكتروني . .... فإنك لاتستطيع الإكتفاء فقط بعرض المعلومات لإنها ليست معلومات مشتركة ولإنها بحاجة إلى معالجة بحسب حالة كل زبون على حدة . , حيث يوجد مشتركين لكل مشترك حساب خاص , وتوجد قاعدة بيانات تقوم بإدخال بيانات حسابك إليها وطلب المعلومات منها , مثلا تقوم بإدخال إسمك ورقم حسابك وتحويل الرصيد المالي الذي تريدة, ويقوم تطبيق الإنترنت بالدخول إلى قاعدة البيانات وطلب سجلك منها وحساب رصيدك الجديد وتحويلة وما إلى ذلك من عمليات مختلفة تطلب حوار مع المستخدم ,حيث يحصل المستخدم على نتائج تناسب البيانات التي أدخلها . وهذا ما يسمى التفاعلية مع المستخدم ..
ومن أمثلتها أيضا مواقع المنتديات على الإنترنت , حيث تطلب وجود قواعد بيانات للمستخدمين والرسائل وحسابات مختلفة تختلف على أساسها الإستجابة لكل مستخدم ,.
وكلا النوعين السابقين يتم الدخول إلية من مستعرض الإنترنت WebBrowser .
الخلاصة : هناك فرق بين موقع الإنترنت الستاتيكي , وبين تطبيق الإنترنت (الموقع الديناميكي) , حيث يختص الأول باستعراض المعلومات كما هي , أما الثاني يتفاعل مع المستخدم ويستجيب له , وهو مشابة لتطبيقات سطح المكتب العادية المستخدمة مع فارق وحيد أنة يتألف من جزأين دائما .
جزء مخدم : هو التطبيق الذي نقوم ببناءة للتزويد بكود html .
جزء زبون : وهو دائما مستعرض الإنترنت (مثلا enternet explorer) ,
(على خلاف تطبيقات مزود-زبون التي تحتاج إلى جزء زبون خاص مختلف عن مستعرض الإنترنت )...
وبما أن الطرف الثاني هو دائما مستعرض الإنترنت , فلن نحتاج سوى بناء برنامج المخدم لتطبيقنا , .
بناء مخدمات الويب :
هناك عدة طرق لتوليد صفحات إنترنت ديناميكية ,
وبشكل أساسي تعتمد كل طريقة على البروتوكول المستخدم ..
البروتوكولين الأكثر شهرة من منظوري لبناء مخدمات الويب , هما
1- CGI : (the common gateway interface)
2- و مخدمات ويب APIs .
ASP (Active server pages) أيضا هي تقنية أخرى من تقنيات ميكروسوفت المشهورة وسيتم شرحها لوحدها لإن دلفي تتضمن دعم خاص لهـا .
_________
ملاحظــة : تذكر أن تقنية WebBroker في دلفي ألغت الفارق بين CGI , Win CGI , ISAPI بالتزويد ببيئة عمل مشتركة , . بهذة الطريقة أصبح بإمكانك بسهولة تحويل تطبيق CGI إلى Win CGI , وترقيتة إلى نموذج ISAPI , أو دمجة إلى Apache .. مما أعطى مرونة كبيرة جدا للمبرمجين .
نظرة على CGI :
CGI هو بروتوكول قياسي للإتصال بين مستعرض الإنترنت الزبون و مخدم الويب . وهو ليس بروتوكول ذو فعالية فائقة عمليا , ولكنة مستخدم بنطاق واسع وليس محدد المحنتى , . يسمح هذا البروتوكول للمستعرض بكلا الأمرين : طلب وإرسال البيانات . وهو يعتمد على دخل وخرج سطر الأوامر القياسي Command-Line للتطبيق (عادة ما يكون تطبيق دوز console) .
عندما يكتشف المخدم طلب لـتطبيق CGI , يقوم بتحميل التطبيق إلى الذاكرة , تمر بيانات سطر الأوامر من الصفحة التي طلبت التطبيق إلى التطبيق نفسة , وبعدها يتم إرسال خرج التطبيق الناتج إلى الكمبيوتر الزبون ,.
طبعا , هناك الكثير من الأدوات واللغات التي يمكنك استخدامها لكتابة تطبيق CGI , ودلفي هي فقط واحدة منهم .
توجد في الحقيقة عدة نكهات للـ CGI ,
- ال CGI التقليدي الذي يستخدم دخل وخرج سطر الأوامر القياسي (Standard Command-line) . وطبعا مع متغيرات البيئة .
- الـ Win CGI يستخدم ملف ini يتم تمريرة على انة متغير سطر أوامر (command-line parameter) للتطبيق , بدلا من متغيرات البيئة .وملفات دخل وخرج محددة بدلا من استخدام دخل وخرج سطر الأوامر القياسي .
يطور بائعي المخدمات WinCGI بشكل أساسي من أجل مبرمجي فيجوال بيزك , الذين لا يستطيعون دخول متغيرات البيئة (Environment variables) .
- إصدار مختلف آخر جديد يسمى FastCGI , يفترض أن يقوم بتقدم كلي في استدعاء تطبيقات CGI بسرعة أكبر , ولكنة غير مدعوم بشكل واسع حتى الآن .
**********************
- لبناء برنامج CGI بسيط وبدائي ((بدون استخدام أية كائنات دعم )) ,.
قم ببساطة ببناء برنامج دلفي جديد من النوع Consol , استبدل الشفرة الموجودة بما يلي :
وبعد التنفيذ ينتج الخرج التالي :
نظرة على ISAPI / NSAPI :
أولا ماهما , وهل هناك فرق بين ISAPI و NSIPI ..
ISAPI = (Internet Server Api) وهي من إنتاج ميكروسوفت ,.
NSAPI = (Netscape Server Api) .
تسمح لنا هذة الـ APIs بكتابة ملف DLL , والذي يحملة السيرفر إلى منطقة عنونتة الخاصة وبشكل عام يحفظ في الذاكرة لبعض الوقت .
حالما يقوم المخدم بتحميل الـ DLL يستطيع تنفيذ استجابات لطلبات مختلفة , من خلال جسم التطبيق الرئيسي نفسة , من دون أن يضطر لتحميل نسخة جديدة من التطبيق من أجل كل طلب , ((كما يحصل في حالة الـ CGI .))
تطبيقات هذا النوع أسرع من تطبيقات الـ CGI , كما أن النظام في هذة الحالة يستطيع تخديم طلبات متزامنة (في نفس الوقت) .
المشكلة الأساسية لهذة المكتبات هي التكامل المحكم مع المخدم , وبالتالي إذا تحطم الـ DLL يمكن أن يتحطم مخدم الويب معة ...
• على كل حال معظم إصدارات Microsoft IIS حلت هذة المشكلة بتشغيل الـ DLL في فضاء ذاكرة محمي Protected space .
مشكلة أخرى هي أنة طالما أن الDll في الذاكرة فإنك لا تستطيع الترجمة Compile أو التحديث , وسوف تضطر لإلغاء تحميل الDll أولا , أو إيقاف مخدم الويب للحظة (العملية التي يمكنك القيام بها بحاسبك الشخصي للتجربة فقط ) .
تقنيا فإن مكتبات ISAPI DLLs ليست مختلفة كثيرا عن مكتبات الويندوز الإعتيادية , حيث يجب عليها أن تصدر زوج من التوابع المعروفة , وهي التوابع التي يقوم المخدم بإستدعائها من إجل الإستجابة للطلبات . وهذة التوابع هي :
- GetExtensionVersion
- HttpExtensionProc
يستدعي المخدم التابع الأول عندما يحمل الـ DLL للمرة الأولى , أما التابع الثاني فهو يستدعى من أجل كل مرة يتم فيها الطلب ..
مثال :
وحدات أباتشي :
بشكل مشابة ل Microsoft IIS , فإن مخدم أباتشي (_مؤسسة أباتشي www.apache.org) ...............
..............
نكمل في المرة القادمة
.......................
............................
[ تم تحريره بواسطة orwa on 23/12/2003 ]
مع Borland Delphi
Mastring Delphi 6
صفحات الويب الديناميكية :
عندما ندخل إلى موقع ويب (web site) ونقوم باستعراضة , غالبا ما تكون هذة المواقع هي عبارة عن صفحات ستاتيكية مكودة بتنسيق HTML , يمكن صنع هذا النوع الستاتيكي ببساطة , والمقصود بكلمة ستاتيكي ,أي أن هذة الصفحات هي صفحات ميتة غير تفاعلية ..
مثلا صفحة تحتوي على مجموعة من النصوص والصور ويوجد بها بالتأكيد إرتباطات تشعبية متعددة . ببساطة هذة الصفحات ميتة لإنها لا تتفاعل مع المستخدم , فهو لا يحصل على النتائج على أساس المعلومات التي أدخلها , بل لا يدخل لها أي معلومات أصلا , ويكون الهدف منها هو الإستعراض فقط , حيث يحصل جميع الزائرين للموقع على نفس الصفحة ونفس المعلومات , .
بالمقارنة مع ذلك .. فإنة يوجد بالطبع الجزء الآخر من المعادلة والمسمى صفحات الويب الديناميكية ((تفاعلية)) , وهو ما يطلق علية تطبيقات الإنترنت (Web Application) .
فإذا افترضنا مثلا حالة بنك الكتروني . .... فإنك لاتستطيع الإكتفاء فقط بعرض المعلومات لإنها ليست معلومات مشتركة ولإنها بحاجة إلى معالجة بحسب حالة كل زبون على حدة . , حيث يوجد مشتركين لكل مشترك حساب خاص , وتوجد قاعدة بيانات تقوم بإدخال بيانات حسابك إليها وطلب المعلومات منها , مثلا تقوم بإدخال إسمك ورقم حسابك وتحويل الرصيد المالي الذي تريدة, ويقوم تطبيق الإنترنت بالدخول إلى قاعدة البيانات وطلب سجلك منها وحساب رصيدك الجديد وتحويلة وما إلى ذلك من عمليات مختلفة تطلب حوار مع المستخدم ,حيث يحصل المستخدم على نتائج تناسب البيانات التي أدخلها . وهذا ما يسمى التفاعلية مع المستخدم ..
ومن أمثلتها أيضا مواقع المنتديات على الإنترنت , حيث تطلب وجود قواعد بيانات للمستخدمين والرسائل وحسابات مختلفة تختلف على أساسها الإستجابة لكل مستخدم ,.
وكلا النوعين السابقين يتم الدخول إلية من مستعرض الإنترنت WebBrowser .
الخلاصة : هناك فرق بين موقع الإنترنت الستاتيكي , وبين تطبيق الإنترنت (الموقع الديناميكي) , حيث يختص الأول باستعراض المعلومات كما هي , أما الثاني يتفاعل مع المستخدم ويستجيب له , وهو مشابة لتطبيقات سطح المكتب العادية المستخدمة مع فارق وحيد أنة يتألف من جزأين دائما .
جزء مخدم : هو التطبيق الذي نقوم ببناءة للتزويد بكود html .
جزء زبون : وهو دائما مستعرض الإنترنت (مثلا enternet explorer) ,
(على خلاف تطبيقات مزود-زبون التي تحتاج إلى جزء زبون خاص مختلف عن مستعرض الإنترنت )...
وبما أن الطرف الثاني هو دائما مستعرض الإنترنت , فلن نحتاج سوى بناء برنامج المخدم لتطبيقنا , .
بناء مخدمات الويب :
هناك عدة طرق لتوليد صفحات إنترنت ديناميكية ,
وبشكل أساسي تعتمد كل طريقة على البروتوكول المستخدم ..
البروتوكولين الأكثر شهرة من منظوري لبناء مخدمات الويب , هما
1- CGI : (the common gateway interface)
2- و مخدمات ويب APIs .
ASP (Active server pages) أيضا هي تقنية أخرى من تقنيات ميكروسوفت المشهورة وسيتم شرحها لوحدها لإن دلفي تتضمن دعم خاص لهـا .
_________
ملاحظــة : تذكر أن تقنية WebBroker في دلفي ألغت الفارق بين CGI , Win CGI , ISAPI بالتزويد ببيئة عمل مشتركة , . بهذة الطريقة أصبح بإمكانك بسهولة تحويل تطبيق CGI إلى Win CGI , وترقيتة إلى نموذج ISAPI , أو دمجة إلى Apache .. مما أعطى مرونة كبيرة جدا للمبرمجين .
نظرة على CGI :
CGI هو بروتوكول قياسي للإتصال بين مستعرض الإنترنت الزبون و مخدم الويب . وهو ليس بروتوكول ذو فعالية فائقة عمليا , ولكنة مستخدم بنطاق واسع وليس محدد المحنتى , . يسمح هذا البروتوكول للمستعرض بكلا الأمرين : طلب وإرسال البيانات . وهو يعتمد على دخل وخرج سطر الأوامر القياسي Command-Line للتطبيق (عادة ما يكون تطبيق دوز console) .
عندما يكتشف المخدم طلب لـتطبيق CGI , يقوم بتحميل التطبيق إلى الذاكرة , تمر بيانات سطر الأوامر من الصفحة التي طلبت التطبيق إلى التطبيق نفسة , وبعدها يتم إرسال خرج التطبيق الناتج إلى الكمبيوتر الزبون ,.
طبعا , هناك الكثير من الأدوات واللغات التي يمكنك استخدامها لكتابة تطبيق CGI , ودلفي هي فقط واحدة منهم .
توجد في الحقيقة عدة نكهات للـ CGI ,
- ال CGI التقليدي الذي يستخدم دخل وخرج سطر الأوامر القياسي (Standard Command-line) . وطبعا مع متغيرات البيئة .
- الـ Win CGI يستخدم ملف ini يتم تمريرة على انة متغير سطر أوامر (command-line parameter) للتطبيق , بدلا من متغيرات البيئة .وملفات دخل وخرج محددة بدلا من استخدام دخل وخرج سطر الأوامر القياسي .
يطور بائعي المخدمات WinCGI بشكل أساسي من أجل مبرمجي فيجوال بيزك , الذين لا يستطيعون دخول متغيرات البيئة (Environment variables) .
- إصدار مختلف آخر جديد يسمى FastCGI , يفترض أن يقوم بتقدم كلي في استدعاء تطبيقات CGI بسرعة أكبر , ولكنة غير مدعوم بشكل واسع حتى الآن .
**********************
- لبناء برنامج CGI بسيط وبدائي ((بدون استخدام أية كائنات دعم )) ,.
قم ببساطة ببناء برنامج دلفي جديد من النوع Consol , استبدل الشفرة الموجودة بما يلي :
program CgiDate;
{$APPTYPE CONSOLE}
uses SysUtils;
begin
writeln (‘content-type:text/html ’);
writeln;
writeln (‘’);
writeln (‘Time at this site’);
writeln (‘’);
writeln (‘Time at this site’);
writeln (‘
’);
writeln (‘’);
writeln (FormatDateTime(‘“Today is “ dddd,,mmmm d,yyyy,’+
‘“
and the time is ” hh::mm:ss AM/PM ’,Now));
writeln (‘’);
writeln (‘
’);
writeln (‘Page generated by CgiDate.exe’);
writeln (‘’);
end .
وبعد التنفيذ ينتج الخرج التالي :
نظرة على ISAPI / NSAPI :
أولا ماهما , وهل هناك فرق بين ISAPI و NSIPI ..
ISAPI = (Internet Server Api) وهي من إنتاج ميكروسوفت ,.
NSAPI = (Netscape Server Api) .
تسمح لنا هذة الـ APIs بكتابة ملف DLL , والذي يحملة السيرفر إلى منطقة عنونتة الخاصة وبشكل عام يحفظ في الذاكرة لبعض الوقت .
حالما يقوم المخدم بتحميل الـ DLL يستطيع تنفيذ استجابات لطلبات مختلفة , من خلال جسم التطبيق الرئيسي نفسة , من دون أن يضطر لتحميل نسخة جديدة من التطبيق من أجل كل طلب , ((كما يحصل في حالة الـ CGI .))
تطبيقات هذا النوع أسرع من تطبيقات الـ CGI , كما أن النظام في هذة الحالة يستطيع تخديم طلبات متزامنة (في نفس الوقت) .
المشكلة الأساسية لهذة المكتبات هي التكامل المحكم مع المخدم , وبالتالي إذا تحطم الـ DLL يمكن أن يتحطم مخدم الويب معة ...
• على كل حال معظم إصدارات Microsoft IIS حلت هذة المشكلة بتشغيل الـ DLL في فضاء ذاكرة محمي Protected space .
مشكلة أخرى هي أنة طالما أن الDll في الذاكرة فإنك لا تستطيع الترجمة Compile أو التحديث , وسوف تضطر لإلغاء تحميل الDll أولا , أو إيقاف مخدم الويب للحظة (العملية التي يمكنك القيام بها بحاسبك الشخصي للتجربة فقط ) .
تقنيا فإن مكتبات ISAPI DLLs ليست مختلفة كثيرا عن مكتبات الويندوز الإعتيادية , حيث يجب عليها أن تصدر زوج من التوابع المعروفة , وهي التوابع التي يقوم المخدم بإستدعائها من إجل الإستجابة للطلبات . وهذة التوابع هي :
- GetExtensionVersion
- HttpExtensionProc
يستدعي المخدم التابع الأول عندما يحمل الـ DLL للمرة الأولى , أما التابع الثاني فهو يستدعى من أجل كل مرة يتم فيها الطلب ..
مثال :
function HttpExtensionProc(var ECB:TEXTENSION_CONTROL_BLOCK):DWORD;stdcall ;
var
OutStr:string;
StrLength:Cardinal;
begin
with ECB do
begin
OutStr :=
‘First Isapi Demo’+
‘First Isapi Demo’+
‘Hello Mastering Delphi Readers...
’+
‘Activated by ‘ ++PChar(@lpszPathInfo [1 ])+‘
’+
‘From IsapiDLL on ‘+DateToStr(Now)+‘ at ‘+TimeToStr(Now)+
‘
’;
StrLength :=Length(OutStr);
WriteClient(ConnID,PChar (OutStr),StrLength,0);
end ;
Result :=HSE_STATUS_SUCCESS;
end ;
وحدات أباتشي :
بشكل مشابة ل Microsoft IIS , فإن مخدم أباتشي (_مؤسسة أباتشي www.apache.org) ...............
..............
نكمل في المرة القادمة
.......................
............................
[ تم تحريره بواسطة orwa on 23/12/2003 ]
المنتديات
إضافة تعليق جديد