דף הבית   | מפת האתר   | אודות

 מדריך ללימוד Servlets >Servlets בסיסיים>מעגל החיים של Servlet

הינך נמצא ב :

מעגל החיים של Servlet  

מעגל החיים של Servlet נשלט לחלוטין ע"י ה-container-Servlet-engine שהוא חלק מכל שרת Web שבו ה-Servlet מותקן.

כאשר Servlet נוצר לראשונה מופעל init method בו יש להציב קוד אתחול חד פעמי. לאחר מכן כל בקשת HTTP יוצרת thread הקורא ל-service  method של מופע ה-Servlet שנוצר קודם לכן. דרישות מרובות המגיעות בו זמנית יוצרות threads הקוראים ל-service באופן סימולטאני, זאת למרות
ש-
Servlet יכול ליישם את SingleThreadModel interface המתיר רק ל-thread יחיד לפעול בכל פעם. service method קורא ל-doGet ,doPost או כל doXXX method אחר, בהתאם לסוג בקשת ה-HTTP המתקבלת. לבסוף, כאשר השרת מחליט להסיר את ה-Servlet הוא קורא ל-destroy method.

init method

method זה נקרא רק כאשר ה-Servlet נוצר, לכן הוא משמש לאתחול חד פעמי. Servlet יכול להיווצר כאשר משתמש מפעיל לראשונה את ה-Servlet או בתחילת הפעלה של השרת, תלוי באופן הרישום של
ה-
Servlet בתוכנת שרת ה-Web
.

קיימות שתי גרסאות של init method. אחת שאינה מקבלת כל ארגומנטים ואחרת המקבלת כארגומנט אובייקט מסוג ServletConfig. הגרסה הראשונה משמשת כאשר ה-Servlet  אינו צריך לקרוא הגדרות כלשהן המשתנות משרת לשרת. הגדרת ה-init method נקראת כך:

public void init() throws ServletException

{

    //initialization code...
}

הגרסה השנייה של init method משמשת כאשר ה-Servlet חייב לקרוא דרישות שרת ייחודיות עבור האתחול. לדוגמה כאשר הוא צריך לדעת על:
קבצי סיסמא, פרמטרי ביצוע ייחודיים לשרת, קבצי
hit count, הגדרות מסד הנתונים, cookies
סידרתיים מדרישות קודמות.

הגדרת ה-init method נקראת כך :

 

 

public void init(ServletConfig config) throws ServletException

{
     super.init(config);
    // initialization code
}

 

שים לב לשני פרטים בקוד זה :

1. ה-init method מקבל כארגומנט מופע של ServletConfig.
ב-ServletConfig נמצא
getInitParameter method שבאמצעותו ניתן לחפש פרמטרי אתחול הקשורים ל-Servlet
. שים לב שאף על פי שחיפוש פרמטרים אלו נעשה באופן שאינו תלוי בסוג השרת, הגדרת ערכי הפרמטרים עצמם נעשית באופן ייחודי לכל שרת.

2. השורה הראשונה של גוף ה-method קוראת ל-super.init. קריאה זו היא קריטית.

תמיד קרא ל-super.init בשורה הראשונה.

service method

בכל פעם שהשרת מקבל דרישה ל-Servlet השרת מייצר Servlet חדש וקורא ל-method זה.
ה-
method בודק את סוג בקשת ה-HTTP וקורא ל-doGet ,
doPost ,doPut ,doDelete וכו' בהתאמה.

 

doGet, doPost, doXXX methods

methods אלו הם עיקרו של ה-Servlet. ברוב המקרים כל שעליך לעשות הוא לדרוס את doGet ו/או doPost, אולם באפשרותך לדרוס את doDelete עבור בקשת HTTP מסוג DELETE, את doPut עבור PUT, את doOptions עבור OPTIONS ו-doTrace  עבור TRACE. יש לזכור שה-service method תומך באופן אוטומטי ב-OPTIONS ו-TRACE.

 

SingleThreadModel

בד"כ  השרת יוצר instance יחיד של Servlet ו-thread חדש עבור כל בקשת HTTP. מס' thread-ים  מופעלים באופן סימולטאני כך ש-doGet ו-doPost מסנכרנים את הגישה לשדות ונתונים משותפים. על מנת למנוע גישה זו של thread-ים מרובים יש ליישם את ממשק SingleThreadModel כדלקמן:

 

 

public class MyServlet extends HttpServlet

          implements SingleThreadModel

{

}

 

יישום ממשק זה מבטיח שלא תהיה גישה בו זמנית ליותר מ-thread אחד למופע ה-Servlet. זה מובטח ע"י סידור כל הבקשות בתור והעברתם אחת בכל פעם למופע ה-Servlet היחיד, או ע"י יצירת מופעים רבים שכל אחד מהם  מטפל בדרישה אחת בלבד. אולם יש להביא בחשבון שגישה מסונכרנת ליישומי השרת עלולה לפגום משמעותית בביצוע מבחינת הזמן.

 

destroy method

השרת עשוי להחליט להסיר מופע של Servlet בשני מצבים: מכיוון שנדרש לכך מפורש ע"י מנהל השרת, או מכיוון שה-Servlet לא היה בשימוש זמן רב. לפני הסרתו השרת קורא ל-destroy method של ה-Servlet. קריאה זו מאפשרת ל-Servlet לסגור connection לבסיסי נתונים, לעצור background threads, לכתוב רשימות coockies לדיסק ולבצע פעולות ניקוי אחרות.



       
כל הזכויות שמורות למערכות מידע אית"ן