Forskellen mellem request.getSession () og request.getSession (true)

1. Oversigt

I denne hurtige vejledning ser vi forskellen mellem at ringe HttpServletRequest #getSession () og HttpServletRequest #getSession (boolsk).

2. Hvad er forskellen?

Metoderne getSession () og getSession (boolsk) er meget ens. Der er dog en lille forskel. Forskellen er, om sessionen skal oprettes, hvis den ikke allerede findes.

Ringer getSession () og getSession (sand) er funktionelt de samme: Hent den aktuelle session, og hvis den ikke findes endnu, skal du oprette den.

Ringer getSession (falsk)henter dog den aktuelle session, og hvis en ikke findes endnu, vender tilbage nul. Dette er blandt andet praktisk, når vi vil spørge, om sessionen eksisterer.

3. Eksempel

I dette eksempel overvejer vi dette scenarie:

  • brugeren går ind i bruger ID og logger på applikationen
  • derefter går brugeren ind i brugernavn og alder og ønsker at opdatere disse detaljer til den loggede bruger

Vi gemmer brugerværdierne i sessionen for at forstå brugen af HttpServletRequest # getSession () og HttpServletRequest # getSession (boolsk).

Lad os først oprette en servlet, hvor vi bruger HttpServletRequest # getSession () i dets doGet () metode:

beskyttet ugyldigt doGet (HttpServletRequest anmodning, HttpServletResponse svar) kaster ServletException, IOException {HttpSession session = request.getSession (); session.setAttribute ("userId", request.getParameter ("userId")); } 

På dette tidspunkt henter servlet den eksisterende session eller opretter en ny til den indloggede bruger, hvis den ikke findes.

Derefter indstiller vi brugernavn attribut i sessionen.

Da vi vil opdatere detaljerne om brugeren for det respektive bruger-id, vil vi have den samme session og ønsker ikke at oprette en ny session til at gemme brugernavnet.

Så nu vil vi bruge HttpServletRequest # getSession (boolsk) med falsk værdi:

beskyttet ugyldigt doGet (HttpServletRequest anmodning, HttpServletResponse svar) kaster ServletException, IOException {HttpSession session = request.getSession (false); hvis (session! = null) {session.setAttribute ("brugernavn", request.getParameter ("brugernavn")); }}

Dette vil resultere i indstilling af brugernavn attribut på den samme session, som bruger ID var tidligere indstillet.

4. Konklusion

I denne vejledning har vi forklaret forskellen mellem HttpServletRequest # getSession () og HttpServletRequest # getSession (boolsk) metoder.

Det komplette eksempel er tilgængeligt på GitHub.