Active Server Pages

**Active Server Pages** (עברית: **דפי שרת אקטיביים**), המוכרת גם בראשי התיבות **ASP**, היא טכנולוגיית צד-שרת מבית מיקרוסופט ליצירת אתרי אינטרנט דינמיים, הטכנולוגיה מאפשרת תכנות בשפות ActiveX Scripting, שהמוכרות והנפוצות שבהן הן VBScript ו-JavaScript. קטעי הקוד משתמשים באובייקטים שמספקת ASP כדי לתקשר עם הלקוח ועם השרת, וכך ליצור יישום דינמי.

טכנולוגיית ASP זמינה בתאימות מלאה רק על שרתי IIS של מיקרוסופט. למרות זאת, קיימות חלופות עבור שרתים אחרים. טכנולוגיית ASP עבור שרת IIS ממומשת כרכיב ISAPI אשר מנתח את הדפים, ומספק את האובייקטים של ASP (ראו להלן) למנועי הסקריפטינג.

בשנת 2002 יצאה הטכנולוגיה החדשה של מיקרוסופט ליצירת יישומי אינטרנט דינמיים הנקראת ASP.NET, ועושה שימוש בפלטפורמת .NET של מיקרוסופט.

## האובייקטים שמספקת ASP למתכנת
שמאל|ממוזער|250px|דוגמה ליישום ASP: עמוד העזרה המצורף לשרת IIS, הכתוב ב-ASP ומורץ על שרת IIS עצמו
ASP מספקת למתכנת שישה עצמים בסיסיים:
* **Request** - המשמש לקבלת מידע מהמשתמש, כולל המידע שנשלח בבקשת ה-HTTP, מידע על הדפדפן ומערכת ההפעלה, קריאת עוגיות מהלקוח ועוד.
* **Response** - המשמש לשליחת מידע חזרה ללקוח, כולל שליחת עוגיות.
* **Session** - לטיפול במצב הסשן (session state). מקביל לעוגיות, אך מאוחסן על השרת.
* **Application** - לשמירת מידע כללי עבור יישום מסוים.
* **Server** - לגישה אל השרת, יצירת עצמים של רכיבי ActiveX על השרת ועוד.
* **ObjectContext** - נועד לשימוש יחד עם Microsoft Transaction Server לשליטה על טרנזקציות בדף ה-ASP.
בגרסה 3.0 של ASP נוסף אובייקט חדש, ASPError, המספק מידע על השגיאה האחרונה שהתרחשה. האובייקט לא קיים באופן אוטומטי כמו השישה לעיל, אלא יש ליצור אותו על ידי השיטה Server.GetLastError כשרוצים לקבל את המידע על השגיאה (ראו להלן).

## גרסאות

ל-ASP ה"קלאסית", כלומר **לא** ASP.NET היו 3 גרסות עיקריות:
* ASP 1.0 - הופצה יחד עם IIS 3.0 בדצמבר 1996
* ASP 2.0 - הופצה יחד עם IIS 4.0 בספטמבר 1997
* ASP 3.0 - הופצה יחד עם IIS 5.0 בנובמבר 2000 גרסה זו הייתה הגרסה האחרונה של ASP ה"קלאסית", והיו בה מספר תוספות שיפורים ניכרים לעומת הגרסות הקודמות. ביניהם:
** **לאובייקט Session** נוספו השיטות *Session.Contents.Remove* ו-*Session.Contents.RemoveAll* שאפשרו למחוק ערכים שהוכנסו לאובייקט ה-Session. עד גרסה זו היה זה בלתי-אפשרי, והם היו נמחקים רק כשה-session היה נסגר (כשהגולש היה עוזב את האתר בצורה מסודרת, או לאחר 20 דקות של חוסר פעילות).
** **לאובייקט Application** נוספו השיטות *Application.Contents.Remove* ו-*Application.Contents.RemoveAll* שאפשרו למחוק ערכים שהוכנסו לאובייקט ה-Application. עד גרסה זו היה זה בלתי-אפשרי, והם היו נמחקים רק כשההיישום היה מסתיים - כשהגולש האחרון היה עוזב את היישום.
** השיטה *Response.IsClientConnected* שאומרת האם הגולש עדיין מחובר לאתר שופרה ופעלה תמיד. עד גרסה 3.0 השיטה פעלה כראוי רק לאחר שנשלח מידע אל המשתמש.
** **תוספות לאובייקט Server**:
*** השיטה Transfer של אובייקט Server מעבירה את השליטה לדף ASP אחר (מעין goto). לדף שמקבל את השליטה יש גישה לכל המשתנים שהוכרזו בדף שהעביר את הגישה. כמו כן, אם הדף שאליו מועברת השליטה נמצא ביישום ASP אחר מהדף הקורא, הדף שאליו מועברת השליטה מתבצע במסגרת יישום ה-ASP הקורא. כלומר, מכל בחינה שהיא, הדף שאליו מועברת השליטה מתבצע כעין המשך של הדף הקורא.שיטה זו יכולה גם לשמש כחלופה לשיטה *Response.Redirect*, ששולחת ללקוח את כותר HTTP "302 Object Moved". Transfer אינה דורשת מהלקוח לבצע בקשת HTTP נוספת, ובכך חוסכת עומס מהשרת.
*** השיטה Execute של אובייקט Server מעבירה את השליטה לדף ASP אחר, אך בניגוד ל-*Server.Transfer*, מחזירה את השליטה לדף הקורא, בסיום ביצוע הדף שנקרא (מעין קריאה לפונקציה).
*** השיטה GetLastError של אובייקט Server מאפשרת קבלת אובייקט ASPError, שמכיל מידע על השגיאה האחרונה שהתרחשה.
** **[http://msdn.microsoft.com/en-us/library/ms524942.aspx אובייקט ASPError]**אובייקט זה מכיל מידע על השגיאה האחרונה שהתרחשה במסגרת דף ה-ASP. הוא נוח במיוחד לשימוש ביצירת דפי שגיאת 500-100 מותאמים אישית, שנקראים על ידי השרת. דף שגיאה כזה, שמשתמש באובייקט ASPError יוכל להציג מידע על שגיאה שהתרחשה ברמת שרת IIS, ברמת מנוע התסריט או ברמת רכיב COM שנקרא בקוד. דף כזה ייקרא גם במקרה של שגיאת סקריפט בלתי מטופלת, לדוגמה.בדרך כלל יש ליצור את האובייקט על ידי דרישה בשיטה *Server.GetLastError*, אבל במקרה של דף שגיאת 500-100 מותאם אישית הוא נוצר לבד.בנוסף, ניתן לטפל באמצעות אובייקט זה בשגיאות שהתרחשו בכתיבה למסדי נתונים, ולקבוע, למשל, שהסקריפט ימשיך לרוץ למרות השגיאה וכדומה.

ASP 2.0 נתמכה גם תחת שרת Personal Web Server של מיקרוסופט, שניתן היה להתקנה על Windows 95 ועל Windows 98. ASP 3.0 לא הייתה זמינה עבור מערכות הפעלה אלו.

תחת Windows Me ASP לא נתמכה רשמית (מאחר שהתקנת IIS או PWS עליה לא נתמכה), אך באתר מיקרוסופט נכתב שניתן להתקין עליה את Personal Web Server, אם כי הדבר אינו מומלץ. גם תחת Windows XP Home Edition לא נתמכה ASP, מאחר שגם על מערכת זו לא נתמכה IIS.

## חלופות ל-ASP

מלבד המתחרות הישירות ב-ASP, שהן PHP, JSP, ו-ColdFusion קיימות מספר גרסות אלטרנטיביות של ASP. כלומר, מערכות תסריטי צד-שרת נפרדות, אך דומות ל-ASP:
***Java System Active Server Pages 4.0 [[סאן מיקרוסיסטמס|Sun]]** - גרסה של חברת סאן מיקרוסיסטמס לטכנולוגיית ASP, התומכת ברבות מהטכנולוגיות שמתכנתי ASP מורגלים אליהן כמו ADO ו-ODBC וכמו כן בשפות VBScript ו-JScript. עם זאת, אין לגרסה זו תאימות מלאה עם טכנולוגיית ASP המקורית של מיקרוסופט.היא פועלת על מספר מערכות הפעלה, הכולל את מספר גרסות של יוניקס (סולאריס, HP-UX ועוד) ועל גרסות השרת של Windows, ועל שני שרתי דפי אינטרנט: Sun Java System Web Server של סאן עצמה, ועל שרת אפאצ'י.
***** - זהו פורט של טכנולוגיית ASP עבור שרת Apache בלבד ותומך בשפת Perl בלבד.
***[[Active-FoxPro-Pages]]** - זוהי טכנולוגיה הדומה ל-ASP המאפשרת כתיבת קוד Visual FoxPro בשפת xBASE משולב בתגי HTML, והרצתו על שרת דפי אינטרנט. נתמכת רק על מערכות Windows (כמו Visual FoxPro עצמו), ועל מספר שרתי דפי אינטרנט: שרת IIS של מיקרוסופט, שרת אפאצ'י מגרסה 2.0 ומעלה, ועוד.

## לקריאה נוספת
*ניקולס צ'ייס, **ערכת לימוד ASP 3.0**, הוצאת פוקוס מחשבים
*ג'ים בוינס, **פיתוח מסדי נתונים לאינטרנט**, הוצאת פוקוס מחשבים

## קישורים חיצוניים
* 
* תיעוד אודות ASP, באתר MSDN Library
* תיעוד אודות IIS 5 ו-ASP 3, באתר Windows 2000
* מדריך בסיסי ל-ASP3, באתר w3schools (באנגלית)
* ארגון ה-ASP הישראלי
* פורום תכנות ASP, בקהילה של תפוז אנשים
* Sun Java System Active Server Pages 4.0 - יישום מבוסס ג'אווה של חברת Sun לטכנולוגיית ASP
* פרויקט Apache::ASP
* Active-FoxPro-Pages - חיקוי של ASP עבור קוד הכתוב ב-Visual FoxPro

## הערות שוליים

קטגוריה:טכנולוגיות צד-שרת
קטגוריה:תוכנה מבית מיקרוסופט