Servlet omdirigering vs fremad

1. Oversigt

Lejlighedsvis skal den oprindelige HTTP-anmodningshåndterer i vores Java Servlet delegere anmodningen til en anden ressource. I disse tilfælde kan vi enten videresende anmodningen yderligere eller omdirigere den til en anden ressource.

Vi bruger begge mekanismer og diskuterer forskelle og bedste praksis for hver.

2. Maven-afhængigheder

Lad os først tilføje Servlet Maven-afhængighed:

 javax.servlet javax.servlet-api 4.0.0 

Den seneste version kan findes her.

3. Fremad

Lad os nu springe lige ind og se, hvordan man gør en simpel fremad:

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

Vi får fat i RequestDispatcher reference fra overordnet Servlet og peg den til en anden serverressource.

Kort sagt, dette videresender anmodningen.

Når en klient indsender en anmodning til // localhost: 8081 / hej? navn = Dennis, denne logik kører, og anmodningen videresendes til “/ videresendt“.

4. Omdiriger

Nu hvor vi forstår begrebet videresendelse, lad os se på et hurtigt uddrag til omdirigering:

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

Vi bruger det originale svarobjekt til at omdirigere denne anmodning til en anden URL: “/ omdirigeret ”.

Når en klient indsender en anmodning til // localhost: 8081 / welcome? name = Dennis, vil anmodningen blive omdirigeret til // localhost: 8081 / omdirigeret.

For at finde ud af mere om at foretage omdirigeringer i forbindelse med foråret, se vores dedikerede artikel her.

5. Forskelle

Vi passerede parameteren “navn”Med en værdi i begge tilfælde. Kort sagt, fremsendte anmodninger bærer stadig denne værdi, men omdirigerede anmodninger gør det ikke.

Dette skyldes, at anmodningsobjektet med en omdirigering adskiller sig fra det oprindelige. Hvis vi stadig vil bruge denne parameter, skal vi gemme den i HttpSession objekt.

Her er en liste over store forskelle mellem servlet fremad og omdirigering:

Frem:

  • Anmodningen behandles yderligere på serversiden
  • Klienten påvirkes ikke af videresendelse, URL i en browser forbliver den samme
  • Forespørgsel og svarobjekter forbliver det samme objekt efter videresendelse. Objekter med anmodningsomfang vil stadig være tilgængelige

Omdiriger:

  • Anmodningen omdirigeres til en anden ressource
  • Klienten vil se URL-skiftet efter omdirigering
  • En ny anmodning oprettes
  • Omdirigering bruges normalt inden for Post / Redirect / Get webudviklingsmønster

6. Konklusion

Videresendelse og omdirigering handler begge om at sende en bruger til forskellige ressourcer, skønt de har en helt anden semantik.

At vælge mellem disse er enkelt. Hvis det forrige omfang kræves, eller hvis brugeren ikke behøver at blive informeret, men applikationen ønsker også at udføre en intern handling brug derefter videresendelse.

For at kassere omfanget, eller hvis det nye indhold ikke er knyttet til den oprindelige anmodning - såsom en omdirigering til en login-side eller udfyldelse af en formularindsendelse - brug derefter omdirigering.

Som altid kan eksempelkoden findes på GitHub.


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