Hoe beheert de servlet-container de levenscyclus van de servlet? Welke methoden worden aangeroepen en op welke momenten?
Antwoord van AI
sobes.tech AI
Het container beheert de levenscyclus van de servlet via een set methoden: init, service, destroy.
-
Het laden van de servletklasse: Wanneer de container de eerste aanvraag naar de servlet ontvangt of bij het starten van de applicatie (indien geconfigureerd).
-
Het maken van een instantie van de servlet: De container maakt één instantie van de servletklasse voor de hele applicatie.
-
Aanroep van
init(): De container roept de methodeinit(ServletConfig config)slechts één keer aan na het maken van de instantie. In deze methode kunnen initialisaties worden uitgevoerd, resources worden geladen en de configuratie van de servlet worden verkregen. Deze methode mag niet opnieuw worden aangeroepen totdat de servlet is vernietigd en opnieuw gemaakt.// java public void init(ServletConfig config) throws ServletException { // Initialisatie van de servlet this.config = config; // Ophalen van initialisatieparameters String param = config.getInitParameter("someParam"); } -
Aanroep van
service(): Voor elke inkomende aanvraag roept de container de methodeservice(ServletRequest request, ServletResponse response)aan. Deze verwerkt de aanvraag en genereert het antwoord. Meestal delegeert hij de verwerking aan specifieke HTTP-methoden (doGet,doPost, etc.) in subklassen vanHttpServlet. Deservice-methode is multithreaded, de container kan deze gelijktijdig voor meerdere aanvragen aanroepen.// java public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // Controleer het type aanvraag en roep de juiste methode aan if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) { // Delegatie naar HttpServlet super.service(request, response); } else { // Verwerking van andere aanvraagtypes throw new ServletException("Alleen HTTP-aanvragen worden ondersteund"); } } // Voorbeeld van doXXX-methode in HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Verwerking van GET-aanvraag response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1>Hallo</h1>"); } -
Aanroep van
destroy(): De container roept de methodedestroy()slechts één keer aan voordat de servlet wordt vernietigd. Dit gebeurt bij het stoppen van de applicatie of bij het verwijderen van de servlet uit de container. In deze methode worden resources vrijgegeven (bijvoorbeeld, sluiten van verbindingen met databases of bestanden). Na de aanroep vandestroykan de container garbage collection uitvoeren voor de servlet-instantie.// java public void destroy() { // Resources vrijmaken // Bijvoorbeeld, verbindingen sluiten }
De levenscyclus kan worden weergegeven in tabelvorm:
| Methode | Wordt aangeroepen | Doel |
|---|---|---|
init() |
Eén keer na het maken van de servlet-instantie | Initialisatie, laden van resources |
service() |
Voor elke binnenkomende aanvraag | Verwerking van de aanvraag, genereren van antwoord |
destroy() |
Eén keer voordat de servlet wordt vernietigd | Resources vrijmaken, werk afronden |
De container garandeert dat init wordt aangeroepen vóór service, en dat destroy wordt aangeroepen na de laatste service-aanroep. De service-methoden kunnen parallel worden aangeroepen.