როგორ მართავს სერვლეტის კონტეინერი სერვლეტის სიცოცხლის ციკლს? რა მეთოდები იძახება და როდის?
sobes.tech AI
პასუხი AI-სგან
კონტეინერი მართავს სერვლეტის ციკლს მეთოდების ნაკრების საშუალებით: init, service, destroy.
-
სერვლეტის კლასის ჩატვირთვა: როდესაც კონტეინერი იღებს პირველ მოთხოვნას სერვლეტზე ან აპლიკაციის დაწყებისას (თუ კონფიგურირებულია).
-
სერვლეტის ინстанციის შექმნა: კონტეინერი ქმნის ერთ ინстанციას სერვლეტის კლასისათვის მთელი აპლიკაციის განმავლობაში.
-
init()-ის გამოძახება: კონტეინერი ერთჯერადად ახორციელებსinit(ServletConfig config)მეთოდის გამოძახებას ინстанციის შექმნის შემდეგ. ამ მეთოდში შესაძლებელია ინიციალიზაცია, რესურსების ჩატვირთვა და სერვლეტის კონფიგურაციის მიღება. მეთოდი არ უნდა იძახოს ისევ, სანამ სერვლეტი არ იქნება განადგურებული და ახალი არ შექმნილი.// java public void init(ServletConfig config) throws ServletException { // სერვლეტის ინიციალიზაცია 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()მეთოდის გამოძახებას სერვლეტის ინстанციის განადგურებამდე. ეს ხდება აპლიკაციის შეჩერების ან სერვლეტის კონტეინერიდან ამოღებისას. ამ მეთოდში თავისუფლდება რესურსები (მაგალითად, მონაცემთა ბაზის კავშირების დახურვა ან ფაილების დახურვა).destroy-ის გამოძახების შემდეგ, კონტეინერი შეიძლება განახორციელოს გარე მეხსიერების გაწმენდა სერვლეტის ინстанციისთვის.// java public void destroy() { // რესურსების განთავისუფლება // მაგალითად, კავშირების დახურვა }
ციკლი შეიძლება წარმოდგენილი იყოს ცხრილად:
| მეთოდი | გამოძახება | დანიშნულება |
|---|---|---|
init() |
ერთჯერადად სერვლეტის ინстанციის შექმნის შემდეგ | ინიციალიზაცია, რესურსების ჩატვირთვა |
service() |
თითოეული შემომავალი მოთხოვნისთვის | მოთხოვნის დამუშავება, პასუხის შექმნა |
destroy() |
ერთჯერადად სერვლეტის ინстанციის განადგურებამდე | რესურსების განთავისუფლება, მუშაობის დასრულება |
კონტეინერი გარანტირებს, რომ init გამოძახებული იქნება service-ის წინ, ხოლო destroy - service-ის ბოლო გამოძახების შემდეგ. service მეთოდები შეიძლება გამოიძახოს პარალელურად.