Transcript Slide 1
ASP.NET
מעבדת DBMS
הדס גרוסמן
2007
.NET Platform
הרעיון העומד מאחורי .NETשל Microsoftהוא הסטת מוקד
התכנות מעולם שבו התקנים יחידים ואתרי WEBמחוברים זה לזה
באופן פשוט באמצעות האינטרנט ,אל עולם שבו התקנים ,שירותים
ומחשבים פועלים יחד בכדי לספק פתרונות מלאים עבור
משתמשים.
פלטפורמת .NETמספקת את כל הכלים והטכנולוגיות הנחוצים
לבניית אפליקציות WEBיות מבוזרות.
היא חושפת אי תלות בשפה ומתודולוגית תכנות עקבית על פני כל
הנדבכים ) )tiersשל האפליקציה ובו בזמן מספקת אפשרות
להפעלת והשמשת טכנולוגיות קיימות וכמו כן הגירה )(migration
פשוטה מהן.
פלטפורמת .NETתומכת במלואה בטכנולוגיות אינטרנט קיימות.
כולל XSLT ,SOAP ,XML ,HTML :וכו'
The .NET Framework
פלטפורמת .NETמספקת מספר טכנולוגיות מרכזיות שהן לב ליבה של , .NET
פלטפורמה זו מתייחסת לכל הטכנולוגיות המרכיבות את סביבת העבודה החדשה
ליצירה ולהפעלה של יישומים בעלי עוצמה ומבוזרים ,הניתנים להרחבה .החלק
של .NETהמאפשר לנו לפתח יישומים אלה היא סביבת העבודה .NET
סביבת העבודה (מסגרת) .NETמספקת את יסודות זמן הקומפילציה וזמן הריצה
ההכרחיים לבנייה והרצה של אפליקציות מבוססות .NET
- Platform substrateסביבת העבודה .NETנבנתה לרוץ על מערכות
הפעלה .Microsoft win32
- Application Servicesניתן לפנות ולהשתמש בשירותים שונים של מערכת
ההפעלה דרך מחלקות מובנות שמוגדרות ב – (Base Class Library) BCL
Common Language Runtime – CLR
ה – CLRהיא סביבת ריצה שבה יישומים שנכתבו בשפות שונות יכולים
לפעול יחד ולהסתדר בצורה טובה .יכולת זו ידועה גם בשם תפעוליות
שיתופית בין שפות ).(cross language interoperability
CLRמספקת סביבה נוחה זו עבור יישומים משפות שונות בעזרת אוסף
חוקים הנקרא .(Common Language Specifications) CLS
כל מהדר שפה חייב לציית לחוקים אלה כדי שיוכל ליצור יישומי .NET
הפועלים ב – .CLRכלומר ,לפעול בצורה תקינה לצד כל יישום .NETאחר
ובאותה מידה של שיתופיות.
ה – CLRמפשטת פיתוח אפליקציות ,מספקת סביבת ריצה איתנה
ומאובטחת ,תומכת במס' שפות ומפשטת פריסה וניהול של אפליקציות.
ה CLR -מיוחסת גם כסביבה מנוהלת ) (managed environmentשבה
שירותים משותפים שמסופקים אוטומטית ,כמוgarbage collection :
ושירותי אבטחה.
בסביבת קוד מנוהל נקבעו מספר חוקים בכדי להבטיח שכל היישומים יתנהגו
באופן אחיד ברמה הגלובלית ,בלי להתחשב בשפות שבהן הם נכתבו .חוקים
גלובליים אלו משפיעים בעיקר על כותבי המהדרים.
– .NET Framework Class Libraryספריות המחלקה
בסביבת העבודה .NETחשובות מאד ליכולת השיתופיות בין
יישומים ,כי הן מאפשרות להשתמש בממשק תכנות יחיד לכל
הפונקציונאליות ש CLR -חושפת.
אוסף ספריות משותף פירושו שמבחינה תיאורטית ,כל השפות הן
בעלות יכולות זהות כי כולן חייבות להשתמש בספריות מחלקה אלו
כדי לבצע כל משימה ,חוץ מהצהרה על משתנים.
– System Namespacesמכיל מחלקות בסיסיות לשימוש ע"י המפתח .כמו
מחלקות להגדרת ,reference or value data typesמחלקות להגדרה
וטיפול באירועים ,מחלקות למניפולציות מתמטיות ,חריגות ,מאפיינים,
המרות.
– System.collectionרשימות ממוינות ,טבלאות גיבוב ודרכים נוספות לאסוף
מידע
input – System.ioוoutput -
– System.netמספקת מתודות להעברת מידע דרך פרוטוקולי אינטרנט
)(tcp/ip
– ADO.NETהדור הבא של טכנולוגיית Microsoft ActiveX
.Data Objectמספקת תמיכה משופרת למודלי תכנות לא
מקושרים ותמיכה נרחבת ב – .XML
– System.dataמכיל מחלקות להגדרת אובייקטים עבור ה ADO.NET -כמו
DataSetאשר מציג מס' רב של טבלאות וקשרים בינהם.
– System.xmlמספק תמיכה עבור .XML
– XML Web Servicesאלו הם רכיבי תכנות WEBים שיכולים
להיות משותפים על פני אפליקציות באינטרנט או באינטראנט .
סביבת העבודה .NETמספקת כלים ומחלקות לבנייה ,בדיקה
וביזור של שירותי WEB XMLים.
– ASP.NETסביבת עבודה תכנותית שבנויה על ה – . CLRניתנת לשימוש
בשרת עבור בניית אפליקציות WEBיות בעלות עוצמה.
ASP.NET Web Formsמספקת דרך קלה ובעלת עוצמה לבניית ממשקים
WEBים דינאמיים למשתמשים.
– System. webב namespace -זה יש שירותים ברמה בסיסית כמו,caching :
configuration ,securityואחרים שמשותפים ל – XML Web Services
ו – .Web User Interface
* - system.web.servicesמחלקות וממשקים שמאפשרים תקשורת בין שרתים
ודפדפנים.
* – system.web.uiמחלקות וממשקים שמאפשרים יצירת controlsו – pages
שיופיעו באפליקציה WEBית כממשק המשתמש.
– User Interfacesסביבת העבודה .NETתומכת ב 3-סוגים של ממשקים
למשתמש:
– Web Formsטפסים שעובדים דרך ASP.NET
– Windows Formsטפסים שרצים על מחשבי לקוחות )(win32
Console Applications
– System.windows.formsמחלקות לבניית ממשק המשתמש
– System.drawingמחלקות לבניית פונקציונליות גרפיות.
– Languagesכל שפה שמתאימה לחוקים שנקבעו ב – CLS
יכולה לרוץ ב.CLR -
Microsoftסיפקה לסביבת העבודה .NETאת השפות הבאות:
- C#עוצבה ופותחה עבור פלטפורמת ה .NET -והיא השפה החדשה
הראשונה שהיא component orientedבמשפחת השפות Cו.C++ -
היא יכולה להיות משולבת בדפי .ASP.NET
, Managed Extensions to C++ - C++הרחבה זו מספקת גישה
לסביבת העבודה של .NET
– VB.NETחידושים לשפת , VBכמו תמיכה בהורשה ,בנאים ,רב צורתיות,
חריגות וכו'
Jscript.NET
– Visual J#.NETכלי פיתוח עבור מפתחים בשפת Javaשרוצים לבנות
אפליקציות ושירותים בסביבת העבודה .NET
– Third – party languagesמספר שפות צד שלישי נתמכות
בפלטפורמת .NETכמו. Scheme ,Perl ,Pascal ,COBOL ,APL :
Benefits of the .NET Framework
– Based on web standards and practicesסביבת העבודה .NETתומכת
במלואה בטכנולוגיות אינטרנט קיימות.
– Designed using unified application modelsהפונקציונאליות של מחלקות
.NETזמינה מכל שפה שתואמת את אוסף החוקים ב – .CLS
– Easy for developers to useבסביבה זו ,הקוד אורגן באופן היררכי של
namespacesו – .classes
אחת מתכונות המפתח של כל סביבת פיתוח היא מערכת סוגי הנתונים שלה .ה –
CLRשל .NETנותנת יותר מאשר מערכת סוגים יחידה ואחידה הניתנת לשימוש
בכל השפות התואמות ,CLSהיא גם מאפשרת למפתחי שפות להרחיב את
מערכת הסוגים ע"י הוספת סוגים חדשים הנראים והפועלים כמו הסוגים המובנים
במערכת.
הסוגים החדשים ניתנים לשימוש כמו הסוגים המובנים שימוש בכל סוגי
הנתונים באופן אחיד.
– Extensible classesההיררכיה של סביבת העבודה .NETלא מוסתרת
מהמפתחים ,ניתן לגשת ולהרחיב את מחלקות .NETע"י הורשה .בנוסף ניתן גם
לממש הורשה בין שפות שונות.
הקדמה
כיצד פועלים דפי האינטרנט )?(WEB
אתרי Webהיו פשוטים מאד במקור .הם היו מבוססים על דפי HTMLשהיו קיימים
כמעט בכל נושא שניתן להעלות על הדעת .דפים אלו היו סטטיים והניגשים אליהם לא
יכלו לפעול עליהם באופן אינטרקטיבי בכל דרך שהיא – דבר שהיווה מגבלה חמורה
על סוגי האתרים השונים.
על פי שיטה זו כל הקוד היה כתוב ב HTML -או סקריפטים והיה מעובד רק בצד
הלקוח.
האינטרנט פועל לפי מודל שרת/לקוח :שני מחשבים פועלים יחדיו ושולחים הודעות זה
לזה .מחשב לקוח שולח בקשה למידע אל מחשב השרת ,מחשב השרת מגיב לבקשה
זו על ידי סיפוק המידע שנדרש (תבנית בקשה/תגובה).
שרת – )Web Server( Webהוא מחשב המכיל תוכנת ניהול מתאימה לתוכן האתר:
דפי , HTMLתמונות ועוד .הלקוח הוא המבקר באתר (הכוונה היא לדפדפן).
מודל בקשה/תגובה
REQUEST
Server
RESPONSE
Browser
למרות שזו דרך נפלאה לתקשר ולהפיץ מידע ,עדיין היא סטטית ופשוטה
למדי ואינה מסוגלת לספק כל מידע או עיבוד דינאמי .השרת ממתין
שהלקוח יבקש נתונים או מידע ,וכשמגיעה הבקשה הוא שולח את
הנתונים שבדיסק מבלי להתבונן או לחקור אותם.
באופן כללי ,בקשת Webסטטית מורכבת מ 4 -שלבי פעולה:
.1הלקוח (דפדפן )webמאתר את שרת ה web -באמצעות הURL -
(כתובת אינטרנט) שלו.
.2הלקוח מבקש דף (לדוגמא )index.html
.3השרת שולח את המסמך המבוקש.
.4הלקוח מקבל את המסמך ומציג אותו.
ברגע שהלקוח קיבל את המידע ,הסתיים התהליך .לשרת אין כל מושג על
מה שמתרחש במחשב הלקוח לאחר קבלת הנתונים .הם מקושרים
ביניהם רק בזמן תהליך בקשה/תגובה וברגע שהדף הועבר ליעד,
השרת אינו עוקב יותר אחרי המתרחש.
עיבוד שרת ) – (Server Processingנעשה בדרכים שונות,
ביניהן ממשק שער משותף (Common Gateway Interface) CGI
והתוכנה (Active Sever Pages) ASPשל Microsoftשכעת מייחסים
לה את השם ASPהקלאסית.
בתסריט זה השרת בוחן את מה שהוא שולח לפני שהוא שולח אותו בפועל
והוא גם מסוגל לקבל פקודות מהלקוח .שרת מסוגל לספק מידע דינמי
וכל בקשה מהלקוח.
הפעולות מבוצעות בסדר הבא:
.1הלקוח (דפדפן )webמאתר את שרת ה web -באמצעות הURL -
(כתובת אינטרנט) שלו.
.2הלקוח מבקש דף (לדוגמא )index.html
.3השרת בוחן את הקובץ המבוקש ומבצע את הקוד שקובץ זה מכיל.
.4השרת מתרגם את תוצאות העיבוד ל( HTML -במידת הצורך) ושולח
את
המסמך המבוקש ללקוח.
.5הלקוח מקבל את המסמך ומציג אותו.
גם בתסריט זה מסתיים התהליך ברגע שהלקוח מקבל את הדף .השרת
אינו מודע למעשי הלקוח אלא אם הלקוח מגיש בקשה נוספת.
ואיך זה מתבצע ב?ASP.NET -
קיים מודל אחר לתקשורת בין שרתים ולקוחות ,שנקרא מודל מונחה אירועים
).(Event-Driven Model
השרת ממתין שמשהו יתרחש במחשב הלקוח .ברגע שיש התרחשות במחשב
הלקוח ,השרת מבצע פעולות מסוימות.
מודל זה פשוט בהרבה לבניית יישומים מאשר שימוש בתסריט של בקשה/תגובה
המקובל.
ASP.NETפועלת בשיטה זו – היא מתארת פעולות ומגיבה עליהן.
היא מסתמכת על עיבוד לקוח פיקח ) (clever client processingכדי לחקות מודל
מונחה אירועים
עיבוד בצד הלקוח
עיבוד בצד הלקוח יתרחש ברגע שנוסיף לדף HTMLקוד תכנות שהלקוח
מסוגל להבין .זהו למעשה תסריט (script) HTMLשהדפדפן מסוגל
להפעיל.
קוד בצד הלקוח מופעל בדר"כ באמצעות .JavaScript
דוגמא:
><html
><head
>”<script language=“JavaScript
<!-;)”alert(“Hello World
>//--
></script
></head
><body
Welcome To My First Page
></body
></html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
כעת ניתן להפעיל פקודות בשני מקומות :בשרת ,כאשר הכל
מוחזר ללקוח כ – , HTMLאו בלקוח .עם זאת ,שני מקומות אלו נפרדים
ואינם מסוגלים לתקשר זה עם זה.
תיאור ההבדלים הין צד הלקוח לצד השרת:
מיקום
תיאור
צד הלקוח קוד זה כלל אינו מבוצע ע"י השרת .הוא מבוצע בצד הלקוח ובאחריותו
בלבד .קוד זה נכתב בדר"כ בשפת JavaScriptכדי לבדוק תקינותם של
טפסים ,או שינויים במראה ובתוכן הדף – דבר הידוע בשם Dynamic
.HTML
צד השרת קוד זה מופעל בשרת בלבד .כל מידע שמייצר קוד זה מומר לתסריט
HTMLלפני שהוא נשלח אל הלקוח.
ניתן לכתוב קוד בעזרת -scriptים ב , VBScript -אבל ASP.NET
משתמשת בשפות שיש להדר לשם הרצה במחשב
(כל שפה שהיא ).NET
קוד בצד השרת משמש לעיבוד תוכן והחזרת נתונים.
כיצד ASP.NETמשלבת הכל יחד?
הדרך היחידה בה יכול לקוח לתקשר עם השרת היא באמצעות בקשה
) . (Requestהבקשה יכולה להיות בקשה יזומה – כמו לחיצת לחצן ,או
יוזמה של המערכת.
במקרה של יוזמת המערכת הדפדפן מבצע קוד תסריט בצד הלקוח ושולח
הודעה שהיא בקשה לשרת .פעולה זו מתבצעת ע"י סוכנים.
הסוכנים של ASP.NETהם תסריטים בצד הלקוח .בכל פעם שקורה משהו
בצד הלקוח ,מופעל בו תסריט ושולח מידע לשרת (כמו שמשלוח טופס
מעביר מידע לשרת) .הדפדפן הוא שותף לא מודע לפעולה זו – התסריט
בצד הלקוח אינו יכול לתקשר עם השרת אך הוא יכול לשלוח לו הודעות
באמצעות הרשת.
לכן ASP.NET ,מחברת יחדיו את השרת והלקוח ,וכך המפתחים יכולים
לבצע בדפי Webפעולות שלא התאפשרו בעבר .קיימת אפשרות להגיב
לארועים מצד המשתמש באופן מיידי ולא לחכות למשלוח טפסים.
מאפייני טכנולוגיית : .Net
):CLR (Common Language Runtime
ב .NET-ניתן לכתוב בכל שפה ,כל עוד היא נתמכת ב ..NET-כל התוכנות ב-
.NETרצות תחת אותה סביבה (ששמה .)CLRב CLR-מוגדרים ,לדוגמא,
טיפוסי נתונים בסיסיים ,ש .NETדורש שכל השפות יתמכו בהם .הCLR-
כולל בתוכו גם את ה ,Garbage Collector-ואחראי על הרצת ה. MSIL-
:Managed Code
קוד שבו יש אובייקטים (כלומר ,)OOP ,אבל אין צורך ל"נקות" בו את
האובייקטים .עד עכשיו ,ב VB-או ב ,C++-היינו חייבים לנקות כל אובייקט
שהיינו יוצרים ,כדי לחסוך במשאבים יקרים .פקודות "ניקיון" אופייניות הן
deleteאו -set obj = nothingלעומת ה ,.NETבו לא קיים הצורך לסגור
את האובייקטים .הניקיון מתבצע ע"י ה" - "Garbage Collectorמודול של ה-
,CLRשאחראי לניקוי כל האובייקטים שתוכניות רצות יוצרות.
:Intermediate Language
הידור קוד ב .NETאיננו מתבצע לשפת מכונה אלא ל"שפת ביניים" .שפת ביניים
זו נקראת ,Intermediate Languageאו בקיצור .MSIL ,לאחר מכן ,הקוד של
שפת הביניים הזאת עובד הידור בזמן ריצה לשפת מכונה ע"י מנגנון שנקרא
,Just In Time compilerאו בקיצור .JIT -תכונה זו מאפשרת לכתוב את הקוד
בכל שפה שהיא ,וגם מאפשרת ל"ערבב" שפות .ניתן ,למעשה ,להשתמש
ב .NETבכל שפה שהיא ,כל עוד היא עונה על דרישותיה של הCommon -
,Language Specificationאו בקיצור .CLSה CLS-היא בעצם מערכת חוקים
שעל כל שפת .NETלעמוד בה .תכונה זו גם מאפשרת שקוד מסוים יוכל להיות
מתאים ליותר ממערכת הפעלה אחת .לדוגמא -כיום יש פרויקט שנקרא ,mono
אשר פועל להרצת .NETבלינוקס .כמו כן ,כך ניתן לכתוב בכל שפה שהיא ללא
איבוד ביצועים ביחס לשפה אחרת.
:Class Library
ספרייה עצומה של פונקציות ומחלקות מערכת .לכל תוכנית ב .NETיש גישה
אליה ,ובכל תוכנית ניתן להשתמש בה .בתוך הספרייה נמצא את ADO.NET
(שאחראית על גישה למסדי נתונים) ,את האובייקטים של ( ASP.NETלבניית
אתרי ,)Webאת הספרייה Windows.Formsהשומרת בתוכה את כל
הפונקציות הבסיסיות של חלונות ,ואת ,System.Netהאחראית על תקשורת.
אלו היו דוגמאות בודדות בלבד ,וככל שאדם ירבה להתעמק ב ,.NETהוא יגלה
עד כמה אינסופית ועשירה היא הספריה הזאת.
תכונות נוספות הן תמיכה מובנית ב ,XML, Web Services-ועוד.
לכל הרכיבים האלו ביחד קוראים ה.".NET Framework"-
ניתן לסכם את המבנה של ה Frameworkבתרשים הבא:
בתחתית התרשים ,נמצאת מערכת ההפעלה ,שלמען האמת ,יכולה להיות כל מערכת הפעלה.
מעליה ,יש את ה .CLR-כאמור ,שכבה זו אחראית על ה"תקשורת" עם מערכת ההפעלה.
במילים אחרות ,היא החוליה המקשרת בין תוכנת ה .NETשלנו ,לבין מערכת ההפעלה.
מעליה ,באדום ,נמצאים כל הרכיבים של ה - Class Library-ביניהם ASP.NETו.ADO.NET-
לאחר מכן ,בכחול ,נמצאות השפות שאיתן אנחנו כותבים את האפליקציות שלנו .שפות אלו
חייבות לענות על דרישותיה של ה .CLR-דרישות אלו נקראות ה ,CLS-כמובא למעלה.
הקדמה לASP.NET-
ניתן לראות ב ASP.NET-כמעין ממשיכה של ASPהקלאסי .אולם ,הדבר היחיד
המשותף שיש לשתי הטכנולוגיות הללו ,הוא המטרה -שתיהן טכנולוגיות צד
שרת שמייצרות HTMLללקוח .אבל פה בערך נגמר הדמיון ,ומתחיל השוני.
ASP.NETמציגה קונספציה ומודל שונה לגמרי מזה של ASPקלאסית .למודל
קוראים ,WebFormsוהוא מציג גישה שלפיה השרת בעצם מודע לפקדים שעד
עתה טופלו ע"י הלקוח .לדוגמא ,ב ASP-קלאסית השרת לא היה מודע כלל וכלל
לקיומו של תיבת-טקסט מסוימת ,וה"תקשורת" עמה הייתה רק דרך משתני
( formאו .)QueryStringב ASP.NET-השרת מודע לקיומו של תיבת-הטקסט
הנ"ל ,והוא זה שדואג לתרגם אותה ל HTML-בהתאם .השרת הפך להיות
ל"שרת חכם" ,שיודע מה יש בלקוח ,לעומת "שרת עיוור" שאין לו מושג מה קורה
בלקוח .מודל זה אולי ייראה קצת מעוות ולא-נכון בתחילה ,אך עם הזמן ,ולאחר
לימוד של המודל ,ניתן יהיה להבין את הרעיון שעומד מאחורי התפיסה הזאת.
ASP.NETהיא חלק מה - .net Framework-וזה אומר שיש לה מאחוריה את כל
ה Class Library-של ,.NETניתן לכתוב אותה בכל שפה שמתאימה ל.NET
( VisualBasic.net, C#, C++, JScript.netועוד) ,והיא עוברת הידור לפני
הפעלתה (כלומר המחשב צריך לתרגם אותה ל ,IL-ולאחר מכן לשפת מכונה),
בניגוד ל ASP-קלאסית ,שבה השתמשנו בשפות סקריפט שאינן מתהדרות .זה
יתרון עצום ,כיוון שעכשיו ניתן לכתוב גם אפליקציות "כבדות" יחסית ,והן מורצות
ממש על ה ,CLR-במקום אינטרפרטציה על מנוע ה ASP-הרגיל.
המשך ...ASP.NET
ASP.NETהיא לא שפת תכנות אלא טכנולוגיה שמשתמשת בשפות תכנות
קיימות .זוהי סביבת עבודה שבנויה על ה .NET -ומשמשת לבניית
אפליקציות Webיות.
בטכנולוגיה זו כל דבר הוא אובייקט .כאשר אובייקט הוא מופע של מחלקה
כלשהי המאגדת תחתיה משתנים ,מאפיינים ופונקציות המשמשים להפעלת
והשמשת האובייקט.
טכנולוגיה זו מכילה אובייקטים מוכנים שמכילים מתודות המאפשרות את
הפונקציונאליות שלהם.
בדומה ל ASP -ששם היו אובייקטים:
Responseו – Requestלדוגמא שאפשרו העברת אינפורמציה מהשרת
ללקוח או מהלקוח לשרת בעזרת מתודות שהם מכילים.
( תוכן שמועבר ללקוח (Response.Write
כמו:
יתרונות :ASP.NET
פחות קוד – יש פקדים מובנים המקצרים את תהליך הכתיבה.
הקוד מקומפל (מהודר) ,לאחר שהוא קומפל פעם אחת הוא נשמר במאגר ,כך
שבפעם הבאה שיקראו לדף הוא יילקח מהמאגר( .ביצועים טובים יותר)
הפעלת אירועים בצד השרת.
שימוש קל יותר ברכיבים – ניתן לכתוב בשפות שונות תומכות .NETועל כן
הכתיבה עשירה ופשוטה יותר מאשר שימוש בשפות סקריפטים.
קיימת הפרדה של קוד HTMLמקוד – ASPהמסמך הופך להיות מובנה יותר –
וניתן לעבוד במקביל על הדברים :עיצוב ) (UIותכנות
).(Code Behind
לא מתבססת על סקריפטים בצד הלקוח ולכן לא תלויה בסוג הדפדפן או
בפלטפורמה .ולכן ניתן לפתח Web Formאחד שיכול להיות מוצג בכל רכיב שיש
לו גישה לאינטרנט ודפדפן .Web
קיימת התאמה אישית ללקוח – יש פקדי שרת ) (Web Controlsאשר כותבים קוד
מותאם לדפדפן שקרא להם.
שילוב טוב יותר עם ADO.NET .XMLתומך ב XML -ועל כן לא רק רכיבי com
יוכלו לקרוא את המידע המועבר.
תכונות ניהול ואבטחה.
איתור באגים קל יותר.
שחקנים ראשיים:
– )PWS( IISקונפיגורציה של שרת אינטרנט ,המכיל קובץ aspx.dllשהוא
המנוע שמריץ אפליקציות Webיות.
IIS 5.0ומעלה יש תמיכה ב.NET -
TCP/IPפרוטוקול ההתקשרות.
-HTTPפרוטוקול המגדיר את סוג החבילות שעוברות ברשת.
קוד בצד לקוח – JavaScript -בדיקות בצד הלקוח ,נתמך בכל הדפדפנים.
Jscriptשל – VBScript ,MSלא נתמך בNetscape -
קוד בצד שרת – VBScriptכי האינטראקציה יותר טובה עם ה( IIS -גם
. )JavaScriptבכל שפה שהיא .NET
כתובת IPשל שרת מקומי – localhost 127.0.0.1
שרת ה IIS -מכיר את כל מה שנמצא בתיקייה Inetpub/wwwrootולכן
ניתן לפנות אליהם דרך ה.localhost -
ניתן גם לפנות לתיקיות שלא נמצאות בתיקיה זו אם בוצע להן מיפוי לתיקיות
וירטואליות – מה שיוצר עותק בשרת ה , IIS -אבל הכתובת שתוקלד תהא
אחרת.
– ASP.NET Web Formsחלק מה – , Web Applicationמספקים דרך
קלה לבניית אתרי Webדינמיים.
איך מריצים קבצי ?ASP.NET
כדי שניתן יהיה להריץ דפי ,ASP.NETחובה להתקין את ה..NET Framework-
כמו כן ,יש צורך בשרת - HTTPעדיף .IISקרוב לוודאי ש ASP.NET-לא ירוץ על
. PWS
באמצעות אילו כלים כותבים ב?ASP.NET-
ניתן לכתוב ( ASP.NETאו כל תוכנית אחרת של ).NETבעזרת כל עורך טקסט
פשוט .
אולם ,ניתן לכתוב גם ב - ASP.NET Webmatrix-כלי חינמי מבית היוצר של
מיקרוסופט .כמו כן ,בשביל מקצוענות של ממש ,מומלץ להשתמש בVisual -
.Studio.NET
Visual Studio .NET IDE
IDE = Integrated Development Environment
יחיד ללא תלות בשפה או בסוג האפליקציהIDE מספקתMicrosoft
.שמפתחים
:היררכית תיקיות וקבצים
Solution
Project…
Project
Web Form
Web Form
:IDE -קומפוננטות ב
)HTML אוDesign( Editor/Browser
Solution Explorer
Properties
Dynamic Help
Task List
Server Explorer
Toolbox
Object Browser
Web Application Files
– Solution Files
– .slnמגדיר את כל הפרוייקטים ב solution -ומגדיר אינפורמציה גלובלית לכולם.
(Solution User Option) – .suo
שומר הגדרות שביצע המשתמש – כמו tast ,breakpoints
– Project Files
ASP.NET Web Form – .aspx
– code behind page – .aspx.csפונקציונליות
Web Service – .asmx
– Global.asaxקובץ שמכיל את כל המשתנים הגלובליים והevent -ים ,כמו מה
לעשות כשהאפליקציה עולה או יורדת.
:ApplicationOnStartליצור connectionל ,DB -לטעון ערכים מקובץ...,
– ApplicationOnEndלכתוב מונה מס' כניסות לקובץ.
– Web.configהגדרות קונפיגורציה שה – CLRקוראת והגדרות שהאפליקציה
קוראת.
דוגמא :הגדרת משתני sessionהאם נשמרים בתור cookiesאו באופן אחר ,הגדרוןת
autenticationלגבי האפליקציה.
Project Assembly
– Projectname.dllמקבץ את כל קבצי ה , code behind -גפי ה,ASP.NET-
תמונות ועוד שקיימים בפרוייקט .כולם מקןמפלים לקובץ assemblyאחד
שכתוב ב .MSIL -ונשמר בתקיית binשל הפרוייקט.
CLRיכול להפעיל רק קוד שמוכל ב ,assembly -לכן גם דפי ה ASP -מוכלים ב-
assembliesשנוצרים באופן דינמי כאשר יש בקשה לדף.
– assemblyInfoשומר אינפורמציה כללית עבור ה ,assembly -כולל גירסאות
ותכונות.
צעדים ראשונים
, בפרטASP.NET ומהו, בכלל.NET לאחר שיש לנו מושג פחות או יותר מהי
, הדף הראשון שלנו יורכב מאמרה פשוטה.אפשר להתחיל לכתוב קצת קוד
שלנו יציגASP.NET- שאותה דף ה,"Hello World” הלא היא,וידועה
.באלגנטיות על המסך
: זה נראה ככה,בכל אופן
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@Page Language="C#"%>
<script runat="server">
void Page_Load(object sender, EventArgs e) {
myLabel.Text = "Hello World!";
}
</script>
<html>
<head>
<title>My first ASP.NET page</title>
</head>
<body>
<asp:Label runat="server" id="myLabel"></asp:Label>
</body>
</html>
עכשיו ננתח קצת את הענינים:
את דף ה ASP.NET-נהוג ,בגדול ,לחלק לשלושה חלקים עיקריים:
.1ה .@Page Directive-זוהי תמיד השורה הראשונה בכל עמוד .ASP.NETשורה זו מגדירה מאפיינים של
העמוד שלנו ,כגון שפה (כמו בדוגמא) ,האם להשתמש ב ,Sessions-האם לשמור Viewstateועוד הגדרות
שונות.
.2קוד צד-השרת של הדף .קוד זה יופיע בדרך כלל בקובץ נפרד או בראש הדף ,בין תגיות
<" >script runat="serverו .>/script<-המאפיין " runat="serverאומר שהקוד הבא שייך לשרת ,ועל
" ASP.NETלקרוא" אותו .מאפיין זה הוא מוטיב חוזר ב ,ASP.NET-שאומר לשרת ,שפקדים מסוימים נגישים
בצד השרת (כמו ,asp:Labelכפי שנראה בהמשך) .כפי שניתן לראות בקוד ,מוגדרת בו מתודה (פונקציה),
שרצה ב ,Page_Load-כלומר ,כשהדף נטען .כל פעם שמשתמש יבקש את הדף הנ"ל מהשרת ,מתודה זאת
תרוץ .בדוגמא שלפנינו ,אנחנו נותנים למאפיין טקסט של ה( label-פקד שבעצם אחראי על פלט) ,שהוגדר
בהמשך ,את הטקסט "!Hello World".
.3ה .HTML-בחלק השלישי אנחנו כותבים את ה HTML-עצמו ,בשילוב עם פקדי צד שרת .בחלק זה של
הדף אנחנו מגדירים את המבנה של הדף ,ואת העיצוב/מראה שלו .בדוגמא שלנו ,הגדרנו פקד צד-שרת
(תזכורת :פקד צד שרת הוא פקד שהשרת מודע לקיומו) מסוג .labelפקד labelדומה מאוד ל labelשל
- Visual Basic 6הוא אחראי בעיקר על פלט .ישנם עוד סוגי פקדים כגון ( textboxשמציג תיבת טקסט) ,ו-
( DropDownListשמציג .)SELECTלפני שליחתם אל הלקוח ,פקדים אלו עוברים תרגום ל HTML-רגיל,
בהתאם לסוג הדפדפן של הלקוח.
חלוקה משולשת זאת מאפשרת הפרדה אמיתית של קוד מעיצוב ותוכן ,ופוטרת אותנו מ"קוד הספגטי",
שאיתו היינו מסתבכים ב ASP-קלאסי.
: והפעם רואים באופן ברור יותר את הקשר בין השרת ללקוח,עוד דוגמא היא זו
<%@Page Language="C#"%>
<script runat="server">
void btnApply_Click(object sender, EventArgs e) {
lblHello.Text = "Hello, " + myTextbox.Text;
}
</script>
<html>
<head>
<title>Customised message</title>
</head>
<body>
<form runat="server">
Please write your name here:
<asp:TextBox runat="server" id="myTextbox" /><br />
<asp:Button runat="server" id="btnApply"
text="Show message" OnClick="btnApply_Click" /><br />
<br />
<asp:Label runat="server" id="lblHello" />
</form>
</body>
</html>
בדוגמא זו ,המשתמש כותב את שמו בתיבת-טקסט ,ובלחיצה על כפתור מופיעה
הודעה ,לפי השם שהוכנס.
הפעם אנחנו מגדירים פקדים מהסוג ,TextBoxשמכיל טקסט פשוט; ,Buttonשבעת
לחיצה עליו יוצג בפקד אחר על הטופס -מסוג - Labelטקסט דינאמי.
כדי לטפל בלחיצה ,ישנה פונקציה מיוחדת ,המטפלת באירוע (בדוגמא הנ"ל -אירוע
לחיצה) .לפקדים שונים יש אירועים המתאימים לתפקודם ,והם מאפשרים להתאים
את התפקוד שלהם לצרכי האפליקציה .למשל ,ניתן לבצע בדיקות אימות לערכים
שהוכנסו בעת לחיצה על כפתור השליחה של טופס.
בהגדרת הכפתור הוספנו את המאפיין ,OnClickוערכו הוא שם הפונקציה שמטפלת
באירוע הלחיצה עליו .בפונקציה הנ"ל ,btnApply_Click ,מעודכן הטקסט שמופיע על
ה .Label-הטקסט המוצג כולל הודעת ברכה אישית ,המשתמשת בטקסט מתוך פקד
תיבת-הטקסט.
מה קורה כשהלקוח מבקש דף ASP.NET
מהשרת?
כמו ב ASP-קלאסי ,הלקוח בעצם מבקש את הדף מ .IIS-לאחר מכןIIS ,
מריץ את ה ISAPI Filter-של ( ASP.NETבדיוק כמו שהוא מריץ את ה-
ISAPIשל ,)ASPה ISAPI-הזה מריץ את ה ,FrameWork -ואת ה-
,ASP.NET Runtimeשבעצם עושים את עיקר עיבוד עמוד ה.ASPX-
סדר הקריאות
בהתחלה ASP.NET ,קוראת את קובץ ה ,ASPX-ויוצרת את הControl-
,Treeשזהו "עץ הפקדים" שבדף שלנו .בשלב זה ASP.NET ,עוברת באופן
רקורסיבי על קובץ ה ,ASPX-ועל התגיות שבו ,כדי לקרוא למחלקות
המתאימות לפקדים המסוימים .לדוגמא -אם היא נתקלת בתגית
<" ,>asp:textbox runat="serverהיא קוראת למחלקה ,TextBoxיוצרת
( instanceמופע) שלה ,ומוסיפה אותה לרשימת הפקדים של הדף.
לאחר מכן ,מתבצעת ,Page_Initבמידה והוגדרה פונקציה כזאת בקוד
שלנו ,ואחריה ,מתבצעת טעינה ועיבוד של ה( ViewState-עוד על ה-
- ViewStateבהמשך) .לאחר הטעינה והעיבוד של ה,ViewState-
הפונקציה Page_Loadנקראת ,במידה והוגדרה.
לאחר ,Page_Loadמטפלי האירועים השונים נקראים בשלב זה ירוצו
פונקציות כמו Button_clickאו ,DropDownList_SelectedIndexChange
שנקראות במקרה שבהם הלקוח לחץ על כפתור ,או שינה indexשל
DropDownמסוים.
לאחר מכן Page_PreRender ,נקראת ,במידה ויש כזו בקוד שלנו .פונקציה זו
היא מקום טוב לשים כל מיני פעולות שכדאי שיתרחשו ממש לפני יצירת ה-
HTMLהסופי שנשלח ללקוח .מיקרוסופט ממליצה שפה נשים קוד שמוסיף קוד
צד-לקוח ( )Javascriptלדף שלנו .אחרי ,PreRenderהASP.NET Runtime-
עובר על כל הפקדים שהוגדרו בדף שלנו ,ומתרגם אותם ל( HTML-זה נעשה
ע"י קריאה למתודה ,Renderשחייבת להימצא בכל פקד).
לבסוף ,ה Runtime-קורא ל( Page_Unload-במידה ויש כזה) ,ושולח את ה-
HTMLהסופי ללקוח.
דוגמאות
נבדוק כיצד מתבצעות הדוגמאות שנתּנו בעמוד הקודם.
בדוגמא הראשונה מוגדרת labelעל הדף .הפונקציה Page_Loadנקראת אחרי
שה label-הוספה לרשימת הפקדים בדף ,ומעדכנת את הטקסט המופיע עליה.
אין דברים נוספים שעל השרת לעבד ,ולכן קוד HTMLמיוצר ונשלח ללקוח.
בדוגמא השניה ,המצב מסובך יותר .ישנה תיבת-טקסט ,כפתור עם אירוע
המתבצע בעת לחיצה ,ו.label-
במצב ההתחלתי ,מיוצר הדף כך שתיבת הטקסט וה label-ריקות .אולם ,בעת
לחיצה על הכפתור ,הדף נשלח מחדש לעצמו (פעולה זו נקראת ,)postback
כאשר הערך של תיבת הטקסט נשמר ב .ViewState-הפעם ,יש מטפל-אירוע
שצריך להתבצע ,והוא משנה את ערך הטקסט של ה ,label-בהתאם לערך תיבת
הטקסט .מפה ההמשך הוא כמו בדוגמא הקודמת :קוד HTMLמיוצר ,ונשלח
ללקוח.
יצירת -Web Form
הפונקציונלאיות של Web Formמוגדרת ע"י 3רמות של מאפיינים:
:Pageהגרות גלובליות
.1
:Bodyאיך הדף יוצג
.2
:Formאיך קבוצת פקדים תעובד
.3
– PAGE
>”<%@ page language=“ “ codebehind = “*.aspx.cs” smartNavigation = “true
מגדיר תכונות ספציפיות של העמוד שיהיו בשימוש ה Parser -וה Compiler -של
ASP.NET
– Languageמגדיר את שפת ב"מ שבה יכתבו סקריפטים בדף.
– Codebehindמגדיר את הקובץ שמכיל את הלוגיקה שתומכת בטופס (נוצר אוטומטית).
– smartNavigationמאפשר לדפדפן לעדכן רק את האזור שהשתנה בטופס.
– BODY
><body ms_positioning = “GridLayout”>……..</body
מגדיר איך פקדים וטקסט יוצבו בדף.
– ms_positioning
– GridLayoutבמקום מוחלט ע"י קורדינטות אבסולוטיות ,מוסיף מאפייני DHTML
()Position, Left, Top, Z-Index
– FlowLayoutהפקדים מתווספים אחד אחרי השני.
– FORM
><form id=“” method=“” runat=“”>…………..</form
מגדיר איך קבוצת פקדים תעובד.
– idזיהוי חד חד ערכי ע"י השרת
– Method
” – “postזוגות של name/valueשיועברו בחבילת הHTTP -
” – “getמידע מועבר ע"י query stringב( URL -עד 1024ביט)
” – Runat=“serverמגדיר את מיקום יצירת הפקדים ,הארועים מבוצעים
בשרת ,מעביר אינפורמציה חזרה לשרת ,יחיד בטופס.
פקדים Controls -
HTML Controls
– Client Sideפקדים רגילים של ,HTMLרצים בצד הלקוח
בלבד ,ולא עוברים אף עיבוד בצד השרת.
– Server Side
סינטקטית נרשמים כמו פקדי HTMLרגילים אך עם תוספת runat
”= “server
השרת מייצר עבורם תמיד אותו קוד HTMLללא תלות בדפדפן
חייבים להופיע בתוך ><form runat=…> </form
מוגדרים בSystem.Web.UI.HtmlControls : namespace -
בשימוש אם הפקד צריך להריץ קוד גם בצד הלקוח וגם בצד השרת
ע"י הגדרת ה: event -
OnClick
OnServerClick
קלים להמרה מפקדי HTMLהקלאסיים.
Web Server Controls
אירועים מורצים תמיד בצד השרת ונוצרים על ידו.
השרת מייצר עבורם קוד שתלוי בדפדפן שביקש
את הדף.
אוסף של פקדים מיוחדים.
בשימוש אם האפליקציה תוצג במס' סוגי דפדפנים.
לא יפעלו אם ה runat = “server” -לא קיים.
כולם מוגדרים ב:namespace -
System.Web.UI.WebControls
ASP.NET Server Controls
קומפוננטות שרצות בשרת ומייצרות את ה UI -ופונקציות נוספות .בשימוש
בדפי ASP.NETובקובצי .code behind
><asp:Button id=“…” runat=“server” text=“submit”/
מאפיין runatשמציין שהלוגיקה רצה בשרת.
פקדים אלו מתבססים על אותה מחלקה ולכן חולקים תכונות (מאפיינים)
משותפות – text, width, backColor,…..
פונקציונליות הפקד – מגדירים מה לבצע ב event -מסויים.
פקדי HTMLמסורתיים הם – statelessחוזרים להגדרות ברירת מחדל,
בעוד שעבור פקדי שרת מצב התצוגה וקלט המשתמשים נשמרים
אוטומטית.
עבורם נוצר בצד השרת קוד HTMLמסויים עבור הדפדפן שביקש את הדף.
(לדוגמא אם הדפדפן תומך ב script -או לא)
סוגים של Server Controls
ישנם מס' סוגים זמינים ב ,ASP.NET -חלקם דומים לפקדי HTMLמסורתיים
ואחדים חדשים.
– Intrinsic Controls
בדומה לפקדי HTMLפשוטיםlistbox, button, textbox :
– Validation Controls
בדיקת קלט משתמש
– Rich Controls
פקדים מורכבים ,לדוגמאCalander :
– List Bound Controls
יכולים להציג רשימה של מידע ,מאפשרים למיין ,לערוך וכו'
דוגמאות לפקדים שקולים
HTML Button:
<input type=“button” value=“HTML Control”>
HTML Server Control Button:
<input type=“button” value=“HTML Server Control”
id=“button1” runat=“server”>
Web Server Control Button:
<asp:button id=“button1” runat=“server”
text=“Web Server Control”>
Intrinsic Web Server Controls
Web server
control
HTML control
equivalent
<asp:button>
<input type=submit>
<asp:checkbox>
<input type=checkbox>
<asp:hyperlink>
<a href=“…”> </a>
<asp:image>
<img src=“…”>
<asp:linkButton>
Web server control
function
יצירת לחצן ששולח בקשה לשרת
שניתן לבחורcheck box יצירת
.ע"י קליק
HTML יצירת היפר קישור לדף
יצירת אזור שבשימוש להצגת
.תמונה
יצירת לחצן לקישור
<asp:label>
<span> </span>
<asp:listbox>
<select> </select>
<asp:imagebutton
>
<input type=image>
יצירת תווית טקסט שמשתמשים
.לא יכולים לשנות
.יצירת רשימת בחירה
יוצר לחצן שעליו תופיע תמונה
.במקום טקסט
Web server
control
HTML control equivalent
<asp:panel>
<div> </div>
<asp:radiobutton>
<input type=radiobutton>
<asp:table>
<table>
<asp:textbox>
<input type=text>
</table>
Web server control
function
.יצירת מיכלית של פקדים
.יצירת לחצן רדיו
.יצירת טבלה
.יצירת תיבת טקסט
Validation Controls
Function
דורש הקלט יתאים לקלט אחר או לערך
קיים.
Control
CompareValidator
דורש הקלט יתאים לתנאי מסוים.
(לדוגמא מס' זוגי וכו')
CustomValidator
דורש שהקלט יהיה בתחום מסוים.
RangeValidator
דורש שהקלט יתאים לפורמט מסוים.
RegularExpressionValidator
דורש שהמשתמש יכניס ערך לשדה.
RequiredFieldValidator
אוסף את כל הודעות השגיאה של כל
הפקדים בשביל הצגה מרוכזת.
ValidationSummary
Rich Controls
Function
מציג סידרת תמונות אקראית או מוגדרת.
מציג יומן גרפי שבו משתמשים יכולים
לבחור תאריך.
Control
AdRotator
Calendar
List-Bound Controls
Function
מציג מידע כעמודת לחצני סימון.
מציג את הרשומות במספר דרכים ,לפי
הגדרה.
Control
CheckBoxList
Repeater
מציג את הרשומות בטבלה.
DataList
כמו ,DataListעם אפשרויות מיון ועריכה.
DataGrid
מציג את המידע בתפריט של פקד נפתח.
DropDownList
מציג את המידע בחלון.
מציג את המידע כעמודת כפתורי רדיו.
ListBox
RadioButtonList
איך נשמר המידע
ב? Web Server Control -
כמו כל טכנולוגיה שמבוססת HTTPה Web Forms -הם . Stateless
כלומר ,השרת לא שומר אף אינפורמציה על בקשות קודמות.
ASP.NET Web Formsמטפלים בבעיה זו של שמירת המצב של
Web Server Controlע"י הוספת פקד חבוי ששמו _VIEWSTATEששומר
את מצב הפקדים ב.Web Forms -
פקד זה מתווסף לטופס שבצד השרת כשמציינים את התגית
>”<form runat=“server
></form
והוא שומר מצב רק של הפקדים שבתגית.
(יתרון :התוכניתן מתרכז בעיצוב הדף ולא בבניה של מתודות לשמירת מצב
הדף)
הגדרות הדף נשארות קונסיסטנטיות מבקשה אחת לאחרת.
ViewState - לEnable - וDisable
. שומר את מצב התצוגה של הפקדים בטופסweb Form ,כב"מ
יכול להאט אתView State -עבור טופס עם מספר רב של פקדים גודל ה
.הביצועים בצורה משמעותית
רק לפקדיםEnable - וPage - ברמת הDisable בכדי להגביר את הביצועים נבצע
.מסוימים
:Disable
<%@ page EnableViewState=“False”…….>
: לפקדEnable
<asp:list id=“ListName” EnableViewState=“true” runat=“server”/>