نكاتي در مورد برنامه هاي كاربردي تحت وب
يك برنامه كاربردي تحت وب بايك وب سايت تفاوت دارد . يك وب سايت شامل اطلاعات ثابتي است كه از پيش آماده شده و به صورت فايل هاي HTML ذخيره شده اند .در اين حالت جهت حركت اطلاعات از سرويس دهنده به
سرويس گيرنده مي باشد . در واقع وب سايت اطلاعات را به كاربر ارائه مي دهد .
بين درخواست ها ، سرويس دهنده از عملكرد سرويس گيرنده اطلاعي ندارد . سرويس گيرنده مي تواند از يك محل به محل ديگر بپرد و اين كار روي وب سايت اوليه هيچ تاثيري ندارد ، چون هر يك از صفحات به صورت يك واحد كاملا جدا مي باشند . در واقع وب سايت شامل گروهي از فايل هاي HTML از هم جدا مي باشد .
در مقابل ، يك برنامه كاربردي تحت وب ، اطلاعات را براي يك كاربر يا گروهي از كاربران به شكلي خاص فرمت كرده و ارائه مي دهد . در اين حالت ، جهت حركت اطلاعات دو طرفه مي باشد ؛ محتوياتي كه توسط مرور گر
نمايش داده مي شوند ، بر حسب اطلاعات ورودي كاربر يا هويت وي تعيين مي گردند .
بنابر اين يك برناها كاربردي تحت وب ، اطلاعات را به صورت ديناميكي ارائه مي دهد نه به صورت فايل هاي HTML ثابت . در واقع وظيفه برنامه ، فراهم كردن اطلاعات بر حسب شرايط است كه اين اطلاعات معمولا از پايگاه داده ( Database ) بدست مي آيد . برنامه كاربردي نه تنها اطلاعات مي دهد ، بلكه مي تواند از كاربر اطلاعات بگيرد و بكارهاي مختلف پاسخ مناسب دهد . به عبارت ديگر ، يك برنامه كاربردي ، عملكرد كاربر را از يك در خواست به
درخواست ديگر رديابي مي كند . بنابراين كاربر مي تواند آن گونه كه در يك وب سايت به جستجو و گردش مي پردازد ، به شكل دلخواه تمام صفحات يك برنامه كاربردي را برسي و مشاهده كند . بلكه اين برنامه كاربردي است كه صفحات مناسب را در شرايط مقتضي به طور ديناميكي توليد كرده و به كاربر ارائه مي دهد .
براي نوشتن برنامه هاي كاربردي تحت وب از زبان هاي مختلفي مي توان استفاده كرد ، مثل : Perl , Python , Java , C , C ++ , Visual Basic حتي Quick Basic يا Script هاي Unix .
در هر صورت مواردي كه در زير به آنها اشاره مي شود جزء ضروريات يك برنامه كاربردي هستند :
- ارتباط با يك پايگاه داده
- سرعت
- كار با رشته ها
- امنيت ( Security )
- تراكنش ها ( Tranaactions )
تراكنش چيست ؟
يك برنامه كاربردي تحت وب اغلب بايد كارهاي مختلفي انجام دهد كه هر يك از آنها براي تداوم اعتبار اطلاعات بايد به طور كامل انجام شوند . هنگام كار با يك پايگاه داده ، معمولا اين كار ها را بصورت يك تراكنش در نظر مي گيريم . يك تراكنش قرار دادي است كه موفقيت يا عدم موفقيت مجموعه اي از عمليات را تضمين مي كند كه در صورت عدم موفقيت ، اطلاعات بايد دست نخورده باقي بمانند . به عنوان يك نمونه كلاسيك ، مي توانيم يك حساب چك ( Checking Account ) را در نظر بگيريم .
هنگامي كه يك چك را به حساب خود مي گذاريد ، بانك مبلغ مشخص شده را از حساب مربوطه برداشته و به حساب شما واريز مي كند . كل اين عمليات در صورتي موفقيت آميز خواهد بود كه برداشت و واريز پول به طور كامل انجام شود . در اين حالت عمل دو گانه برداشت از يك حساب و واريز به يك حساب ديگر را يك تراكنش مي گوييم .
تفاوت ميان برنامه هاي IIS و DHTML
برنامه هاي IIS ، برنامه هايي هستند كه برروي سرويس دهنده و تحت Microsoft Internet Information Server اجرا مي شوند . در مقابل ، برنامه هاي DHTML برنامه Microsoft Internet Explorer استفاده مي كنند و به اين ترتيب به ورودي هاي كاربر پاسخ سريع مي دهند .
اين برنامه ها براي نوشتن بازي ها و شبيه سازي محيط و گرفتن اطلاعات از كاربر مناسب هستند . متاسفانه اين نوع برنامه ها به نسخه چهارم IE يا نسخه هاي بالاتر آن نياز دارند . با توجه به اين كه در اين كتاب به تفصيل در مورد ASP و
مسائل حاشيه اي آن بحث خواهيم كرد ، بد نيست كمي بيشتر در مورد برنامه هاي IIS توضيح دهيم . چون هدف از يادگيري ASP ، نوشتن برنامه هاي IIS مي باشد كه بر روي سرويس دهنده اجرا مي شوند .
برنامه هاي IIS با چندين مرورگر مختلف و نسخه هاي متفاوت آنها سازگاري دارند . همچنين در محيط هاي مختلف Mak يا Unix نيز اجراء مي شوند . بنابر اين اين نوع برنامه ها براي نوشتن برنامه هاي تجاري كه مخاطبين زيادي دارند مناسب هستند ؛ چون دليلي ندارد همه كاربران از ويندوز استفاده كرده و يا نسخه IE را در اختيار داشته باشند.
با توجه به اين كه برنامه هاي IIS برروي سرويس دهنده اجرا مي شوند ، براي به روز در آوردن آنها تنها كافي است كد موجود برروي سرويس دهنده را تغيير داد. اين نوع برنامه ها از هر محلي قابل دسترسي مي باشند . هنگامي كه يك برنامه IIS برروي سرويس دهنده نصب شده و به اجرا در آمد ، هر كامپيوتري كه بتواند به آن سرويس دهنده متصل شود مي تواند از آن برنامه استفاده كند .
شما مي توانيد براي شناسايي كاربران ، به آنها نام و كلمه عبور اختصاص دهيد و هنگام برقراري ارتباط با برنامه كاربردي ، نام و كلمه عبور را در خواست كنيد . با توجه به اين كه تمام اطلاعات بر روي يك كامپيوتر ذخيره مي شوند ،
هنگامي كه كاربر برنامه كاربردي را ترك كند ، هيچ نوع اطلاعاتي را از دست نمي دهد .
در قسمت بعد ، در مورد چگونگي كاركرد برنامه هاي IIS بحث خواهيم كرد .
چگونگي در خواست فايل ها توسط مرورگر :
هنگامي كه شما يك آدرس URL در فيلد آدرس مرورگر خود تايپ مي كنيد ، چند چيز اتفاق مي افتد . مرورگر ، آدرس وارد شده را تحليل كرده و پيغامي به سرويس دهنده نام ( Name Server ) مي فرستد تا نام مشخص شده
(به عنوان مثال ، Microsoft . com ) را به يك آدرس IP ( Internet Protocol ) – (به عنوان مثال ، 207.84.25.32 ) ترجمه كند . سپس مرورگر با استفاده از آن آدرس IP به سرويس دهنده مربوطه متصل شده و فايل را درخواست مي كند . سرويس دهنده فايل را مي خواند و محتويات آن را به مرورگر بر مي گرداند . در اين مرحله مرورگر ، دستورات HTML آن فايل را تحليل و فرمت فايل راتعيين مي كند . بيشتر فايل هاي HTML درون خود به تصاوير گرافيكي اشاره مي كنند. اين اشاره ها به صورت رفرنس (Reference ) بوده كه هريك از آنها نيز بايك آدرس
URL مشخص مي شوند .
بنابراين كل اين عمليات براي تك تك تصاوير و يا فايل هاي ديگري كه با رفرنس به آنها اشاره شده است تكرار مي شود.
به اين ترتيب پروسه نمايش يك فايل HTML شامل تعدادي تراكنش كوچك بين سرويس گيرنده ( يعني مرورگر ) و سرويس دهنده وب مي باشد .
برنامه هاي IIS نيز تقريبا به همين صورت عمل مي كنند. ابتدا يك مرورگر يك صفحه را از سرويس دهنده درخواست مي كند . اين درخواست هميشه براي يك فايل خاص مي باشد . پاسخ سرويس دهنده به نوع فايل درخواستي بستگي دارد. اگر فايل مورد نظر از نوع HTML (با پسوند .htm يا .html ) باشد ، سرويس دهنده به سادگي محتويات فايل را مي خواند و محتويات آنرا به صورت يك رشته در آورده و براساس قوانين URL كد گذاري مي كند و سپس رشته حاصله را به مرورگر برمي گرداند . كل اين پروسه ، از درخواست تا پاسخ ، يك تراكنش مابين سرويس گيرنده و سرويس دهنده تلقي مي شود . سرويس گيرنده همواره تراكنش را شروع مي كند و سپس تا زمان رسيدن پاسخ از سوي سرويس دهنده منتظر مي ماند كه در اين زمان تراكنش كامل شده و خاتمه مي يابد .
درخواست فايل از سرويس دهنده وب مشابه هنگامي است كه در Windows Explorer روي يك فايل شبكه اي ( فايلي كه برروي كامپيوتر سرويس دهنده قرار دارد ) دوبار – كليك مي كنيد ؛ البته با دو تفاوت :
-
- سرويس دهنده وب هيچگاه اجازه نمي دهد كه برنامه محلي شما (يعني مرورگر ) فايل درخواستي را باز كرده يا درآن چيزي بنويسيد ؛ در عوض خودش فايل را باز مي كند و محتويات آن را برميگرداند .
- ارتباط مابين سرويس گيرنده و سرويس دهنده گذرا ( Transient ) است . براي برقراري ارتباط با سرويس دهنده وب نيازي به مشخص كردن نام درايوي كه فايل بر روي آن قرار دارد نيست . پس از اين كه سرويس دهنده وب به درخواست شما پاسخ داد، ارتباط را قطع مي كند.
هنگامي كه تراكنش كامل شد ، سرويس دهنده وب ، سرويس گيرنده را به طور كلي از ياد مي برد . اگر بلا فاصله كليد
Refresh ( موجود برروي نوار ابزار IE ) را كليك كنيد . سرويس دهنده وب ، آن تراكنش را تكرار مي كند و اصلا به خاطر نمي آورد كه 5 ثانيه قبل اين فايل توسط شما درخواست شده است .
اگر ارتباط براساس پروتكل استاندارد HTTP برقرارشود ، بيشتر فايل ها به چندين تراكنش نياز دارند ، يكي براي فايل Html اصلي و بقيه براي يكايك فايل هاي گرافيكي كه در فايل اصلي به آنها اشاره شده است . بنابراين براي نمايش يك فايل كه شامل 5 تصوير گرافيكي است ، مرورگر درخواست جداگانه به سرويس دهنده وب مي فرستد .
دقت کنيد که در اين شکل , درخواست اول براي يک فايل HTML انجام شده و 5 درخواست بعدي براي يک نوع فايل ديگر که اغلب به آن نوع MIME گفته مي شود و شامل اطلاعات باينري است صورت مي گيرند.
چگونگي پاسخ گويي IIS به درخواست هاي فايل ها به پسوند آنها بستگي دارد . ( فايل هايي که براي سرويس دهنده قابل شناسايي باشند در Registery ثبت مي شوند . ) اين مشابه همان روشي است که Windows Explorer
براي باز کردن برنامه مناسب , هنگامي که بر روي يک فايل دوبار کليک مي کنيد بکار مي برد. در مورد مرورگرها ،سرآيند ( Header ) نوع MIME كه توسط سرويس دهنده برگردانده مي شود ، نحوه برخورد مرورگربا انواع مختلف فايل ها را تعيين مي كند .
MIME مخفف Multipurpose Internet Mail Extension مي باشد . سرويس دهنده نوع MIME را به همراه هر درخواست بر مي گرداند و مرورگر با استفاده از آن چگونگي نمايش آن فايل راتعيين مي كند . در بيشتر موارد كه نوع فايل ها .html ، .gif يا .jpg مي باشد ، مرورگر مي تواند مستقيما آنها را نمايش دهد. براي انواع ديگر فايل ها ، مثل .doc يا .avi ، مرورگر نوع MIME را دريك ليست پيدا مي كند و سپس برنامه مناسب را براي نمايش آن فايل آغاز مي كند .
• توجه : در صورتي كه مي خواهيد اطلاعات بيشتري در مورد MIME بدست آوريد ، مي توانيد ليست كاملي از تمام انواع فايل هاي ثبت شده را از طريق آدرس :
•
http://www.isi.edu /in-notes / iana / assignments / media- types / media- types
بدست آوريد .
نكته ديگري كه مي توان به آن اشاره كرد ، نحوه پاسخ گويي IIS به درخواست ها مي باشد .IIS تمام درخواست ها را بر اساس يك جزء زمان پردازش مي كند . هنگامي كه يك درخواست را قبول مي كند ، سرويس دهي به آن را آغاز مي كند و سپس درخواست بعدي را مي پذيرد . زمان را به بخش هاي كوچك تقسيم كرده و در هرجزء زمان به پردازش درخواست هاي متعدد مي پردازد تا زماني كه پاسخ هر يك از آنها را كامل كند . سرويس دهنده مي تواند پاسخ هر دستگاه را بلافاصله پس از شروع پردازش ارسال كند و يا مي تواند تا زمان پردازش يك درخواست ، پاسخ آن را نگه دارد و سپس همه آن را يكباره بفرستد .
مرورگرها مي توانند فايل هاي اجرائي نيز درخواست كنند . نوع كلي فايل اجرائي ، فايل ها يا برنامه هاي CGI
مي باشند . براي نوشتن برنامه هاي CGI مي توان از زبان هايي مثل C++ / C ، Perl ، VB و ... استفاده كرد .
درخواست يك فايل .asp توسط مرورگر:
هنگامي كه فايل درخواستي يك فايل .asp باشد ، نحوه پاسخ گويي به آن توسط سرويس دهنده اندكي تفاوت دارد. سرويس دهنده فايل مورد نظر را از ديسك گرفته و محتويات آن را به موتور مي فرستد .
موتور ASP فايل راتحليل كرده و قسمت هايي را كه شامل اسكريپت باشند مشخص مي كند . كد هاي موجود در فايل هاي ASP درون >% ، % < قرار مي گيرند ؛ مثل
< % this is a code % >
در اين نقطه ، بسته به اين كه كدهاي موجود به چه زباني نوشته شده باشند ( كه اغلب Javascript يا VBScriptمورد
استفاده قرار مي گيرد ) ، موتور مفسر آن زبان فراخواني شده و دستورات را پردازش مي كند . نتيجه كار به صورت يك فايل HTML به مرورگر ارسال مي شود .
اشياء دروني ASP :
در اين قسمت اشياء درون كتابخانه ASP را به طور مختصر معرفي مي كنيم و بيان جزئيات بيشتر را به فصول بعد موكول مي كنيم . ASP داراي 6 شيء مختلف است :
• server
• Application
• Session
• Request
• Response
• Scripting Context
حال هر يك از آنها را به طور خلاصه توضيح مي دهيم .
شيء Server
براي يك سرويس دهنده وب تنها يك شيء Server وجود دارد . تمام برنامه هاي كاربرديي كه برروي يك سرويس دهنده وب اجرا مي شوند ، به طور مشترك از يك شيء Server استفاده مي كنند . براي ساختن نمونه اي از يك شيء خاص در يك صفحه ASP ، مي توانيد از شيء Server استفاده كنيد . اين كار مشابه دستور
Set my Object = new Some Object
در Visual Basic مي باشد . شيء Server ويژگي ها و متدهايي نيز دارد كه آدرس هاي مجازي وب ( Virtual Web Paths ) را به آدرس هاي فيزيكي تبديل مي كنند . به عبارت ديگر ، اگر برنامه كاربردي شما در دايركتوري مجازي my Web قرار داشته باشد ، مي توانيد آدرس فيزيكي محل ذخيره فايل هاي درون دايركتوري my Web را بدست آوريد . به علاوه شيء Server مي تواند اطلاعات رشتهاي را بر اساس پروتكل HTTP كد گذاري كند .
شيء Application
براي هر برنامه كاربردي يك شيء Application وجود . از ديد موتور ASP ، يك برنامه كاربردي مجموعه اي از فايل ها و زير دايركتوري ها ي درون يك دايركتوري است كه شامل فايل Global.asa باشد . پسوند .asa بيانگر Active Server Application مي باشد . شيء Application به گونه اي است كه مي توانداشياء و متغيير هاي ديگر را در برگيرد . در حقيقت اگرچه اين شيء يك ديكشنري (Dictionary ) نيست ، ولي ساده تراست كه آن را به صورت يك ديكشنري در نظر بگيريم . ديكشنري ها مانند كلكسيون هاي Visual Basic ، ليستي از مقادير جفت جفت هستند.
اين مقادير جفتي را جفت هاي وابسته ( Association ) مي ناميم . هر يك از اين جفتهاي وابسته شامل يك كليد (key ) و يك مقدار متناظر آن هستند. كليد يك مقدار رشته اي است و متناظر آن از *** Variant است . بنابراين هر كليد مي تواند به يك مقدار ديگر از هر نوع ، مثل Integer ، Object و يا Nothing وابسته باشد .
شما مي توانيد شيء Application را مانند بقيه متغيير هاي عمومي ( Global ) برنامه خود به كار بريد. ولي براي ذخيره مقادير به غير از انواع داده هاي ساده و آرايه ها از آن استفاده نكنيد . امكان ذخيره اشيائي كه از مدل ريسماني آپارتمان ( Apartment Threading Model ) استفاده مي كننددر شيء Application وجود ندارد .
شيء Session :
هر برنامه كاربردي مي تواند چندين جلسه كاري داشته باشد كه هر يك از اين جلسات به يكي از كاربران برنامه مربوط مي شود . شيء Session مانند شيء Application مي تواند براي ذخيره كردند متغير ها و اشياء ديگر بكار رودو مانند ديكشنري ، در برگيرنده كليد ها و مقادير متناظر آنها مي باشد . تنها تفاوت اين شيء با شيء Application در اين است كه براي هر كاربر يك شيء Session منحصر به فرد اختصاص داده مي شود در حالي كه شيء Application بين تمام كاربران مشترك است .
تعريف جلسه كاري :
در اين نقطه بهتر است مفهوم جلسه كاري را شرح دهيم . مفهوم يك جلسه در عين سادگي كمي پيچيده به نظر مي رسد. هنگامي كه يك كاربر يكي از صفحات يك برنامه كاربردي تحت وب را درخواست كند و مرورگر آن كاربر يك SessionID ( SessionID يك نوع Cookie است ) معتبر كه توسط ASP توليد شده باشد را به همراه درخواست ارسال نكند، يك جلسه كاري براي آن كاربر آغاز مي شود . هنگامي كه موتور ASP يك درخواست را بدون يك SessionID معتبر از يك مرورگر دريافت مي كند ، يك شيء Session جديد مي سازد ، يك مقدار تصادفي به SessionID اختصاص داده و Cookie ( در مورد Cookie ها بعدا به طور مفصل بحث خواهيم كرد.فعلا همين را بدانيد كه Cookie ها براي نگهداري وضعيت جلسات بكار ميروند. هر Cookie به صورت يك جفت وابسته است كه روي كامپيوتر سرويس گيرنده ذخيره ميشود ) آن را مقدار دهي مي كند . از اين به بعد تمام درخواست ها يي كه از سوي آن مرورگر ارسال مي شوند ، مقدار آن SessionID را به همراه خواهند داشت و موتور ASP با استفاده از SessionID شيء Session مربوط به آن كاربر را شناسايي مي كند . در واقع ASP از اين طريق اطلاعات مربوط به يك كاربر خاص را بين درخواست ها نگهداري مي كند .
اگر مرور گر كاربر از Cookie پشتيباني نكند و يا كاربر آن را به گونه اي تنظيم كرده باشد كه Cookie را قبول نكند ، SessionID توليد شده توسط ASP از سوي مرورگر پذيرفته نمي شود و كاربر مزبور يك شيء Session معتبر نخواهد داشت .
در اين حالت چون مقدار Cookie از بين مي رود ، موتورASP نمي تواند در خواست هاي بعدي رابه شيء Session متصل كند . به علاوه ، با رسيدن هر درخواست از سوي مرورگر ، موتور ASP يك شيء Session جديد خواهد ساخت. بنابراين باز هم مي توانيد متغير هاي دلخواه خود را در شيء Session ذخيره كنيد ، ولي پس از اين كه دستورات موجود در آن صفحه (منظور صفحه اي است كه شيء Session را در آن بكار برده ايد ) به پايان رسيد ، شيء Session مزبور از درجه اعتبار ساقط مي شود و ديگر نبايد از مقادير درون آن استفاده كنيد .
شيء Request :
مرورگر ها براي هر صفحه درخواستي ، اطلاعات زيادي را به سرويس دهنده ارسال مي كنند. معمولا هنگامي كه شما صفحات مختلف يك سايت را مشاهده ميكنيد، هيچ يك از اين اطلاعات را نمي بينيد، ولي اين اطلاعات براي استفاده برنامه هاي كاربردي روي سرويس دهنده در دسترس ميباشند. موتور ASP اين اطلاعات را به شكل زيبايي در يك شيء به نام Request بسته بندي مي كند.
شيء Request تمام اطلاعات سرآيند( Header ) را به همراه درخواست صفحه مورد نظر كاربر و همچنين اطلاعاتي كه ممكن است كاربر در فيلد هاي يك فرم HTML وارد كرده باشد دربر مي گيرد . براي بدست آوردن اين اطلاعات مي توانيد از ويژگي ها و كلكسيون هاي شيء Request استفاده كنيد