CodeGym /Java Course /Module 3 /Inleiding tot servlets

Inleiding tot servlets

Module 3
Niveau 12 , Les 0
Beschikbaar

1.1 interface-servlet

Vandaag starten we met een nieuw en interessant onderwerp - servlets . Het was de toevoeging van servlets aan Java die ertoe leidde dat Java de de facto standaard werd voor grote servertoepassingen. 80% van alle bedrijfssoftware ter wereld is geschreven in Java. En in China is alles 100%. Dus wat zijn servlets?

Een servlet is precies wat een Java-programma verandert in een webservice en waarmee het verzoeken van klanten kan verwerken. En het was zo...

In de jaren 90, direct na de komst van het World Wide Web, verschenen webclients (browsers) en webservers. Webservers verspreidden meestal eenvoudig het bestand dat ze hadden opgeslagen via internet: html-pagina's, scripts, afbeeldingen, enz.

Op een gegeven moment kwam iedereen tot de conclusie dat het nodig zou zijn om beide partijen slimmer te maken. JavaScript werd aan de HTML-pagina's toegevoegd en er werden plug-ins aan de servers toegevoegd - speciale scripts die werden aangeroepen als reactie op bepaalde verzoeken en die het gedrag van de server flexibeler en slimmer maakten.

Een servlet is dus zo'n Java-plug-in die is ingebouwd Java web-serveren waarmee deze Java-code kan uitvoeren wanneer daarom wordt gevraagd voor bepaalde pagina's. En deze Java-code, vertegenwoordigd door een klasse geërfd van de Servlet-klasse, deed al wat de ontwikkelaars van plan waren.

En zoals u al weet, is Tomcat de meest populaire Java-webserver . Overigens genoemd ter ere van de kat Tom uit de tekenfilm "Tom en Jerry".

Hoe werkt Tomcat samen met servlets? In feite is dit proces gestandaardiseerd en wordt het de levenscyclus van de servlet genoemd . Hierin is een servlet een laadbaar object en een webserver een servletcontainer .

Als de servlet nog niet is geladen , dan:

  1. De servletklasse wordt geladen door de container.
  2. De container maakt een instantie van de klasse (object) van de servlet.
  3. De container roept een methode aan init()op het servletobject. De methode wordt slechts eenmaal aangeroepen.

Standaard werkcyclus - onderhoud van een klantverzoek :

  • Elk verzoek wordt verwerkt in een aparte thread.
  • De container roept een methode aan service()op de servlet en geeft de objecten ServletRequest en ServletResponse daar door.
  • Om de servlet te beëindigen, wordt een methode aangeroepen destroy()op het servletobject. Het wordt maar één keer genoemd.

Er kunnen veel redenen zijn waarom een ​​servlet stopt:

  • De programmeur start de webserver opnieuw op, het is noodzakelijk om alle servlets correct af te sluiten.
  • De programmeur laadt een nieuwe versie van de servlet, de oude moet correct worden uitgeladen.
  • Enzovoort.

Onthoud het belangrijkste: de webserver en zijn servlets moeten maandenlang zonder storingen en herstarts werken en duizenden verzoeken per minuut verwerken. Daarom moet de code voor zowel het laden, werken als ontladen van een servlet altijd van zeer hoge kwaliteit zijn.

1.2 HttpServlet-klasse

De Servlet-klasse bestaat om te standaardiseren hoe een servlet en een container werken. Programmeurs werken niet rechtstreeks met deze klasse. Nou, ze werken zelden. De meest gebruikte klasse HttpServletis geërfd van Servlet.

Deze klasse heeft verschillende methoden die nuttig voor ons zullen zijn. Je zult ze vaak gebruiken:

Methode Beschrijving
1 init() Eenmaal aangeroepen wanneer de servlet is geladen
2 destroy() Eén keer aangeroepen wanneer de servlet wordt verwijderd
3 service(HttpRequest, HttpResponse) Opgeroepen voor elk nieuw verzoek aan de servlet
4 doGet(HttpRequest, HttpResponse) Opgeroepen voor elk nieuw GET-verzoek aan de servlet
5 doPost(HttpRequest, HttpResponse) Aangeroepen voor elk nieuw POST-verzoek aan de servlet
6 doHead(HttpRequest, HttpResponse) Opgeroepen voor elk nieuw HEAD-verzoek aan de servlet
7 doDelete(HttpRequest, HttpResponse) Opgeroepen voor elk nieuw DELETE-verzoek aan de servlet
8 doPut(HttpRequest, HttpResponse) Geroepen voor elk nieuw PUT-verzoek aan de servlet

De methoden init()en destroy()worden geërfd van de Servlet-klasse. Daarom, als u besluit ze in uw servlet te overschrijven, moet u hun implementatie ook vanuit de basisklasse aanroepen. Hiervoor wordt het commando gebruikt super.method name().

Servlet-voorbeeld:


public class FirstHttpServlet extends HttpServlet {
  
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        // Getting the parameter “secret” from request
        String secret = request.getParameter("secret");
 
        // Put parameter “secret” into Http-session
        HttpSession session = request.getSession(true);
        session.setAttribute("secret", secret);
 
        // Print HTML as response for browser
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Header</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet example "+ secret +"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}

1.3 service (HttpServletRequest, HttpServletResponse) methode

Als je de verwerking van een klantverzoek bekijkt vanuit het oogpunt van een servlet, dan zit het ongeveer zo.

Voor elk clientverzoek maakt de container (webserver) HttpServletRequesten objecten aan HttpServletResponseen roept vervolgens een methode aan service(HttpServletRequest request, HttpServletResponse response)op de overeenkomstige servlet. Deze objecten worden eraan doorgegeven zodat de methode de nodige gegevens kan halen uit requesten het resultaat van het werk in kan zetten response.

De methode service()heeft een standaard implementatie. Als het niet opnieuw wordt gedefinieerd, wordt het uitgevoerd. Dat is wat hij doet.

De methode service()bepaalt het HTTP-methodetype van het verzoek (GET, POST, ...) en roept de methode aan die overeenkomt met het verzoek.

Methode Beschrijving
1 service(HttpRequest, HttpResponse) Opgeroepen voor elk nieuw verzoek aan de servlet
2 doGet(HttpRequest, HttpResponse) Opgeroepen voor elk nieuw GET-verzoek aan de servlet
3 doPost(HttpRequest, HttpResponse) Aangeroepen voor elk nieuw POST-verzoek aan de servlet
4 doHead(HttpRequest, HttpResponse) Opgeroepen voor elk nieuw HEAD-verzoek aan de servlet
5 doDelete(HttpRequest, HttpResponse) Opgeroepen voor elk nieuw DELETE-verzoek aan de servlet
6 doPut(HttpRequest, HttpResponse) Geroepen voor elk nieuw PUT-verzoek aan de servlet

In je klas kun je ofwel een methode herdefiniëren service(), ofwel deze met rust laten, maar dan methoden doGet(), doPost(), ... herdefiniëren als dat nodig is.

Opmerkingen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION