Πώς διαχειρίζεται το κοντέινερ των σερβλετών τον κύκλο ζωής του σερβλέτου; Ποια μεθόδους καλούνται και πότε;
sobes.tech AI
Απάντηση από AI
Ο κοντέινερ διαχειρίζεται τον κύκλο ζωής του servlet μέσω μιας σειράς μεθόδων: init, service, destroy.
-
Φόρτωση κλάσης servlet: Όταν ο κοντέινερ λαμβάνει το πρώτο αίτημα προς το servlet ή κατά την εκκίνηση της εφαρμογής (εάν έχει ρυθμιστεί).
-
Δημιουργία στιγμιότυπου servlet: Ο κοντέινερ δημιουργεί ένα στιγμιότυπο της κλάσης servlet για ολόκληρη την εφαρμογή.
-
Κλήση
init(): Το κοντέινερ καλεί τη μέθοδοinit(ServletConfig config)μία φορά μετά τη δημιουργία του στιγμιότυπου. Σε αυτήν τη μέθοδο μπορεί να πραγματοποιηθεί αρχικοποίηση, φόρτωση πόρων και λήψη διαμόρφωσης servlet. Δεν πρέπει να καλείται ξανά μέχρι να καταστραφεί και να αναδημιουργηθεί το servlet.// java public void init(ServletConfig config) throws ServletException { // Αρχικοποίηση servlet this.config = config; // Λήψη παραμέτρων αρχικοποίησης String param = config.getInitParameter("someParam"); } -
Κλήση
service(): Για κάθε εισερχόμενο αίτημα, ο κοντέινερ καλεί τη μέθοδοservice(ServletRequest request, ServletResponse response). Αυτή η μέθοδος επεξεργάζεται το αίτημα και δημιουργεί την απάντηση. Συνήθως, ανακατευθύνει σε συγκεκριμένες μεθόδους HTTP (doGet,doPostκ.λπ.) στην κλάσηHttpServlet. Η μέθοδοςserviceείναι πολυνηματική, και ο κοντέινερ μπορεί να την καλεί ταυτόχρονα για πολλά αιτήματα.// java public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // Έλεγχος τύπου αιτήματος και κλήση κατάλληλης μεθόδου if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) { // Ανακατεύθυνση στο HttpServlet super.service(request, response); } else { // Επεξεργασία άλλων τύπων αιτημάτων throw new ServletException("Μόνο αιτήματα HTTP υποστηρίζονται"); } } // Παράδειγμα μεθόδου doXXX στο HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Επεξεργασία GET αιτήματος response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1>Γειά σου</h1>"); } -
Κλήση
destroy(): Ο κοντέινερ καλεί τη μέθοδοdestroy()μία φορά πριν καταστραφεί το στιγμιότυπο του servlet. Αυτό συμβαίνει κατά τη διακοπή της εφαρμογής ή κατά την αφαίρεση του servlet από τον κοντέινερ. Σε αυτήν τη μέθοδο απελευθερώνονται πόροι (π.χ. κλείσιμο συνδέσεων με βάσεις δεδομένων ή αρχείων). Μετά την κλήσηdestroy, ο κοντέινερ μπορεί να εκτελέσει συλλογή απορριμμάτων για το στιγμιότυπο του servlet.// java public void destroy() { // Απελευθέρωση πόρων // Π.χ. κλείσιμο συνδέσεων }
Ο κύκλος ζωής μπορεί να παρουσιαστεί σε έναν πίνακα:
| Μέθοδος | Καλείται | Σκοπός |
|---|---|---|
init() |
Μία φορά μετά τη δημιουργία του στιγμιότυπου του servlet | Αρχικοποίηση, φόρτωση πόρων |
service() |
Για κάθε εισερχόμενο αίτημα | Επεξεργασία αιτήματος, δημιουργία απάντησης |
destroy() |
Μία φορά πριν καταστραφεί το στιγμιότυπο του servlet | Απελευθέρωση πόρων, ολοκλήρωση εργασίας |
Ο κοντέινερ διασφαλίζει ότι το init θα καλείται πριν από το service, και το destroy θα καλείται μετά από την τελευταία κλήση του service. Οι μέθοδοι service μπορούν να καλούνται παράλληλα.