Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdAnnelies Brander Laatst gewijzigd meer dan 10 jaar geleden
1
Internetapplicaties - V Sessies 1 Internetapplicaties Deel 5: Sessies
2
Internetapplicaties - V Sessies2 Boeken/tutorials: Beginning JSP Web Development, Wrox Vooral hfdst. 11 internet: in google: session object jsp sun
3
Internetapplicaties - V Sessies3 Doelstelling Begrijpen wat een sessie is en waarom een sessie-object nodig is. Informatie kunnen bijhouden en opvragen i.v.m. sessies
4
Internetapplicaties - V Sessies4 Probleem: HTTP-protocol is toestandsloos (stateless) HTTP: een voorbeeld De URL www.microsoft.com wordt ingetikt in de adresbalk van een client browser. www.microsoft.com De browser opent een HTTP-connectie naar de web server van microsoft en stuurt een request voor de default pagina De web server antwoordt en stuurt de juiste pagina terug naar de client browser. De connectie wordt verbroken De gebruiker klikt op een link in de pagina De browser opent een HTTP connectie … De connectie wordt verbroken
5
Internetapplicaties - V Sessies5 Probleem: HTTP-protocol is toestandsloos (stateless) Met HTTP op zich kun je het verband tussen opeenvolgende connecties niet kennen. De connecties worden verbroken. Echte applicaties moeten informatie over de gebruiker kunnen bijhouden: vb: Terwijl een klant van een online bestellingsapplicatie doorheen de virtuele winkel wandelt, mag zijn virtuele winkelkarretje niet telkens leeggemaakt worden als hij op een nieuwe pagina klikt !
6
Internetapplicaties - V Sessies6 Oplossingen: overzicht Cookies Informatie opslaan in bestand bij de client URL herschrijving (URL rewriting) Achteraan de URL wordt gebruikersinfo toegevoegd Verborgen velden (hidden fields) Gebruiker kan enkele formvelden niet zien of veranderen In deze velden wordt gebruikersinfo bewaard JSP session object Gebruikt al de technieken hierboven Verbergt technische details
7
Internetapplicaties - V Sessies7 Cookies Bevatten naam-waarde paren (name-value pairs). Worden bewaard in tekstbestanden op client machine. Worden gemaakt door een server-machine. De servermachine die een cookie gemaakt heeft, krijgt zijn cookie terug de eerstvolgende keer dat de client op hetzelfde domein komt. Bevatten vervaldatum
8
Internetapplicaties - V Sessies8 Cookies: Voorbeeld U creëert de nodige folders: c:\jakarta-tomcat-4.1.24\webapps\ hfdst5\WEB-INF hfdst5\WEB-INF U creëert het bestand AddCookie.jsp : c:\jakarta-tomcat-4.1.24\webapps\ hfdst5\AddCookie.jsp hfdst5\AddCookie.jsp U tikt de JSP-code die volgt in dit bestand in: U tikt de JSP-code die volgt in dit bestand in:
9
Internetapplicaties - V Sessies9 AddCookie.jsp <html> Cookie bewaren op uw PC Cookie bewaren op uw PC <% <% Cookie mijnCookie = new Cookie("gebruiker","Peter");mijnCookie.setMaxAge(24*60*60); response.addCookie(mijnCookie); response.addCookie(mijnCookie); %> %> Read Cookie Read Cookie </html>
10
Internetapplicaties - V Sessies10 Cookies: Voorbeeld U creëert het bestand GetCookie.jsp : c:\jakarta-tomcat-4.1.24\webapps\ hfdst5\GetCookie.jsp hfdst5\GetCookie.jsp U tikt de JSP-code die volgt in dit bestand in: U tikt de JSP-code die volgt in dit bestand in:
11
Internetapplicaties - V Sessies11 GetCookie.jsp <html> Cookie ophalen van uw PC Cookie ophalen van uw PC De 'gebruiker', De 'gebruiker', bewaard op deze PC, wordt getoond: bewaard op deze PC, wordt getoond: <% <% %> %> </html>
12
Internetapplicaties - V Sessies12 GetCookie.jsp (vervolg) <% Cookie[] cookieRij = request.getCookies(); Cookie mijnCookie; Cookie mijnCookie; boolean found = false; boolean found = false; for (int i=0; i < cookieRij.length && (! found) ; i++){ for (int i=0; i < cookieRij.length && (! found) ; i++){ mijnCookie = cookieRij[i]; mijnCookie = cookieRij[i]; if ( mijnCookie.getName().equals("gebruiker") ){ if ( mijnCookie.getName().equals("gebruiker") ){ out.println("De 'gebruiker' op deze PC is " + mijnCookie.getValue()); mijnCookie.getValue()); found =true; found =true; } }%>
13
Internetapplicaties - V Sessies13 Cookie-voorbeeld uittesten Maak een shortcut naar de volgende jsp- pagina (hierbinnen wordt GetCookie.jsp opgeroepen) http://localhost:8080/hfdst5/AddCookie.jsp http://localhost:8080/hfdst5/AddCookie.jsp
14
Internetapplicaties - V Sessies14 Resultaat van GetCookie.jsp
15
Internetapplicaties - V Sessies15 Het cookiebestand
16
Internetapplicaties - V Sessies16 Cookiebestand: inhoud gebruikerPeterlocalhost/hfdst5/1024404079483229671433333678932829789232*
17
Internetapplicaties - V Sessies17 URL herschrijving (URL rewriting) Gebruikersinformatie wordt als naam-value pair geplakt achter iedere URL die vanuit de pagina kan bereikt worden. Zo wordt gebruikersinformatie heen en weer doorgegeven tussen client en server en worden verschillende connecties verbonden tot een ‘sessie’
18
Internetapplicaties - V Sessies18 Verborgen velden (hidden fields) Gebruikersinformatie, gekend door de server wordt telkens meegegeven in hidden fields binnen een dynamisch gegenereerde form. De gebruiker geeft die velden weer mee aan de server (zonder het te weten). Vb:
19
Internetapplicaties - V Sessies19 De JSP-oplossing: session-object session een is impliciet object zoals request Van het type: javax.servlet.http.HttpSession Achter de schermen worden technieken als cookies en URL rewriting gebruikt. Binnen een sessie-object kunnen name-value- pairs bewaard worden. Het statische type van een value is Object.
20
Internetapplicaties - V Sessies20 Session-object: enkele methods boolean session.isNew() Zolang de gebruiker geen 2e keer een request doet, blijft isNew() true, vanaf de 2e keer is het true String session.getId() Geeft de id terug waarmee de sessie wordt geïdentificeerd. int session.getMaxInactiveInterval() Geeft aan hoe lang (in seconden) de sessie blijft bestaan zonder reactie van de gebruiker. -1 = voor altijd. De default-periode wordt bepaald in het web.xml-bestand binnen uw WEB-INF folder.
21
Internetapplicaties - V Sessies21 WEB-INF\web.xml <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> "http://java.sun.com/dtd/web-app_2_3.dtd"><web-app> -1 -1 </web-app>
22
Internetapplicaties - V Sessies22 Voorbeeld U creëert het bestand ToonSessie.jsp : c:\jakarta-tomcat-4.1.24\webapps\ hfdst5\ToonSessie.jsp hfdst5\ToonSessie.jsp U tikt de JSP-code die van de het bijgevoegd sourcecodebestand in U tikt de JSP-code die van de het bijgevoegd sourcecodebestand in
23
Internetapplicaties - V Sessies23 Resultaat:
24
Internetapplicaties - V Sessies24 Session scope (sessie-bereik) Idee: JSP beans kunnen een verschillende ‘scope’ hebben. I.p.v. handmatig in session object te bewaren -> Gewoon session scope specifiëren. Voorbeeld: <jsp:useBean id = “karretje” scope = “session“ class = “Winkelkar”> class = “Winkelkar”>
25
Internetapplicaties - V Sessies25 Soorten scopes page (default) Geen toegang tot de bean vanuit andere pagina’s. Bij 2e bezoek of page reload -> beaninhoud verdwijnt. request De bean is toegankelijk voor ‘vanuit deze pagina opgeroepen’ andere pagina’s. session De bean wordt bewaard in het session object… …en is dus toegankelijk binnen alle pagina’s in de sessie application De bean wordt bewaard in het application object… … en is dus toegankelijk voor iedereen die de applicatie gebruikt.
26
Internetapplicaties - V Sessies26 Session scope achter de schermen We hernemen het voorbeeldje: Achter de schermen geeft dit ongeveer : if ( session.getAttribute(“karretje”) == null ){ if ( session.getAttribute(“karretje”) == null ){ Winkelkar karretje = new Winkelkar(); Winkelkar karretje = new Winkelkar(); session.setAttribute(“karretje”, karretje); session.setAttribute(“karretje”, karretje);}else{ Winkelkar karretje = Winkelkar karretje = (Winkelkar) session.getAttribute(“karretje”); (Winkelkar) session.getAttribute(“karretje”);}
27
Internetapplicaties - V Sessies27 Session scope: Voorbeeld We zullen een Winkelkar-applicatietje maken m.b.v. een bean met session scope. U creëert folder en bestand: c:\jakarta-tomcat-4.1.27\webapps\hfdst5\WEB-INFclasses\be\scvobirm\sessions\Winkelkar.java U creëert het bestand: c:\jakarta-tomcat-4.1.27\webapps\hfdst5\Koop.jsp (Zie ook bijgevoegde broncodebestanden.)
28
Internetapplicaties - V Sessies28 Winkelkar.java (deel 1) package be.scvobirm.sessies; import java.util.ArrayList; public class Winkelkar{ private ArrayList kar = null; private ArrayList kar = null; private String produkt = null; // hulp-datafield private String produkt = null; // hulp-datafield private String submit = null; // hulp-datafield private String submit = null; // hulp-datafield public Winkelkar(){ public Winkelkar(){ kar = new ArrayList();// lege lijst maken kar = new ArrayList();// lege lijst maken } public void setProdukt(String produkt){ public void setProdukt(String produkt){ this.produkt = produkt; this.produkt = produkt; } public void setSubmit(String submit){ public void setSubmit(String submit){ this.submit = submit; this.submit = submit; } //… ZIE DEEL 2 //… ZIE DEEL 2}
29
Internetapplicaties - V Sessies29 Winkelkar.java (deel 2) public ArrayList getKar(){ public ArrayList getKar(){ ArrayList kopie = new ArrayList(); ArrayList kopie = new ArrayList(); kopie.addAll(kar); // representatie niet doorgeven ! kopie.addAll(kar); // representatie niet doorgeven ! return kopie; // alternatief: return kar return kopie; // alternatief: return kar } public void processRequest(){ public void processRequest(){ if (submit != null) if (submit != null) if (submit.equals("toevoegen")) if (submit.equals("toevoegen")) kar.add(produkt); kar.add(produkt); else // submit == "remove" else // submit == "remove" kar.remove(produkt); kar.remove(produkt); produkt = null; // leegmaken produkt = null; // leegmaken submit = null; // leegmaken submit = null; // leegmaken } } // die had je al!
30
Internetapplicaties - V Sessies30 Winkelkar.java: Opmerkingen public ArrayList getKar(){ ArrayList kopie = new ArrayList(); ArrayList kopie = new ArrayList(); kopie.addAll(kar); kopie.addAll(kar); return kopie; return kopie;} Waarom niet return kar ??? OO basisprincipe: operaties op attributen mogen alleen gebeuren via speciaal daarvoor voorziene methoden. Waarom niet return kar ??? OO basisprincipe: operaties op attributen mogen alleen gebeuren via speciaal daarvoor voorziene methoden. kar teruggeven zou betekenten dat de client de lijst kan aanvullen of verkleinen zonder de door Winkelkar voorziene methoden te gebruiken.
31
Internetapplicaties - V Sessies31 Winkelkar.java: Opmerkingen public void processRequest(){ if (submit != null) if (submit.equals("toevoegen")) if (submit.equals("toevoegen")) kar.add(produkt); kar.add(produkt); else // sumit.equals(“verwijderen“) else // sumit.equals(“verwijderen“) kar.remove(produkt); kar.remove(produkt);…} We gaan er hier van uit dat submit de actie bevat die we moeten uitvoeren. Produkt bevat het laatst gespecifieerde produkt. processRequest is de enige methode voor clients om produkten toe te voegen of te verwijderen.
32
Internetapplicaties - V Sessies32 Koop.jsp (deel 1) <html> ! Winkelkar-applicatie ! ! Winkelkar-applicatie ! <body><center> Voeg een produkt toe aan uw winkelkarretje: Voeg een produkt toe aan uw winkelkarretje: knolselder knolselder danioke danioke </form> </center></body></html>
33
Internetapplicaties - V Sessies33 Koop.jsp (deel 2) <!-- Invullen van de bean properties vanuit de oproeper-parameters en request processing:--> <% String submit = request.getParameter("submit"); String submit = request.getParameter("submit"); if (submit != null){ if (submit != null){%><hr> Uw winkelkarretje Uw winkelkarretje <p> <jsp:useBean id = "karbean" scope = "session" class = "be.scvobirm.sessies.Winkelkar" /> class = "be.scvobirm.sessies.Winkelkar" />
34
Internetapplicaties - V Sessies34 Koop.jsp (deel 3) <% <% ArrayList kar = karbean.getKar(); ArrayList kar = karbean.getKar(); for (int i = 0; i < kar.size(); i++){ for (int i = 0; i < kar.size(); i++){ %> %> &submit=verwijderen">Verwijderen &submit=verwijderen">Verwijderen <% <% } %> %>
35
Internetapplicaties - V Sessies35 Koop.jsp (deel 4) <% <% if (kar.size() == 0){ if (kar.size() == 0){ %> %> Geen produkten geselecteerd. Geen produkten geselecteerd. <% <% } %> %></table><%}%>
36
Internetapplicaties - V Sessies36 1e bezoek
37
Internetapplicaties - V Sessies37 Opmerkingen 1e bezoek 1e bezoek aan de pagina: De product drop down list wordt getoond De request parameter “submit” bestaat NIET, submit is dus null. Stel, de gebruiker selecteert ‘danioke‘ en drukt op de submit-knop… De url http://localhost:8080/hfdst5/ http://localhost:8080/hfdst5/ Koop.jsp?produkt=danioke&submit=toevoegenKoop.jsp?produkt=danioke&submit=toevoegen wordt naar de server gestuurd. (parameters zichtbaar als method = “get”) Koop.jsp?produkt=danioke&submit=toevoegen
38
Internetapplicaties - V Sessies38 2e bezoek
39
Internetapplicaties - V Sessies39 Opmerkingen 2e bezoek 2e bezoek aan de pagina: De product drop down list wordt getoond De request parameter “submit” bestaat nu WEL, en de submit-variabele is nu “toevoegen”. De request bevat ook nog het produkt. Beide parameters worden automatisch in de karbean gezet o.a. m.b.v. deze code:
40
Internetapplicaties - V Sessies40 Opmerkingen 2e bezoek (vervolg) De karbean wordt aangevuld met het produkt (processRequest), gekozen tijdens het 1e bezoek. De arraylist die de strings van produkten bevat wordt doorlopen. Voor elk produkt wordt een extra rij toegevoegd aan de html-tabel van produkten. Stel, de gebruiker klikt op de ’verwijderen’-link naast ‘danioke‘ in de productentabel… Stel, de gebruiker klikt op de ’verwijderen’-link naast ‘danioke‘ in de productentabel… De url http://localhost:8080/hfdst5/ http://localhost:8080/hfdst5/ http://localhost:8080/hfdst5/Koop.jsp?produkt=danioke&submit=verwijderen wordt naar de server gestuurd.
41
Internetapplicaties - V Sessies41 3e bezoek
42
Internetapplicaties - V Sessies42 Opmerkingen 3e bezoek 3e bezoek aan de pagina De code zorgt nu dat de parameters product=danioke&submit=verwijderen in de karbean worden bewaard zorgt nu dat de parameters product=danioke&submit=verwijderen in de karbean worden bewaard karbean.processRequest() zal dit keer het gegeven produkt uit de lijst verwijderen Het feit dat intern de karbean binnen het session-object wordt bewaard, maakt dat doorheen verschillende bezoeken, de winkelkar zijn produkten onthoudt.
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.