Beans en het session object

In deze tutorial behandelen we Beans en het Session object. Het Session object is een object dat per gebruiker dezelfde waarde behoudt. In dit object kan je klassen steken, deze worden dan per pagina geserialiseerd en gedeserialiseerd zodat deze kan bijgehouden worden. Om dat van de jsp naar de servlet te brengen of omgekeerd kan men dus gebruik maken van het session object. Hierin gaan we dan een Bean steken.

Een Bean wordt gebruikt om verschillende object in te bewaren. We zouden dus een Bean kunnen maken voor ons dobbelspel waarin twee objecten zitten van het type int:

public class DobbelSpelBean implements Serializable {
    private int dobbel1;
    private int dobbel2;
}

Voor beide integers moeten we een getter en een setter maken zodat we ze kunnen benaderen binnen de jsp.
En vervolgens passen we onze servlet ook nog aan, zodat deze de gegevens in de Bean steekt:

public class DobbelServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        int eersteDobbel = (int)((Math.random()*6)+1);
        int tweedeDobbel = (int)((Math.random()*6)+1);

        HttpSession session = request.getSession();
        DobbelSpelBean dobbelspelbean = ((DobbelSpelBean)session.getAttribute("dobbelSpelBean"));

        dobbelspelbean.setDobbel1(eersteDobbel);
        dobbelspelbean.setDobbel2(tweedeDobbel);
    }
}

Hier zie je dat de data niet lelijk wordt weggeschreven naar een html-pagina maar dat deze wordt bewaard in de Bean. De Bean wordt opgevraagd vanuit het session object. Er wordt gezocht naar een attribuut met de naam dobbelSpelBean, als deze (nog) niet bestaat zal deze worden aangemaakt, anders stuurt het session object de bestaande terug.

Op zichzelf doet dit natuurlijk niet veel. Daarom moeten we een jsp-pagina maken die deze inhoud weergeeft:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="dobbelSpelBean" class="beans.DobbelSpelBean" scope="session" />
<html>
  <head><title>Simple jsp page</title></head>
  <body>

    Eerste getal: ${dobbelSpelBean.dobbel1}
  <br />
    Tweede getal: ${dobbelSpelBean.dobbel2}

  </body>
</html>

Hier zien we dat de Bean gedefinieerd wordt binnen de jsp-pagina. Er wordt verwezen naar het type (de class) en waarbinnen het object beschikbaar moet zijn (session in ons geval).

De ${} tags zijn voor het benaderen voor speciale variabelen zoals een Bean. Hiermee kan doormiddel van reflection direct aan de waardes van dobbel1 en dobbel2 gekomen worden (de getDobbel1 methode wordt wel aangeroepen). Dit is om het leesbaarder te maken voor een “niet-programmeur”. Zo kan een designer een mooie layout maken zonder teveel jsp te moeten kennen.

Nu moeten we natuurlijk nog op deze pagina geraken. Want als we naar dobbel.do surfen komen we enkel op een witte pagina terecht. Daarom maken gebruik van het “response.sendRedirect” commando. Waarmee we de gebruiker doorsturen naar een andere pagina:

public class DobbelServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        int eersteDobbel = (int)((Math.random()*6)+1);
        int tweedeDobbel = (int)((Math.random()*6)+1);

        HttpSession session = request.getSession();
        DobbelSpelBean dobbelspelbean = ((DobbelSpelBean)session.getAttribute("dobbelSpelBean"));

        dobbelspelbean.setDobbel1(eersteDobbel);
        dobbelspelbean.setDobbel2(tweedeDobbel);

        response.sendRedirect("dobbelspel.jsp");
    }
}

Beans en het session object