عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
رويدادها در برنامه های وب دات نت |
مديريت وب |
12468 |
3 |
4 |
با توجه به جایگاه داده در عصر حاضر و لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و خدمات خود را از طریق سایت www.fabak.ir به مخاطبان محترم عرضه می نماید
 |
رويدادها در برنامه های وب دات نت
رويدادها در برنامه های وب دات نت
يک برنامه در مدت زمان حيات خود با رويدادهای متعددی مواجه می
گردد. پس از بروز رويداد ، روتين پاسخگو مسئوليت برخورد
با رويداد
محقق شده را برعهده خواهد
گرفت . برنامه های وب نيز از اين قاعده مستثنی نبوده و در
مدت زمان حيات خود با رويدادهای متعددی مواجه می
گردند . رويدادها و نحوه برخورد با
آنان دربرنامه
های وب ، دارای تفاوت هائی نسبت به برنامه های ويندوز
است . رويدادها در برنامه های وب در سه سطح : برنامه ، صفحات و کنترل های سرويس
دهنده ، محقق می گردند. ترتيب و نحوه اجرای
رويدادها ، تاثيری مستقيم بر
نحوه پاسخگوئی به آنان توسط کدهای نوشته شده در يک برنامه دارد. در اين مقاله قصد
داريم به بررسی جايگاه و نقش رويدادها در چرخه حيات يک برنامه وب پرداخته و از اين
رهگذر با تفاوت های موجود بين چرخه حيات يک برنامه وب و يک برنامه ويندوز بيشتر
آشنا شويم .
رويداد ها
در چرخه حيات يک برنامه وب
حيات يک برنامه وب
، وابسته و متاثر از Session
های فعال می باشد . ماداميکه Session فعال وجود داشته
باشد ، برنامه وب نيز به زندگی خود ادامه خواهد داد . فرم های وب ،
دارای عمر بسيار اندک
و ناچيزی می باشند. يک برنامه وب با درخواست صفحه شروع
آن توسط
مرورگر ، زندگی خود را آغاز می
نمايد . در ادامه ، سرويس دهنده وب وارد عمليات شده و يک فايل
اجرائی ( فايلی با پسوند DLL ) را اجراء می نمايد . هدف
نهائی فايل فوق ، پاسخگوئی
به درخواست ارسالی توسط مرورگر است . برنامه فوق ، در ادامه يک نمونه از فرم وب درخواست شده را ايجاد و
HTML لازم بمنظور پاسخ دادن به درخواست را توليد و
در نهايت پاسخ مربوطه
را برای مرورگر ارسال
می نمايد . پس از اتمام فرآيند فوق ، نمونه فرم ايجاد شده
نيز از بين
خواهد رفت .
زمانيکه مرورگر دارای تگ های HTML توليده شده می باشد ،
کاربر قادر به ورود اطلاعات و داده مورد نظر در Text boxs
، انتخاب دکمه ها و انجام ساير عمليات می باشد . وضعيت فوق
، تا
زمانيکه يک رويداد Post-back محقق گردد ( نظير کليک
نمودن بر روی يک دکمه )
، ادامه می يابد . پس از محقق شدن رويداد Post-back
، مرورگر داده همراه صفحه ( View State ) را برای سرويس
دهنده ارسال تا پردازش های لازم با توجه به رويداد محقق شده ، انجام شود. زمانيکه
سرويس دهنده ، View State ( داده همراه با يک صفحه )
را دريافت می نمايد ، يک نمونه جديد از فرم وب را ايجاد و داده آن را با استفاده از
View State تکميل و متناسب با رويداد محقق شده ،
پردازش های لازم را انجام خواهد داد . پس از
اتمام عمليات توسط سرويس دهنده ، نتايج بصورت تگ های HTML مجددا" برای
مرورگر ارسال و نمونه فرم وب ايجاد شده ، از بين خواهد رفت .
زمانيکه کاربر به عمليات خود خاتمه داده و مرورگر را غير فعال می نمايد ، Session
مربوط به آن نيز خاتمه می يابد . درصورتيکه Session
های متعلق به ساير کاربران وجود نداشته باشد ، به حيات برنامه
نيز خاتمه داده می شود (
عملا" وضعيت فوق کمتر اتفاق می افتد ) . ASP.NET با
استفاده از garbage collection ، مديريت حافظه را انجام
می دهد ( سرويس ارائه شده توسط CLR فريمورک دات نت
) . در فرآيند فوق ، سرويس دهنده بصورت ادواری رديابی مراجعات
به
اشياء را انجام
و در صورتيکه از يک شی مدت زمان زيادی استفاده نشده باشد ، شی مربوطه از حافظه حذف و فضای استفاده شده توسط آن
نيز آزاد می گردد .
با توجه به ماهيت عمليات فوق ، نمی توان بطور دقيق از زمان محقق شدن
رويداد Application_End
، آگاهی يافت .
نگهداری داده در
يک فرم وب
با توجه به اينکه فرم های وب دارای عمر بسيار کوتاهی می
باشند ، ASP.NET
عمليات خاصی را بمنظور نگهداشت
داده درج شده در کنترل های موجود بر روی يک فرم وب، انجام می دهد. داده های درج شده
در کنترل ها ، پس از هر درخواست ارسال
شده و از طريق
Page_init مجددا" در کنترل های مربوطه، بازيابی
( Restore) می گردند. داده موجود در اين
نوع کنترل ها در ادامه و از طريق رويداد Page_Load در
دسترس قرار خواهند گرفت .
داده ئی را که ASP.NET بين هر يک از درخواست ها ،
نگهداری می نمايد ، view state
فرم وب ناميده شده و صرفا" در محدوده همان فرم وب ، قابل دستيابی و استفاده است. بمنظور استفاده
از داده ورودی در يک فرم وب برای ساير فرم های وب ، نيازمند ذخيره سازی داده در يک
متغير وضعيت از نوع اشياء Application و يا
Session می باشيم . اشياء فوق ، دو سطح متفاوت از بعد
دستيابی را ارائه می نمايند :
-
متغيرهای
Application state . متغيرهای
فوق ، برای تمامی کاربران قابل دسترس
و استفاده می باشند. رفتار اين نوع متغيرها نظير متغيرهای سراسری با قابليت دستيابی
چندکاربره می باشد. تمامی Sessions
قادر به خواندن و نوشتن اين نوع متغيرها ، می باشند .
-
متغيرهای
Session state . متغيرهای فوق، صرفا" برای يک
Session ( کاربر) قابل دسترس و استفاده می باشند. عملکرد اين نوع از متغيرها
نظير داده های سراسری در يک برنامه استاندارد ويندوز می باشد . صرفا"
Session فعال ، قابليت دستيابی به وضعيت
Session خود را دارا خواهد بود .
متغيرهای
Session و Application ، بصورت
On the fly و از طريق کد نوشته شده در برنامه ، ايجاد می
گردند ( عدم استفاده از روش های متداول بمنظور تعريف يک متغير ). در نمونه
برنامه زير ، يک متغير Session با نام
Clicks تعريف شده است . متغير فوق ، تعداد دفعاتی
که بر روی دکمه Button1 کليک می گردد را در خود ذخيره و
در نهايت مقدار مورد نظر در خروجی نمايش داده می شود .
VB.NET |
Private Sub
Button1_Click ( ByVal sender As System.Object , _
ByVal e As System.EventArgs ) Handles Button1.Click
Session ( "Clicks") = Session ( "Clicks") + 1
Response.Write("Number of Clicks : " & Session(
"Clicks")
End Sub |
در يک متغير وضعيت
(
Session , Application) می توان هر نوع
داده ئی را ذخيره نمود. (
از يک عدد صحيح ساده تا يک شی ) . با توجه به
اينکه عملکرد متغيرهای وضعيت ،
نظير داده های سراسری می باشد ، می بايست
،استراتژی
لازم بمنظور استفاده و انجام عمليات بر روی آنان
،مشخص گردد .
رويدادهای
Session و Application
برنامه نويسان می توانند کد دلخواه خود را بمنظور
پاسخگوئی به رويدادهای Session و يا
Application نوشته و آنان را در فايل Global.asax
مستقر نمايند . از رويدادهای Application بمنظور
مقداردهی اشياء و داده ئی که قصد استفاده از آن توسط تمامی
Session های فعال در برنامه وب وجود داشته باشد ، استفاده می گردد . از
رويدادهای Session بمنظور مقداردهی اوليه داده ئی که قصد
نگهداشت آن بين Session های خاصی وجود دارد، استفاده می
گردد . ( قصد استفاده از اين نوع متغيرها بين Session
های متفاوت وجودندارد ) .
رويدادهای
Application ، بشرح زير می باشند :
-
Application_Start
: رويداد فوق ، بلافاصله پس از ملاقات صفحه شروع برنامه توسط اولين کاربر ، محقق می
گردد .
-
Application_End
، رويداد فوق ،زمانی محقق می گردد که کاربری به برنامه متصل
( مرتبط) نباشد.
-
Application_BeginRequest : رويداد فوق
، در ابتدای هر در خواست ارسالی برای سرويس دهنده ، محقق می گردد .
با حرکت بين صفحات و درخواست آنان از سرويس دهنده ، يک درخواست ايجاد و متناسب با
آن ، رويداد فوق نيز محقق می گردد .
-
Applicatino_EndRequest : رويداد فوق ، پس از
اتمام هر درخواست ارسال
شده برای سرويس دهنده ، محقق می گردد .
-
Session_Start
: رويداد فوق ، زمانيکه کاربری جديد ، صفحه شروع يک برنامه را ملاقات می نمايد ،
محقق می گردد .
-
Session_End
: رويداد فوق ،
پس از ترک برنامه توسط يک کاربر ، محقق می گردد( بستن مرورگر و
يا پس از Time out تعريف شده )
در فرم های وب ، يک
Session ، نمونه ای منحصربفرد از مرورگر می
باشد .يک کاربر می تواند دارای چندين نسخه در حال اجراء از برنامه مرورگر بر روی ماشين خود باشد
.در چنين وضعيتی ، در صورتيکه هر
يک از مرورگرها با برنامه وب ارتباط برقرار
نمايد ، هريک از آنان
دارای Session منحصربفرد مربوط به خود
خواهند بود .
بمنظور آشنائی با عملکرد رويدادهای فوق ، کد نوشته شده زير را در فايل
Global.asax مربوط به يک پروژه فرم وب ، مستفر
نمائيد .
VB.NET |
Sub
Application_Start ( ByVal Sender As Object , ByVal E As EventArgs )
Application ( "AppCount") =
Application ( "AppCount") + 1
End Sub
Sub Session_Start (
ByVal Sender As Object , ByVal E As EventArgs )
Application ( "SessCount" ) =
Application ( "SessCount" ) + 1
Response.Write( "Number of
AppCount : " & Application ("AppCount")
& "<br>" )
Response.Write( "Number of
SessCount : " & Application ( "SessCount" ) & "<br>" )
End Sub
Sub Session_End (
ByVal Sender As Object , ByVal E As EventArgs )
Application ( "SessCount" ) =
Application ( "SessCount" ) - 1
End Sub
|
پس از اجرای کد فوق ، هر نمونه از
مرورگر که به برنامه
متصل گردد ،يک واحد به Session ، اضافه
می گردد ( مقدار شمارنده Application همچنان
يک باقی خواهد ماند ) . لازم است به اين نکته نيز اشاره گردد که اشياء ذاتی نظير
Session و Response در
Application_Start قابل دسترس نمی باشند .
رويدادهای فرم های
وب
با استفاده از رويدادهای فرم های وب می توان پردازش و
پشتيبانی از داده استفاده شده در يک صفحه وب ، پاسخگوئی به نسبت دهی
داده (ِData binding ) و
برخورد با موارد استثناء ( Handle exceptions )
را در يک
صفحه وب ، انجام داد. Page_Load و Page_Error
از جمله رويدادهائی می باشند که
از آنان در اغلب برنامه ها ،
استفاده می گردد . رويدادهای مرتبط با فرم های وب ( بترتيب محقق شدن
)، بشرح زير می باشند .
-
Page_Init
: رويداد فوق ، زمانی محقق می گردد که کنترل های سرويس دهنده ، در حافظه مستقر و
از طريق view state مربوط به فرم وب ، مقداردهی
اوليه گردند. (اولين مرحله در چرخه حيات يک فرم وب ).
-
Page_Load
: رويداد فوق ، زمانی محقق می گردد که کنترل ها ی سرويس دهنده در شی
Page ، لود می گردند. اطلاعات view state
، در اين لحظه قابل دسترس و استفاده
بوده و می توان در اين محل تنظيمات کنترلی لازم بمنظور نمايش متن بر روی صفحه
را انجام داد ( انجام تغييرات مورد نظر).
-
Page_PreRender
: رويداد فوق ، زمانی محقق می گردد که برنامه درصدد Render
نمودن شی Page می باشد .
-
Page_Unload
: رويداد فوق ، پس از
خروج Page از حافظه ، محقق می گردد.
-
Page_Error
: رويداد فوق ، پس از
مواجه شدن با يک مورد خاص و استثنائی ،محقق می
گردد .
-
Page_AbortTransaction : رويداد فوق ،
پس از توقف يک تراکنش ، محقق می گردد.
-
Page_CommitTransaction : رويداد فوق ،
پس از پذيرش يک تراکنش ، محقق می گردد.
-
Page_DataBinding
: رويداد فوق ، پس از
نسبت دهی يک کنترل سرويس دهنده به يک منبع داده بر روی يک صفحه ، محقق می گردد.
-
Page_Dispose
: رويداد فوق ،پس از
آزاد سازی يک شی Page از
حافظه ، محقق می گردد (آخرين رويداد
مرتبط با چرخه حيات يک شی
Page ) .
از رويداد
Page_Load بهمراه خصلت IsPostBack
، می توان بمنظور
مقداردهی اوليه داده ، در اولين مرتبه ای که کاربران
يک فرم وب را مشاهده می نمايند ،
استفاده نمود.
رويدادهای کنترل
سرويس دهنده
هر يک از کنترل های سرويس دهنده ، نظير دکمه ها ،
TextBox و DropDownList ، دارای مجموعه ای اختصاصی از رويدادهای مرتبط با خود بمنظور پاسخگوئی به عمليات
کاربران می باشند . تمامی رويدادهای کنترل سرويس دهنده بطور يکسان
ايجاد نمی گردند . سه نوع عمده از رويدادهای کنترل سرويس دهنده وجود دارد :
-
رويدادهای
Post-Back : رويدادها ی فوق ، باعث ارسال صفحه وب برای سرويس
دهنده بمنظور انجام پردازش های ضروری می گردند. اين نوع از رويدادها ، ترافيکی
را بين سرويس گيرنده و سرويس دهنده
، ايجاد می نمايند ( توجه به اثرات ترافيک ايجاد شده بر کارآئی برنامه
) .
-
رويدادهای
Cached : اين نوع از رويدادها ، در View state
مربوط به صفحه ذخيره تا زمانيکه يک رويداد Post_Back
محقق گردد .
-
رويدادهای
Validation : رويدادهای فوق ، بدون اينکه ضرورتی به انجام
Post-Back و يا Cache وجود
داشته باشد ، از طريق امکانات پيش بينی شده درون صفحه
، با آنان برخورد خواهد شد .کنترل های سرويس دهنده Validation از رويدادهای
فوق ،استفاده می نمايند .
کنترل های
Validation ، قبل از اينکه صفحه برای سرويس دهنده
Post-Back شوند، بررسی می گردند . زمانيکه Post-Back
محقق می گردد ، رويدادهای Page_init و
Page_Load ، پردازش و در ادامه رويدادهای
Cache و نهايتا" رويدادی که باعث
Post-Back شده است ، پردازش می گردد .
کنترل های Button ، Link Button
,Image Button ، از جمله کنترل هائی می باشند که باعث تحقق يک رويداد Post-Back
، می گردند . کنترل های .
TextBox,DropDownList,ListBox,RadioButton و CheckBox
، باعث ايجاد رويدادهائی از نوع Cache
خواهند شد .
فرض کنيد ، يک فرم وب بهمراه چهار
TextBox و يک دکمه OK
بر روی آن را داشته باشيم . در چنين حالتی ، اگر
TextBox خالی بماند ، و دکمه OK
کليک گردد ، RequiredFieldValidator نمايش داده
شده و
رويداد ديگری پردازش نشده و صفحه برای سرويس دهنده PostBack
نخواهد شد. درصورتيکه مقداری در TextBox درج و
دکمه OK فعال گردد ، صفحه PostBack
شده و رويداد TextChanged
، قبل از رويداد
Click محقق می گردد. برنامه زير واکنش لازم را در اين
راستا انجام خواهد داد ( کليک بر روی دکمه Button1 و يا
تغيير مقدار TextBox1 ).
VB.NET |
Private Sub
Button1_Click ( ByVal sender As System.Object ,_
ByVal e As System.EventArgs ) Handles
Button1.Click
Response.Write( "Button Clicked! <Br>")
End Sub
Private Sub
TextBox1_TextChanged ( ByVal sender As System.Object ,_
ByVal e As System.EventArgs ) Handles TextBox1.TextChanged
Response.Write( "Text has Changed <Br>")
End Sub
|