View Full Version : تفاوت Response.Redirect با Server.Transfer و Server.Execute
odiseh
سه شنبه 03 بهمن 1385, 15:36 عصر
سلام
لطفا کسانی که واقعا کار کرده اند و نتیجه رو کامل متوجه شدند من رو راهنمایی کنند:
فرق Response.Redirect با server.trasfer و server.Execute چیه؟ کدوم بار کمتری در شرایطی که میخواهیم فقط به صفحه دیگری رجوع کنیم ، روی سرور می اندازد؟
با تشکر فراوان
M-Gheibi
سه شنبه 03 بهمن 1385, 22:19 عصر
Server.Transfer یکی از متدهایی هست که به متدهای موجود در ASP 2.0 اضافه و به هنگام ارائه ASP 3.0 معرفی شد . پیش از این در ASP 2.0 برای انتقال به صفحهای دیگر از متد Response.Redirect استفاده میشد ( اگرچه در نسخه 3 همچنان امکان استفاده از متد قدیمی وجود داره ) که در نسخهی جدید این روند با استفاده از متد Server.Transfer هم انجام میشه .
به طور خیلی خلاصه وقتی از Response.Redirect استفاده میکنید در واقع مراحل زیر طی میشوند :
ارسال پیامی مبنی بر لود آدرس URL جدید به مرورگر وب دستگاه کاربر ( کلاینت )
دریافت پیام توسط مرورگر وب دستگاه کاربر ( کلاینت )
اعلام درخواست دریافت اطلاعات آدرس جدید به سرور
پردازش درخواست ارسالی در سرور و ارسال اطلاعات مربوطه ( کدهای HTML صفحهی جدید ) به مرورگر وب دستگاه کاربر ( کلاینت )واضحه که برای اجرای یک دستور و رسیدن به هدف اصلی بار زیادی به شبکه وارد میشه و در سرعت برنامه هم تأثیر منفی خودش رو میذاره . برای جلوگیری از تحمیل بار اضافی بهتره از Server.Transfer استفاده کنید . با استفاده از این متد به جای اینکه درخواست دریافت اطلاعات صفحهی جدید از کلاینت ارسال بشه ، مستقیماً در سرور اعلام نیاز برای تغییر دستورات اجرا شده به دستورات صفحه مورد نظر انجام میگیره . یعنی در واقع مراحل یک ، دو و سه که در بالا بهشون اشاره شد حذف میشوند .
موقع استفاده از Server.Transfer به این موارد دقت کنید که :
هنگام استفاده از این متد اگرچه آدرس صفحه در پشت صحنه تغییر کرده و پردازشهای لازم روی فایل با آدرس جدید صورت میگیره ولی آدرس نمایش داده شده در نوار آدرس مرورگر وب همان آدرس ابتدایی خواهد بود . ( چون هیچگونه پیامی مبنی بر تغییر آدرس به دستگاه کاربر ارسال نمیشه )
زمانی میتونید از این متد استفاده کنید که صفحهی مقصدتون برای انتقال جزوی از سایت خودتون باشه ، به این معنی که نمیتونید مثلاً به سایت یاهو از این طریق لینک کنید . ( دلیلش هم کاملاً روشنه ! )در مورد متد Server.Execute هم باید بگم که ربطی به دو متد قبل نداره . در واقع این متد کاری که انجام میده مشابه includeها هست ( با کمی تفاوت ) . وقتی در یک صفحه از این متد استفاده میکنید ، دستورات فایل اصلی شما تا رسیدن به این متد اجرا میشوند ، سپس کدهای موجود در آدرس مشخص شده ( فایل اشاره شده با استفاده از این متد ) اجرا میشوند و در آخر ( پس از اجرای آخرین دستور فایل اشاره شده ) ادامه دستورات فایل ابتدایی اجرا میگردند .
برای مثال فرض کنید دو فایل file1.asp و file2.asp داریم . دستورات هر فایل به این شکل است :
file1.asp
Test1 (File1)
<%Server.Execute " file2.asp"%>
Test3 (File1)
file2.asp
Test2 (File2)با اجرای فایل اول ( file1.asp ) مشاهده میکنید که خروجی زیر نمایش داده میشه :
Test1 (File1)
Test2 (File2)
Test3 (File1)یعنی ابتدا خط اول از فایل اول اجرا میشه ، سپس اجرای دستورات فایل دوم آغاز میشه و بعد از پایان کار فایل دوم ، به فایل اول بازگشته ، ادامه دستورات اجرا میشوند .
امیدوارم با خوندن مطالب بالا به نتیجه مورد نظرت رسیده باشی . :لبخندساده:
m_nanaji
یک شنبه 18 بهمن 1388, 20:13 عصر
ممنون از راهنمایی
همانطور که گفتین اگر از متد Server.Transfer استفاده کنم آدرس بار تغییر نمیکنه . این مشکل رو چطور حل کنم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.