Introduksjon til Java Servlets

1. Oversikt

I denne artikkelen vil vi se på et kjerneaspekt av webutvikling i Java - Servlets.

2. Servetten og beholderen

Enkelt sagt, en Servlet er en klasse som håndterer forespørsler, behandler dem og svarer tilbake med et svar.

For eksempel kan vi bruke en Servlet til å samle inndata fra en bruker gjennom et HTML-skjema, søke poster fra en database og opprette websider dynamisk.

Servlets er under kontroll av et annet Java-program kalt a Servletbeholder. Når et program som kjører på en webserver mottar en forespørsel, serveren sender forespørselen til Servlet Container - som igjen sender den til målet Servlet.

3. Maven avhengigheter

For å legge til Servlet-støtte i nettappen vår, javax.servlet-api avhengighet kreves:

 javax.servlet javax.servlet-api 3.1.0 

Den siste avhengighet av maven finner du her.

Selvfølgelig må vi også konfigurere en Servlet-container for å distribuere appen vår til; dette er et godt sted å begynne på hvordan du distribuerer en WAR på Tomcat.

4. Servlets livssyklus

La oss gå gjennom settet med metoder som definerer livssyklusen til en Servlet.

4.1. i det()

De i det metoden er designet for å kun kalles en gang. Hvis en forekomst av servletten ikke eksisterer, kan nettbeholderen:

  1. Laster inn servletklassen
  2. Oppretter en forekomst av servletklassen
  3. Initialiserer det ved å ringe i det metode

De i det metoden må fullføres før servletten kan motta forespørsler. Servletbeholderen kan ikke sette servletten i bruk hvis den i det metoden enten kaster en ServletException eller kommer ikke tilbake innen en tidsperiode som er definert av webserveren.

public void init () kaster ServletException {// Initialiseringskode som å sette opp database osv ....}

4.2. service()

Denne metoden kalles bare etter servlets i det() metoden er fullført.

Containeren kaller service() metode for å håndtere forespørsler som kommer fra klienten, tolker HTTP-forespørselstypen (, POST, SETTE, SLETT, osv.) og samtaler doGet, doPost, doPut, slettosv. metoder etter behov.

offentlig ugyldighetstjeneste (ServletRequest-forespørsel, ServletResponse-svar) kaster ServletException, IOException {// ...}

4.3. ødelegge()

Kalt av Servlet Container for å ta Servlet ut av drift.

Denne metoden kalles bare en gang alle tråder i servleten service metoden har avsluttet eller etter at en tidsavbruddsperiode har gått. Etter at containeren kaller denne metoden, vil den ikke ringe service metoden igjen på Servlet.

offentlig tomrom ødelegge () {//}

5. Eksempel på Servlet

La oss nå sette opp et fullstendig eksempel av håndtering av informasjon ved hjelp av et skjema.

For å starte, la oss definere en servlet med en kartlegging / beregneServlet som vil fange informasjonen POSTET av skjemaet og returnere resultatet ved hjelp av en RequestDispatcher:

@WebServlet (name = "FormServlet", urlPatterns = "/ CalcServlet") offentlig klasse FormServlet utvider HttpServlet {@ Override-beskyttet ugyldig doPost (HttpServletRequest-forespørsel, HttpServletResponse-svar) kaster ServletException, IOException {String høyde = forespørsel " ; Strengvekt = request.getParameter ("vekt"); prøv {dobbelt bmi = beregneBMI (Double.parseDouble (vekt), Double.parseDouble (høyde)); request.setAttribute ("bmi", bmi); respons.setHeader ("Test", "Suksess"); respons.setHeader ("BMI", String.valueOf (bmi)); RequestDispatcher dispatcher = request.getRequestDispatcher ("index.jsp"); dispatcher.forward (forespørsel, svar); } fange (Unntak e) {respons.sendRedirect ("index.jsp"); }} privat Dobbelt beregneBMI (Dobbel vekt, Dobbel høyde) {returvekt / (høyde * høyde); }}

Som vist ovenfor kommenterte klasser med @WebServlet må utvide javax.servlet.http.HttpServlet klasse. Det er viktig å merke seg det @WebServlet merknader er bare tilgjengelig fra Java EE 6 og utover.

De @WebServlet merknader behandles av containeren ved distribusjonstidspunktet, og den tilsvarende servletten gjøres tilgjengelig ved de angitte URL-mønstrene. Det er verdt å merke seg at ved å bruke merknaden for å definere URL-mønstre, kan vi unngå å bruke XML-distribusjonsbeskrivelse med navnet web.xml for vår Servlet-kartlegging.

Hvis vi ønsker å kartlegge Servlet uten kommentar, kan vi bruke det tradisjonelle web.xml i stedet:

  FormServlet com.root.FormServlet FormServlet / CalcServlet 

Deretter la oss lage en grunnleggende HTML skjema:

Din vekt (kg):
Din høyde (m):

$ {bmi}

Til slutt - for å sikre at alt fungerer som forventet, la oss også skrive en rask test:

offentlig klasse FormServletLiveTest {@Test offentlig ugyldig nårPostRequestUsingHttpClient_thenCorrect () kaster unntak {HttpClient-klient = ny DefaultHttpClient (); HttpPost-metoden = ny HttpPost ("// localhost: 8080 / calcServlet"); Liste nvps = ny ArrayList (); nvps.add (ny BasicNameValuePair ("høyde", String.valueOf (2))); nvps.add (ny BasicNameValuePair ("vekt", String.valueOf (80))); method.setEntity (ny UrlEncodedFormEntity (nvps)); HttpResponse httpResponse = client.execute (metode); assertEquals ("Suksess", httpResponse .getHeaders ("Test") [0] .getValue ()); assertEquals ("20.0", httpResponse .getHeaders ("BMI") [0] .getValue ()); }}

6. Servlet, HttpServlet og JSP

Det er viktig å forstå det Servlet-teknologien er ikke begrenset til HTTP-protokollen.

I praksis er det nesten alltid, men Servlet er et generisk grensesnitt og HttpServlet er en utvidelse av det grensesnittet - legger til HTTP-spesifikk støtte - for eksempel doGet og doPost, etc.

Til slutt er Servlet-teknologien også den viktigste driveren til en rekke andre webteknologier som JSP - JavaServer Pages, Spring MVC, etc.

7. Konklusjon

I denne raske artikkelen introduserte vi grunnlaget for Servlets i en Java-webapplikasjon.

Eksempelprosjektet kan lastes ned og kjøres som det er som et GitHub-prosjekt.


$config[zx-auto] not found$config[zx-overlay] not found