Különbség a request.getSession () és a request.getSession (true) között

1. Áttekintés

Ebben a gyors bemutatóban meglátjuk a különbséget a hívás között HttpServletRequest #getSession () és HttpServletRequest #getSession (logikai érték).

2. Mi a különbség?

A getSession () módszerek és getSession (logikai érték) nagyon hasonlóak. Van azonban egy kis különbség. A különbség az, hogy létre kell-e hozni a munkamenetet, ha még nem létezik.

Hívás getSession () és getSession (true) funkcionálisan azonosak: töltse le az aktuális munkamenetet, és ha még nem létezik, akkor hozza létre.

Hívás getSession (hamis), bár beolvassa az aktuális munkamenetet, és ha még nem létezik, akkor visszatér nulla. Többek között ez hasznos, ha azt akarjuk kérdezni, hogy létezik-e a munkamenet.

3. Példa

Ebben a példában ezt a forgatókönyvet vesszük figyelembe:

  • a felhasználó beírja a Felhasználói azonosító és bejelentkezik az alkalmazásba
  • a felhasználó ekkor beírja a felhasználónév és kor és frissíteni kívánja a bejelentkezett felhasználó ezen részleteit

A felhasználói értékeket a munkamenetben tároljuk, hogy megértsük a használatát HttpServletRequest # getSession () és HttpServletRequest # getSession (logikai).

Először hozzunk létre egy servletet, ahol használjuk HttpServletRequest # getSession () annak doGet () módszer:

védett void doGet (HttpServletRequest kérés, HttpServletResponse válasz) dobja a ServletException, IOException {HttpSession session = request.getSession (); session.setAttribute ("userId", request.getParameter ("userId")); } 

Ezen a ponton a szervlet lekéri a meglévő munkamenetet, vagy újat hoz létre a bejelentkezett felhasználó számára, ha még nem létezik.

Ezután beállítjuk a felhasználónév attribútum a munkamenetben.

Mivel szeretnénk frissíteni a felhasználó adatait az adott felhasználói azonosítóhoz, ugyanazt a munkamenetet szeretnénk, és nem szeretnénk új munkamenetet létrehozni a felhasználó nevének tárolására.

Tehát most fogjuk használni HttpServletRequest # getSession (logikai érték) val vel hamis érték:

védett void doGet (HttpServletRequest kérés, HttpServletResponse válasz) dobja a ServletException, IOException {HttpSession session = request.getSession (false); if (session! = null) {session.setAttribute ("felhasználónév", request.getParameter ("felhasználónév")); }}

Ennek eredményeként a felhasználónév attribútum ugyanazon a munkameneten, mint a Felhasználói azonosító korábban be volt állítva.

4. Következtetés

Ebben az oktatóanyagban elmagyaráztuk a különbséget HttpServletRequest # getSession () és HttpServletRequest # getSession (logikai érték) mód.

A teljes példa a GitHub oldalon érhető el.