Håndtering av informasjonskapsler og en økt i en Java Servlet

1. Oversikt

I denne opplæringen vil vi dekke håndtering av informasjonskapsler og økter i Java ved hjelp av Servlets.

I tillegg vil vi kort beskrive hva en informasjonskapsel er, og utforske noen eksempler på eksempler på bruk av den.

2. Grunnleggende informasjonskapsler

For å si det enkelt, en informasjonskapsel er et lite stykke data lagret på klientsiden som serverne bruker når de kommuniserer med klienter.

De er vant til å identifisere en klient når du sender en etterfølgende forespørsel. De kan også brukes til å overføre data fra en servlet til en annen.

For mer informasjon, se denne artikkelen.

2.1. Lag en informasjonskapsel

De Kjeks klasse er definert ijavax.servlet.http pakke.

For å sende det til klienten, må vi lag en og legg den til svaret:

Cookie uiColorCookie = ny Cookie ("farge", "rød"); response.addCookie (uiColorCookie); 

API-en er imidlertid mye bredere - la oss utforske det.

2.2. Angi utløpsdatoen for informasjonskapsel

Vi kan angi maks alder (med en metode maxAge (int)) som definerer hvor mange sekunder en gitt informasjonskapsel skal være gyldig i:

uiColorCookie.setMaxAge (60 * 60); 

Vi setter en maksimal alder til en time. Etter denne tiden kan ikke informasjonskapselen brukes av en klient (nettleser) når du sender en forespørsel, og den bør også fjernes fra nettleserens cache.

2.3. Angi informasjonskapseldomenet

En annen nyttig metode i Kjeks API er setDomain (streng).

Dette lar oss spesifisere domenenavn som det skal leveres av klienten. Det kommer også an på om vi spesifiserer domenenavn eksplisitt eller ikke.

La oss angi domenet for en informasjonskapsel:

uiColorCookie.setDomain ("eksempel.com");

Cookien vil bli levert til hver forespørsel fra eksempel.com og dets underdomener.

Hvis vi ikke spesifiserer et domene eksplisitt, blir det satt til domenenavnetsom skapte en informasjonskapsel.

For eksempel hvis vi lager en informasjonskapsel fra eksempel.com og la domenenavnet være tomt, så blir det levert til www.eksempel.com (uten underdomener).

Sammen med et domenenavn kan vi også spesifisere en bane. La oss se på det neste.

2.4. Angi informasjonskapselbanen

Stien angir hvor en informasjonskapsel skal leveres.

Hvis vi spesifiserer en sti eksplisitt, så a Kjeks vil bli levert til den angitte URL-en og alle underkataloger:

uiColorCookie.setPath ("/ welcomeUser");

Implisitt settes den til URL-en som opprettet en informasjonskapsel og alle underkataloger.

La oss nå fokusere på hvordan vi kan hente verdiene deres i en Servlet.

2.5. Les informasjonskapsler i Servlet

Informasjonskapsler legges til forespørselen av klienten. Klienten sjekker parametrene sine og bestemmer om den kan levere den til gjeldende URL.

Vi kan få alle informasjonskapsler ved å ringe getCookies () på forespørsel (HttpServletRequest) overført til Servlet.

Vi kan gjenta gjennom denne matrisen og søke etter den vi trenger, for eksempel ved å sammenligne navnene deres:

offentlig Valgfri readCookie (strengnøkkel) {return Arrays.stream (request.getCookies ()) .filter (c -> key.equals (c.getName ())) .map (Cookie :: getValue) .findAny (); }

2.6. Fjern en informasjonskapsel

Tilfjerne en informasjonskapsel fra en nettleser, må vi legge til en ny i svaret med samme navn, men med en maxAlder verdi satt til 0:

Cookie-brukernavnCookieRemove = ny informasjonskapsel ("brukernavn", ""); userNameCookieRemove.setMaxAge (0); response.addCookie (userNameCookieRemove);

Et eksempel på en brukstilfelle for fjerning av informasjonskapsler er en brukerlogging - vi kan trenge å fjerne noen data som ble lagret for en aktiv brukersession.

Nå vet vi hvordan vi kan håndtere informasjonskapsler i en Servlet.

Deretter dekker vi et annet viktig objekt som vi ofte får tilgang til fra en Servlet - a Økt gjenstand.

3. HttpSession Gjenstand

De HttpSession er et annet alternativ for lagring av brukerrelaterte data på tvers av forskjellige forespørsler. En økt er en server-lagring som inneholder kontekstuelle data.

Data deles ikke mellom forskjellige øktobjekter (klienten kan bare få tilgang til data fra økten sin). Den inneholder også nøkkelverdipar, men i forhold til en informasjonskapsel kan en økt inneholde objekt som en verdi. Lagringsimplementeringsmekanismen er serveravhengig.

En økt matches med en klient av en informasjonskapsel eller forespørselsparametere. Mer info finner du her.

3.1. Få en økt

Vi kan få en HttpSession rett fra en forespørsel:

HttpSession session = request.getSession (); 

Ovennevnte kode vil opprette en ny økt i tilfelle den ikke eksisterer. Vi kan oppnå det samme ved å ringe:

request.getSession (true)

I tilfelle vi bare ønsker å få tak i eksisterende økt og ikke opprette en ny, må vi bruke:

request.getSession (false) 

Hvis vi får tilgang til JSP-siden for første gang, blir en ny økt opprettet som standard. Vi kan deaktivere denne oppførselen ved å stille inn økt tilskrive falsk:

I de fleste tilfeller bruker en webserver informasjonskapsler for øktbehandling. Når et øktobjekt opprettes, oppretter en server en informasjonskapsel med JSESSIONID nøkkel og verdi som identifiserer en økt.

3.2. Økt Attributter

Sessionsobjektet gir en rekke metoder for å få tilgang til (opprette, lese, modifisere, fjerne) attributter opprettet for en gitt brukerøkt:

  • setAttribute (streng, objekt) som oppretter eller erstatter et sesjonsattributt med en nøkkel og en ny verdi
  • getAttribute (streng) som leser en attributtverdi med et gitt navn (nøkkel)
  • removeAttribute (streng) som fjerner et attributt med et gitt navn

Vi kan også enkelt sjekke allerede eksisterende øktattributter ved å ringe getAttributeNames ().

Som vi allerede nevnte, kunne vi hente et øktobjekt fra en forespørsel. Når vi allerede har det, kan vi raskt utføre metoder som er nevnt ovenfor.

Vi kan lage et attributt:

HttpSession session = request.getSession (); session.setAttribute ("attributeKey", "Sample Value"); 

Attributtverdien kan fås ved hjelp av nøkkelen (navn):

session.getAttribute ("attributeKey"); 

Vi kan fjerne et attributt når vi ikke trenger det lenger:

session.removeAttribute ("attributtKey"); 

Et kjent brukstilfelle for en brukersession er å ugyldiggjøre hele data den lagrer når en bruker logger seg ut fra nettstedet vårt. Sessionsobjektet gir en løsning på det:

session.invalidate (); 

Denne metoden fjerner hele økten fra webserveren, slik at vi ikke får tilgang til attributter fra den lenger.

HttpSession objektet har flere metoder, men den vi nevnte er den vanligste.

4. Konklusjon

I denne artikkelen dekket vi to mekanismer som lar oss lagre brukerdata mellom påfølgende forespørsler til serveren - informasjonskapselen og økten.

Husk at HTTP-protokollen er statsløs, og det er derfor et must å opprettholde tilstanden på tvers av forespørsler.

Som alltid er kodebiter tilgjengelig på Github.


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