Servlet átirányítás vs továbbítás

1. Áttekintés

Esetenként a Java Servlet kisalkalmazásunk kezdeti HTTP kéréskezelőjének át kell adnia a kérést egy másik erőforrásnak. Ezekben az esetekben tovább továbbíthatjuk a kérést, vagy átirányíthatjuk egy másik erőforrásra.

Mindkét mechanizmust felhasználjuk, és megvitatjuk az egyes különbségeket és bevált gyakorlatokat.

2. Maven-függőségek

Először adjuk hozzá a Servlet Maven függőséget:

 javax.servlet javax.servlet-api 4.0.0 

A legújabb verzió itt található.

3. Előre

Most ugorjunk be és nézzük meg, hogyan lehet egyszerű előrelépést tenni:

védett void doGet (HttpServletRequest req, HttpServletResponse ill) {RequestDispatcher diszpécser = getServletContext () .getRequestDispatcher ("/ továbbítva"); diszpécser.forward (req, ill); }

Megfogjuk RequestDispatcher hivatkozás a szülő Servletről, és irányítsa egy másik kiszolgáló erőforrásra.

Egyszerűen fogalmazva, ez továbbítja a kérést.

Amikor az ügyfél kérelmet nyújt be a // localhost: 8081 / hello? name = Dennis, ez a logika futni fog, és a kérés továbbításra kerül/ továbbítva“.

4. Átirányítás

Most, hogy megértettük a továbbítás fogalmát, vessünk egy pillantást az átirányítás gyors részletére:

védett void doGet (HttpServletRequest req, HttpServletResponse resp) {resp.sendRedirect (req.getContextPath () + "/ átirányítva"); } 

Eredeti válaszobjektumot használunk a kérelem átirányítására egy másik URL-re: “/ átirányítva ”.

Amikor az ügyfél kérelmet nyújt be a // localhost: 8081 / welcome? name = Dennis, a kérelem átirányításra kerül // localhost: 8081 / átirányítva.

Ha többet szeretne megtudni a tavasszal kapcsolatos átirányításokról, tekintse meg itt található külön cikkünket.

5. Különbségek

Átadtuk a “név”Mindkét esetben értékkel. Egyszerűen fogalmazva, a továbbított kérések továbbra is tartalmazzák ezt az értéket, az átirányított kérelmek azonban nem.

Ennek oka, hogy egy átirányítással a kérelem objektum eltér az eredetitől. Ha továbbra is ezt a paramétert akarjuk használni, akkor el kell mentenünk a HttpSession tárgy.

Az alábbiakban felsoroljuk a szervlet továbbítása és az átirányítás közötti főbb különbségeket:

Előre:

  • A kérelmet a szerver oldalon tovább feldolgozzuk
  • A továbbítás nem befolyásolja az ügyfelet, a böngészőben az URL ugyanaz marad
  • A kérés és a válasz objektumok ugyanazok maradnak az objektumok az átirányítás után. A kérelem hatókörű objektumok továbbra is elérhetők lesznek

Átirányítás:

  • A kérelmet egy másik erőforrásra irányítják át
  • Az ügyfél az átirányítás után látni fogja az URL változását
  • Új kérelem jön létre
  • Az átirányítást általában a Post / Redirect / Get webfejlesztési mintán belül használják

6. Következtetés

Az átirányítás és az átirányítás mind a felhasználó különböző erőforrásokba történő elküldéséről szól, bár szemantikájuk egészen más.

Ezek között válogatni egyszerű. Ha az előző hatókörre van szükség, vagy a felhasználót nem kell tájékoztatni, de az alkalmazás belső műveletet is szeretne végrehajtani majd használja az átirányítást.

A hatókör elvetése, vagy ha az új tartalom nincs társítva az eredeti kéréshez - például átirányítás egy bejelentkezési oldalra vagy űrlap elküldésének kitöltése - majd használja az átirányítást.

Mint mindig, a példakód megtalálható a GitHubon.


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