Servlet (Java)

En servlet er en Java -grænseflade, hvis implementering udvider funktionaliteten af ​​en server . En servlet interagerer med klienter gennem anmodning-svar-princippet.

Selvom servlets kan betjene enhver anmodning, bruges de almindeligvis til at udvide webservere . For sådanne applikationer definerer Java Servlet-teknologi HTTP-specifikke servlet-klasser.

Pakker javax.servletog javax.servlet.httpleverer grænseflader og klasser til at bygge servlets.

Den første servlet-specifikation blev oprettet af Sun Microsystems (version 1.0 blev færdiggjort i juni 1997 ). Siden version 2.3 er servlet-specifikationen blevet udviklet under vejledning af Java Community Process . JSR 53-standarden definerede både Servlet 2.3 og JavaServer Side 1.2-specifikationen. JSR 154 inkluderer Servlet 2.4 og 2.5 specifikationer. Den nuværende specifikation pr. 2. marts 2021 er Servlet 4.0 (beskrevet i JSR-369 ).

Tidslinje for Servlet API

Servlet API-tidslinje
Servlet API-version Frigøre Platform Større ændringer
Server 4.0 september 2017 JavaEE 8 HTTP/2 Server Push
Servlet 3.1 maj 2013  (engelsk) JavaEE7 JavaSE7 Ikke-blokerende I/O, understøttelse af ikke-standard protokoller over HTTP
Server 3.0 December 2009 Arkiveret 6. august 2011 på Wayback Machine JavaEE6, JavaSE6 Tilslutningsmuligheder, nem udvikling, asynkrone servlets, sikkerhed, filuploads
Server 2.5 September 2005 Arkiveret 9. juni 2008 på Wayback Machine JavaEE 5, J2SE 5.0 Kræver J2SE 5.0, annotationsunderstøttelse
Server 2.4 November 2003 Arkiveret 9. juni 2008 på Wayback Machine J2EE 1.4, J2SE 1.3 web.xml bruger XML Schema
Server 2.3 August 2001 Arkiveret 16. maj 2008 på Wayback Machine J2EE 1.3, J2SE 1.2 UdseendeFilter
Server 2.2 August 1999 Arkiveret 11. juni 2008 på Wayback Machine J2EE 1.2, J2SE 1.2 Bliver en del af J2EE , tilbyder uafhængige webapplikationer i .war - filer
Server 2.1 November 1998 Arkiveret 11. juni 2008 på Wayback Machine ikke specificeret Første officielle specifikation, tilføjet RequestDispatcher.ServletContext
Server 2.0 JDK 1.1 En del af Java Servlet Development Kit 2.0
Server 1.0 juni 1997

Servlets livscyklus

En servlets livscyklus består af følgende trin:

  1. Hvis der ikke er nogen servlet i beholderen.
    1. Servlet-klassen indlæses af containeren.
    2. Containeren opretter en forekomst af servletklassen.
    3. Containeren kalder init(). Denne metode initialiserer servlet'en og kaldes først, før servlet'en kan betjene anmodninger. I hele livscyklussen init()kaldes metoden kun én gang.
  2. Betjening af en kundes anmodning. Hver anmodning behandles i sin egen tråd. Containeren kalder metoden service()for hver anmodning. Denne metode bestemmer typen af ​​den indkommende anmodning og distribuerer den til den metode, der svarer til denne type til behandling af anmodningen. Servletudvikleren skal levere en implementering til disse metoder. Hvis der modtages en anmodning, hvor en metode ikke er implementeret, kaldes metoden for overordnet klasse og ender normalt med, at en fejl returneres til rekvirenten.
  3. Hvis containeren skal fjerne servlet'en, kalder den metoden destroy(), som dekommissionerer servlet'en. Ligesom metoden init()kaldes denne metode også én gang i hele servlet-cyklussen.

Eksempel

import java.io.IOException ; importer java.io.PrintWriter ; import javax.servlet.ServletException ; importer javax.servlet.http.HttpServlet ; import javax.servlet.http.HttpServletRequest ; import javax.servlet.http.HttpServletResponse ; import javax.servlet.http.HttpSession ; public class NewServlet udvider HttpServlet { @Override protected void doGet ( HttpServletRequest request , HttpServletResponse response ) kaster ServletException , IOException { // Streng parameter = anmodning . getParameter ( "parameter" ); // Start HTTP-session HttpSession- session = anmodning . getSession ( sand ); session . setAttribute ( "parameter" , parameter ); svar . setContentType ( "text/html;charset=UTF-8" ); PrintWriter ud = svar . getWriter (); prøv { ud . println ( "<html>" ); ud . println ( "<hoved>" ); ud . println ( "<title>Titel</title>" ); ud . println ( "</head>" ); ud . println ( "<body>" ); ud . println ( "<h1>Servlet-eksempel" + parameter + "</h1>" ); ud . println ( "</body>" ); ud . println ( "</html>" ); } endelig { ud . lukke (); } } @Override public String getServletInfo () { return "Servlet Eksempel)" ; } }

Se også

Links