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.