Servlet Redirect vs Forward

1. Prehľad

Príležitostný obslužný program požiadaviek na HTTP v našom servlete Java musí občas delegovať požiadavku na iný prostriedok. V týchto prípadoch môžeme žiadosť preposlať ďalej alebo ju presmerovať na iný zdroj.

Použijeme obidva mechanizmy a prediskutujeme rozdiely a najlepšie postupy každého z nich.

2. Maven závislosti

Najskôr pridajme závislosť Servlet Maven:

 javax.servlet javax.servlet-api 4.0.0 

Najnovšiu verziu nájdete tu.

3. Vpred

Poďme sa teraz pozrieť na to, ako postupovať vpred:

protected void doGet (HttpServletRequest req, HttpServletResponse resp) {RequestDispatcher dispatcher = getServletContext () .getRequestDispatcher ("/ forwarded"); dispečer.predal (dopyt, resp.); }

Chytáme sa toho RequestDispatcher odkaz z nadradeného servletu a nasmerujte ho na iný prostriedok servera.

Jednoducho povedané, toto postúpi požiadavku.

Keď klient podá žiadosť na server // localhost: 8081 / ahoj? meno = Dennis, táto logika pobeží a požiadavka bude preposlaná na „/ preposlané“.

4. Presmerovanie

Teraz, keď chápeme koncept preposielania, pozrime sa na rýchly úryvok pre presmerovanie:

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

Na presmerovanie tejto žiadosti na inú adresu URL používame pôvodný objekt odpovede: “/ presmerovaný “.

Keď klient podá žiadosť na server // localhost: 8081 / welcome? name = Dennis, požiadavka bude presmerovaná na // localhost: 8081 / presmerovaný.

Ak sa chcete dozvedieť viac informácií o presmerovaní v kontexte jari, pozrite si náš špecializovaný článok tu.

5. Rozdiely

Prešli sme parametrom „názov“S hodnotou v obidvoch prípadoch. Jednoducho povedané, preposlané požiadavky majú stále túto hodnotu, ale presmerované požiadavky nie.

Je to preto, že pri presmerovaní sa objekt požiadavky líši od pôvodného. Ak stále chceme tento parameter použiť, musíme ho uložiť do súboru HttpSession objekt.

Tu je zoznam hlavných rozdielov medzi presmerovaním servletu a presmerovaním:

Vpred:

  • Žiadosť bude ďalej spracovaná na strane servera
  • Klienta to ďalej neovplyvní, adresa URL v prehliadači zostane rovnaká
  • Objekty požiadavky a odpovede zostanú po preposlaní rovnakým objektom. Objekty rozsahu požiadaviek budú stále k dispozícii

Presmerovanie:

  • Žiadosť je presmerovaná na iný zdroj
  • Klientovi sa po presmerovaní zobrazí zmena adresy URL
  • Vytvorí sa nová požiadavka
  • Presmerovanie sa zvyčajne používa v rámci modelu vývoja webu Post / Redirect / Get

6. Záver

Preposielanie a presmerovanie sú o odosielaní používateľa do rôznych zdrojov, aj keď majú celkom odlišnú sémantiku.

Vyberať medzi nimi je jednoduché. Ak je požadovaný predchádzajúci rozsah alebo ak používateľ nemusí byť informovaný, aplikácia chce tiež vykonať internú akciu potom použite preposielanie.

Ak chcete zahodiť rozsah alebo nový obsah nie je spojený s pôvodnou požiadavkou - napríklad presmerovaním na prihlasovaciu stránku alebo vyplnením formulára - potom použite presmerovanie.

Ako vždy, ukážkový kód nájdete na GitHub.


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