CodeGym /Java kursus /Modul 3 /Introduktion til Servlets

Introduktion til Servlets

Modul 3
Niveau , Lektie
Ledig

1.1 interface Servlet

I dag starter vi en ny og interessant emneservlet . Det var tilføjelsen af ​​servlets til Java, der førte til, at Java var de facto-standarden for store serverapplikationer. 80 % af al virksomhedssoftware i verden er skrevet i Java. Og i Kina er alt 100%. Så hvad er servlets?

En servlet er præcis det, der forvandler et Java-program til en webtjeneste og gør det muligt for det at behandle anmodninger fra klienter. Og det var sådan her...

I 90'erne, umiddelbart efter fremkomsten af ​​World Wide Web, dukkede webklienter (browsere) og webservere op. Webservere distribuerede normalt blot den fil, de havde gemt over internettet: html-sider, scripts, billeder osv.

På et tidspunkt kom alle frem til, at det ville være nødvendigt at gøre begge sider klogere. JavaScript blev tilføjet til HTML-siderne, og plugins blev tilføjet til serverne – specielle scripts, der blev kaldt som svar på bestemte anmodninger og gjorde serverens adfærd mere fleksibel og smartere.

en servlet er sådan et Java-plugin , der var indbygget i Java web-serverog tillod det at udføre Java-kode, når det blev anmodet om det for bestemte sider. Og allerede denne Java-kode, repræsenteret af en klasse arvet fra Servlet-klassen, gjorde, hvad dens udviklere havde til hensigt.

Og som du allerede ved, er den mest populære Java-webserver Tomcat . Opkaldt i øvrigt til ære for katten Tom fra tegnefilmen "Tom og Jerry".

Hvordan interagerer Tomcat med servlets? Faktisk er denne proces standardiseret og kaldes servlets livscyklus . I den er en servlet et indlæst objekt, og en webserver er en servletbeholder .

Hvis servlet'en endnu ikke er blevet indlæst , så:

  1. Servlet-klassen indlæses af containeren.
  2. Containeren opretter en forekomst af klassen (objektet) af servlet'en.
  3. Containeren kalder en metode init()på servlet-objektet. Metoden kaldes kun én gang.

Standard arbejdscyklus - servicering af en kundeanmodning :

  • Hver anmodning behandles i en separat tråd.
  • Containeren kalder en metode service()på servlet'en og sender ServletRequest- og ServletResponse-objekterne dertil.
  • For at afslutte servlet'en kaldes en metode destroy()på servlet-objektet. Det kaldes kun én gang.

Der kan være mange årsager til, at en servlet afsluttes:

  • Programmøren genstarter webserveren, det er nødvendigt at lukke alle servlets ned.
  • Programmøren indlæser en ny version af servlet'en, den gamle skal aflæses korrekt.
  • Og så videre.

Husk det vigtigste: webserveren og dens servlets skal fungere uden fejl og genstarte i flere måneder og betjene tusindvis af anmodninger i minuttet. Derfor bør koden for både indlæsning, og arbejde og aflæsning af en servlet altid skrives af meget høj kvalitet.

1.2 HttpServlet klasse

Servlet-klassen eksisterer for at standardisere, hvordan en servlet og en container fungerer. Programmører arbejder ikke direkte med denne klasse. Nå, de virker sjældent. Den mest brugte klasse HttpServleter arvet fra Servlet.

Denne klasse har flere metoder, som vil være nyttige for os. Du vil ofte bruge dem:

Metode Beskrivelse
1 init() Kaldes én gang, når servlet er indlæst
2 destroy() Kaldes én gang, når servletten er aflæst
3 service(HttpRequest, HttpResponse) Kaldes for hver ny anmodning til servlet
4 doGet(HttpRequest, HttpResponse) Kaldes for hver ny GET-anmodning til servlet'en
5 doPost(HttpRequest, HttpResponse) Kaldes for hver ny POST-anmodning til servlet'en
6 doHead(HttpRequest, HttpResponse) Kaldes for hver ny HEAD-anmodning til servlet
7 doDelete(HttpRequest, HttpResponse) Kaldes for hver ny DELETE-anmodning til servlet'en
8 doPut(HttpRequest, HttpResponse) Kaldes for hver ny PUT-anmodning til servlet'en

Metoderne init()og destroy()er arvet fra Servlet-klassen. Derfor, hvis du beslutter dig for at tilsidesætte dem i din servlet, skal du også kalde deres implementering fra basisklassen. Kommandoen bruges til dette super.method name().

Servlet eksempel:


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) metode

Hvis du ser på behandlingen af ​​en klientanmodning fra en servlets synspunkt, så er tingene noget som dette.

HttpServletRequestFor hver klientanmodning opretter og objekter containeren (webserveren) HttpServletResponseog kalder derefter en metode service(HttpServletRequest request, HttpServletResponse response)på den tilsvarende servlet. Disse objekter videregives til den, så metoden kan tage de nødvendige data fra requestog sætte resultatet af arbejdet ind i response.

Metoden service()har en standardimplementering. Hvis det ikke omdefineres, vil det blive udført. Det er det, han gør.

Metoden service()bestemmer HTTP-metodetypen ud fra anmodningen (GET, POST, ...) og kalder den metode, der svarer til anmodningen.

Metode Beskrivelse
1 service(HttpRequest, HttpResponse) Kaldes for hver ny anmodning til servlet
2 doGet(HttpRequest, HttpResponse) Kaldes for hver ny GET-anmodning til servlet'en
3 doPost(HttpRequest, HttpResponse) Kaldes for hver ny POST-anmodning til servlet'en
4 doHead(HttpRequest, HttpResponse) Kaldes for hver ny HEAD-anmodning til servlet
5 doDelete(HttpRequest, HttpResponse) Kaldes for hver ny DELETE-anmodning til servlet'en
6 doPut(HttpRequest, HttpResponse) Kaldes for hver ny PUT-anmodning til servlet'en

I din klasse kan du enten omdefinere en metode service(), eller lade den være, men derefter omdefinere metoder doGet(), doPost(), ... efter behov.

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