Preusmjeravanje servleta vs Naprijed

1. Pregled

Povremeno početni rukovatelj HTTP zahtjevima u našem Java Servletu mora delegirati zahtjev na drugi resurs. U tim slučajevima zahtjev možemo proslijediti dalje ili ga preusmjeriti na drugi resurs.

Upotrijebit ćemo oba mehanizma i raspravit ćemo razlike i najbolje prakse svakog od njih.

2. Ovisnosti Mavena

Prvo, dodajmo ovisnost Servlet Maven:

 javax.servlet javax.servlet-api 4.0.0 

Najnoviju verziju možete pronaći ovdje.

3. Naprijed

Krenimo sada odmah i pogledajmo kako napraviti jednostavno naprijed:

zaštićeni void doGet (HttpServletRequest req, HttpServletResponse resp) {RequestDispatcher dispečer = getServletContext () .getRequestDispatcher ("/ proslijeđen"); dispečer.naprijed (req, resp); }

Dohvatimo se RequestDispatcher referencu roditeljskog Servleta i usmjerite je na drugi resurs poslužitelja.

Jednostavno rečeno, ovo će proslijediti zahtjev.

Kad klijent podnese zahtjev // localhost: 8081 / hello? name = Dennis, ova logika će se pokrenuti i zahtjev će se proslijediti na “/ proslijeđeno“.

4. Preusmjeravanje

Sad kad razumijemo koncept prosljeđivanja, pogledajmo kratki isječak za preusmjeravanje:

zaštićeni void doGet (HttpServletRequest req, HttpServletResponse resp) {resp.sendRedirect (req.getContextPath () + "/ redirected"); } 

Izvorni objekt odgovora koristimo za preusmjeravanje ovog zahtjeva na drugi URL: “/ preusmjeren ”.

Kad klijent podnese zahtjev // localhost: 8081 / dobrodošli? ime = Dennis, zahtjev će biti preusmjeren na // localhost: 8081 / preusmjeren.

Da biste saznali više o obavljanju preusmjeravanja u kontekstu proljeća, pogledajte ovdje naš posvećeni članak.

5. Razlike

Prošli smo parametar „Ime"S vrijednošću u oba slučaja. Jednostavno rečeno, proslijeđeni zahtjevi i dalje nose ovu vrijednost, ali preusmjereni zahtjevi nemaju.

To je zato što se s preusmjeravanjem objekt zahtjeva razlikuje od izvornog. Ako i dalje želimo koristiti ovaj parametar, moramo ga spremiti u HttpSession objekt.

Evo popisa glavnih razlika između servleta naprijed i preusmjeravanja:

Naprijed:

  • Zahtjev će se dalje obrađivati ​​na strani poslužitelja
  • Prosljeđivanje ne utječe na klijenta, URL u pregledniku ostaje isti
  • Objekti zahtjeva i odgovora ostat će isti objekt nakon prosljeđivanja. Objekti opsega zahtjeva i dalje će biti dostupni

Preusmjeravanje:

  • Zahtjev je preusmjeren na drugi resurs
  • Klijent će vidjeti promjenu URL-a nakon preusmjeravanja
  • Stvara se novi zahtjev
  • Preusmjeravanje se obično koristi u obrascu Post / Redirect / Get web development

6. Zaključak

Prosljeđivanje i preusmjeravanje odnose se na slanje korisnika na različite resurse, iako imaju prilično različitu semantiku.

Odabir između njih je jednostavan. Ako je potreban prethodni opseg ili korisnik ne treba biti obaviješten, ali aplikacija također želi izvršiti internu radnju zatim koristite prosljeđivanje.

Da biste odbacili opseg ili ako novi sadržaj nije povezan s izvornim zahtjevom - kao što je preusmjeravanje na stranicu za prijavu ili popunjavanje predaje obrasca - zatim upotrijebite preusmjeravanje.

Kao i uvijek, primjer koda možete pronaći na GitHubu.