Java & het Web Programma: Sessies JSP
Stateless vs. Stateful(1) HTTP is stateless WAT IS STATELESS?
Stateless vs. Stateful(2) Het draait allemaal om 'conversational state'. Server: "hi request from client X, nice to meet you" Request van client X Stateless
Stateless vs. Stateful(3) Het draait allemaal om 'conversational state'. Server: "hi request from client X, nice to meet you, use label 'xyz' next time you are here" Server: "I see you've been here! Hello, what can I do for you again" Request van client X Request van client X met label 'xyz' Stateful
HttpSession...wat is dat(1)? Client X doet een request P naar servlet A. Container start thread A op. In thread A wordt een attribuut in een HttpSession A gezet (bijv. het resultaat van een zoekopdracht) Servlet A Thread A Container Client X HttpSession A setAttribute()
HttpSession...wat is dat(2)? Thread A stuurt een response terug naar client X Servlet A Thread A Container Client X HttpSession A
HttpSession...wat is dat(3)? Client X doet een request Q naar servlet A. Container start thread B op. In thread B zoekt de sessie van Client Xen zet een attribuut in een HttpSession A (bijv. het resultaat van een andere zoekopdracht) Servlet A Thread B Container Client X HttpSession A setAttribute() Zelfde client Zelfde servlet Ander request Andere thread Zelfde sessie
HttpSession...wat is dat(4)? Thread B stuurt een response terug naar client X Servlet A Thread B Container Client X HttpSession A In HttpSession A staan nu de resultaten (als attributen) van twee zoekopdrachten
HttpSession...wat is dat(5)? Client Y doet een request R naar servlet A. Container start thread C op. In thread C zoekt de sessie van Client Yen zet een attribuut in een HttpSession B Servlet A Thread C Container Client Y HttpSession B setAttribute() Andere client Zelfde servlet Ander request Andere thread Andere sessie HttpSession A
HttpSession...wat is dat(6)? Een stateful http session kan o.a. bereikt worden door: 1.Session Cookies 2.URL rewriting Session cookies zijn mini bestandjes die uitgewisseld worden tussen server en client. Deze cookie bestaat alleen gedurende de sessie en wordt door de container gebruikt voor het terugvinden van de sessie. Als de sessie niet meer geldig is dan wordt de cookie verwijderd. Als een browser geen cookies accepteert dan kan gekozen worden voor URL rewriting. Hierbij wordt aan het eind van elke url een uniek session id geconcateneerd.
HttpSession...wat is dat(7)? Het gebruik van cookies is heel eenvoudig, geef het commando 'HttpSession session = request.geSession();' in bijvoorbeeld een servlet. De container creeërt een cookie en stuurt dit naar de browser. Die stuurt het (als het cookies accepteert) met ieder request terug naar de server. Dit is alles, wat je NIET doet: 1.HttpSession object instantieren 2.Cookie object instantieren 3.Uniek sessionID genereren en aan cookie binden. 4.Cookie in de response zetten Dit alles doet de container voor je!
HttpSession...wat is dat(8)? Sommige gebruikers willen dat hun browser (uit veiligheid overwegingen) geen cookies accepteert. Hoe kun je nu toch een HttpSession opzetten?? URL rewriting is de oplossing. Er wordt een uniek sessionID achter elke link geplaatst, bijv: HttpSession session = request.getSession(); out.println(" "); URL rewriting code moet je zelf toevoegen en wordt alleen door server gebruikt als cookies niet geaccepteerd worden.
HttpSession...wat is dat(9)? Vraag: Hoe weet een container of cookies wel of niet werken en wanneer hij moet overschakelen op URL rewriting????
JSP.....wat is dat(1)? Opmaakcode schrijven (HTML) in een java servlet is op z'n minst lastig. Wat nu als het een heel uitgebreide pagina is met HTML, css javascript etc....Dat is het nagenoeg onmogelijk om servlets te gebruiken. Toch??? Het antwoord: JSP (java server page) Een JSP is een pagina waarin zowel opmaakcode als java door elkaar gebruikt mogen worden.
JSP...wat is dat(2)? Een simpel voorbeeld: Current Date time: of
JSP...wat is dat(3)? MAAAAARRRR een JSP is eigenlijk gewoon een servlet!!!!! De eerste keer dat een JSP wordt aangeroepen, vertaalt de container de JSP 'MijnJSP.jsp' naar 'MijnJSP_jsp.java' en compileert deze naar 'MijnJSP_jsp.class'. Vervolgens wordt deze class geinstantieerd tot een 'MijnJSP servlet'!
JSP...wat is dat(4)? Onderstaande jsp code wordt vertaald in.....?
JSP...wat is dat(5)? package jsp_servlet; import java.util.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; import com.foo.bar; // Imported as a result of import … class _myservlet implements javax.servlet.Servlet, javax.servlet.jsp.HttpJspPage { // Inserted as a // result of int serverInstanceVariable = 1; … public void _jspService( javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response ) throws javax.servlet.ServletException, java.io.IOException { javax.servlet.ServletConfig config = …; // Get the servlet config Object page = this; PageContext pageContext = …; // Get the page context for this request
JSP...wat is dat(6)? javax.servlet.jsp.JspWriter out = pageContext.getOut(); HttpSession session = request.getSession( true ); try { out.print( " \r\n" ); out.print( " \r\n" ); … // From int localStackBasedVariable = 1; … out.print( " \r\n" ); out.print( " " ); // From out.print( toStringOrBlank( "expanded inline data " + 1 ) ); out.print( " \r\n" ); … } catch ( Exception _exception ) { // Clean up and redirect to error page in } } }
JSP...wat is dat(7)? In een JSP gebruik je: -directives -scriptlets of -expressions wordt geconverteerd naar: ou t.println(Counter.getCount()); -declarations
JSP...wat is dat(8)? In een JSP gebruik je: Scriptlets en expressions eindigen altijd in de 'service methode' van het uiteindelijke servlet. Gedeclareerde variabelen zijn dus lokale variabelen. en eindigen als: public class.... public void _jspService(HttpServletRequest ) {..... int count =1; out.println(++count); }
JSP...wat is dat(9)? In een JSP gebruik je: Declarations eindigen altijd als class instance variabelen eindigt als: public class MijnServlet extends... { int count =1; public void _jspService(HttpServletRequest ) {..... }
JSP...wat is dat(10)? In een JSP staan een aantal 'implicit objects' tot je beschikking. Dit zijn object die je meteen kunt gebruiken en niet apart hoeft op te zoeken of te creëren. JSPWriter - out HttpServletRequest - request HttpServletResponse - response HttpSession - session ServletContext - application ServletConfig - config JSPException - exception PageContext - pageContext