Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdKarolien Smeets Laatst gewijzigd meer dan 9 jaar geleden
1
Java & het Web Programma: Contexts Listeners Scope/Attributes Thread safety
2
Taken van de container Een servlet verblijft/draait in een servlet container (of gewoon 'container'). De container staat ten dienste van de servlets in de container. De container heeft veel taken waaronder: Initialiseert een ServletConfig per servlet Initialiseert één ServletContext voor alle servlets Instantieert listeners Coordineert de 'lifecycle' van attributen binnen een bepaalde scope. Uiteraard heeft de container meer taken (zie les 1)
3
ServletConfig....wat is dat(1)? Wat is een javax.servlet.ServletConfig? Een object, aangemaakt door de container, waarin informatie voor een specifieke servlet kan worden meegegeven. Stel in servlet A wil je in de response een bepaalde naam terug geven om te tonen: protected void doGet(HttpServletRequest req, HttpServletResponse res)...{... out.println("Mijn naam is Piet");... } De naam 'Piet' staat nu hard gecodeerd in de servlet en kan alleen veranderd worden door deze te wijzigen en de servlet opnieuw te compileren.
4
ServletConfig....wat is dat(2)? In web.xml: hello test.HelloServlet name Piet hello /hello In servlet uitlezen met: getServletConfig().getInitParameter("name");
5
ServletContext....wat is dat? Wat is een javax.servlet.ServletContext? Een object, aangemaakt door de container, waarin informatie voor alle servlets in de webapp kan worden meegegeven. In web.xml: name Piet <servlet...... Aanroep: getServletContext().getInitParameter("name");
6
ServletConfig & ServletContext ServletContext ServletConfig: elke servlet/JSP z'n eigen ServletConfig Servlet A Servlet B Servlet CJSP
7
ServletContext & ServletConfig De ServletContext en ServletConfig worden slechts één keer geladen, bij het initialiseren van de servlet. Je kunt deze parameters dus niet wijzigen zolang de webapp draait. De parameters zijn altijd String objecten.......wat nu als je bijv. een DataSource object wil initialiseren?
8
Listeners...wat zijn dat(1)? Een listener is een object dat geinstantieerd wordt als zich een bepaalde gebeurtenis binnen de webapp voor doet. Bijvoorbeeld, een webapp wordt gedeployed --> dit is een event dat één keer op treedt. javax.servlet.ServletContextListener Dit is een interface die door een class geimplementeerd moet worden. Heeft twee methodes: public void contextInitialized(ServletContextEvent sc); public void contextDestroyed(ServletContextEvent sc);
9
Listeners...wat zijn dat(2)? Listeners declareer je in de web.xml:...... com.example.MijnServletContextListener.... Deze class wordt in WEB-INF/classes gezet (vergeet niet de package structuur aan te maken)
10
Scope....wat is dat(1)? In een webapp zijn 4 soorten scope. Een scope is een bepaald gebied binnen een webapp. Application scope (gehele webapp) Session scope (omvat meerdere requests) Request scope (= threadsafe) Page scope
11
Scope en attributen...wat is dat(1)? In een scope kunnen zelf gemaakte objecten (attributen) worden gecreëerd welke informatie kunnen doorgeven. Een attribuut is een soort bulletin bord waar informatie op geprikt is om aan een ander (hier servlet) door te geven. De vraag is nu: 1.Wie heeft toegang tot deze attributen? 2.Hoe lang 'leven' deze attributen, m.a.w. wat is de scope van een attribuut?
12
Scope en attributen...wat is dat(2)? Application scope (Context scope) Servlet A en Servlet B kunnen het application attribute "name" uitlezen. Context attributes attribuut name Servlet A Servlet B
13
Scope en attributen...wat is dat(3)? Session scope Webapp, container Servlet A Sessie 1 Sessie 2 attribuut naam attribuut email Servlet B Als servlet A en Servlet B requests verwerken die in dezelfde sessie zijn gecreeerd als het attribuut 'naam' dan hebben de servlets toegang tot 'naam'
14
Scope en attributen...wat is dat(4)? Request scope Servlet A geeft een request waarin een attribuut staat door aan servlet B. B heeft toegang tot dit attribuut. Servlet AServlet B Request attribuut adres
15
Scope en attributen...wat is dat(5)? Application scope: objecten globaal toegankelijk voor alle servlets (en dus ook JSP's) in de webapp. Session scope: objecten toegankelijk voor servlets welke requests 'verwerken' die gecreëerd zijn in dezelfde sessie als de objecten. In principe zolang de gebruiker is ingelogd of bijv. een winkelwagentje Request scope: objecten zijn alleen toegankelijk voor servlets die hetzelfde request verwerken. Zodra het request eindigt in een response wordt het object verwijderd. Page scope: objecten zijn alleen toegankelijk binnen een bepaalde servlet/JSP.
16
Attributen doorgeven/verkrijgen Doorgeven/zetten: void setAttribute(String lookupName, Object value) bijv. request.setAttribute("mijnreqattribuut", object) Verkrijgen: Object getAttribute(String lookupName) bijv. session.getAttribute("mijnsesattribuut") Verwijderen: void removeAttribute(String lookupName) bijv. application.removeAttribute("mijnappattribuut")
17
Threadsafety...wat is dat(1)? De container start een nieuwe thread voor elk request. Als meerdere requests dezelfde servlet.doGet() methode aanroepen, dan zijn alle variabelen gedeclareerd binnen de methode threadsafe, d.w.z. deze variabelen kunnen niet door een andere thread gewijzigd worden.
18
Threadsafety...wat is dat(2)? Alle scopes/variabelen die toegankelijk zijn voor meerdere requests, zijn NIET threadsafe! Voorbeeld: een attribuut in application scope. 1.Jan start roept servlet A aan met de request parameter 'getal' met waarde=10. In de application scope staat al de waarde '2' 2.Via een berekening (bijv. 2*10) in de servlet wordt er een response teruggegeven met de waarde 20. De uitkomst wordt in de application scope gezet. Daar staat nu dus '20' 3.Piet doet ook een request met getal=5. In de application scope komt nu '100' te staan. 4.Jan doet weer een request met getal=1. Hij zou nu '20' verwachten, maar krijgt '100' terug. De thread van Piet heeft de waarde gewijzigd. Vraag is de session scope threadsafe?
19
Threadsafety...wat is dat(4)? Sessies zijn nog niet behandeld, maar ze zijn er om 'conversational state' tot stand te brengen tussen één client en een server. Dus één request per keer.......dus geen andere thread die een object in jouw sessie kan wijzigen...dus threadsafe....toch? Is het mogelijk om vanaf één client meerdere requests tegelijkertijd naar de servlet te sturen?
20
Threadsafety....wat is dat(5)? Alleen de request scope is threadsafe!
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.