Servlet-omdirigering vs fremover

1. Oversikt

Noen ganger må den første HTTP Request Handler i Java Servlet delegere forespørselen til en annen ressurs. I disse tilfellene kan vi enten sende forespørselen videre eller omdirigere den til en annen ressurs.

Vi bruker begge mekanismene og diskuterer forskjeller og beste praksis for hver.

2. Maven-avhengigheter

La oss først legge til Servlet Maven-avhengighet:

 javax.servlet javax.servlet-api 4.0.0 

Den siste versjonen finner du her.

3. Fremover

La oss nå hoppe rett inn og se på hvordan du gjør en enkel fremover:

beskyttet ugyldig doGet (HttpServletRequest req, HttpServletResponse resp) {RequestDispatcher dispatcher = getServletContext () .getRequestDispatcher ("/ forwarded"); dispatcher.forward (req, resp); }

Vi får tak i RequestDispatcher referanse fra overordnet Servlet og peker den til en annen serverressurs.

Enkelt sagt, dette vil videresende forespørselen.

Når en klient sender inn en forespørsel til // localhost: 8081 / hallo? navn = Dennisvil denne logikken kjøre og forespørselen vil bli videresendt til “/ videresendt“.

4. Viderekobling

Nå som vi forstår begrepet videresending, la oss ta en titt på et raskt utdrag for viderekobling:

beskyttet ugyldig doGet (HttpServletRequest req, HttpServletResponse resp) {resp.sendRedirect (req.getContextPath () + "/ redirected"); } 

Vi bruker det opprinnelige svarobjektet for å omdirigere denne forespørselen til en annen URL: “/ omdirigert ”.

Når en klient sender inn en forespørsel til // localhost: 8081 / velkommen? navn = Dennis, vil forespørselen bli omdirigert til // localhost: 8081 / omdirigert.

For å finne ut mer om å gjøre viderekoblinger i sammenheng med våren, ta en titt på vår dedikerte artikkel her.

5. Forskjeller

Vi passerte parameteren “Navn”Med en verdi i begge tilfeller. Enkelt sagt, videresendte forespørsler har fortsatt denne verdien, men viderekoblede forespørsler gjør det ikke.

Dette skyldes at forespørselsobjektet med en omdirigering er forskjellig fra det opprinnelige. Hvis vi fremdeles vil bruke denne parameteren, må vi lagre den i HttpSession gjenstand.

Her er en liste over store forskjeller mellom servlet frem og omdirigering:

Framover:

  • Forespørselen vil bli behandlet videre på serversiden
  • Klienten påvirkes ikke av videresending, URL i en nettleser forblir den samme
  • Forespørsel og svarobjekter forblir det samme objektet etter videresending. Objekter med forespørsel er fortsatt tilgjengelige

Viderekobling:

  • Forespørselen blir omdirigert til en annen ressurs
  • Klienten vil se URL-endringen etter omdirigering
  • En ny forespørsel opprettes
  • Viderekobling brukes normalt innen mønster for innlegg / omdirigering / hent webutvikling

6. Konklusjon

Videresending og viderekobling handler begge om å sende en bruker til forskjellige ressurser, selv om de har ganske forskjellige semantikk.

Å velge mellom disse er enkelt. Hvis det forrige omfanget kreves, eller brukeren ikke trenger å bli informert, men applikasjonen vil også utføre en intern handling bruk deretter videresending.

For å forkaste omfanget eller hvis det nye innholdet ikke er knyttet til den opprinnelige forespørselen - for eksempel en viderekobling til en påloggingsside eller fullføring av skjemainnsending - bruk deretter omdirigering.

Som alltid kan eksempelkoden bli funnet på GitHub.


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