Uniform Resource Locator (URL) JavaServer Pages - JSP http://www.cs.umu.se:80/kurser/5dv085/ht-10/index.html Består av Protokoll (http) Adress (www.cs.umu.se) Port (80) Sökväg (/kurser/5dv085/ht-11/index.html) Webbklienter Efterfrågar resurser via HTTP Tolkar och presenterar datat den mottar Kan vara vad som helst som efterfrågar data via HTTP Vanligtvis en webbläsare Använder URLer för att referera till resurser Webbserver Tillhandahåller resurser via HTTP Kan vara vad som helst som levererar data via HTTP Vanligtvis en dedikerad servermjukvara Kan bestå av ett antal mjukvarukomponenter som jobbar tillsammans En server kan sköta om flera webbsajter (och vice versa) Stora websajter hanteras ofta av flera webbservrar för att förbättra prestandan Hypertext Transfer Protocol (HTTP) Text-baserat Applikationprotokoll (används mest över TCP) Klient-drivet HTTP Request Request rad (metod + URI + protokoll) Headers (information kring förfrågan) Body (valfri) Klienten frågar servern om något och får ett svar Tillståndslöst (Tillståndsinformation (sessions) kan lagras i cookies eller omskrivna URLer) Kan hantera både text och binärt data (kodat som text)
HTTP GET Request Exampel GET /kurser/5dv085/ht-08/test.html HTTP/1.1 Host: www.cs.umu.se HTTP Response Exempel HTTP/1.1 200 OK Date: Tue, 15 May 2007 14:25:27 GMT Server: Apache/2.0.54 (Unix) Accept-Ranges: bytes Content-Length: 50 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html; charset=iso-8859-1 <html> <head> </head> <body> test </body> </html> HTTP Request Methods Web Applikationer HEAD - simulate a get request GET - retrieve resource POST - submit data to resource PUT - upload resource... Program med ett webbgränssnitt Bra för tunna klienter Lider av begränsningar i webbmediat Kombinerar vanligtvis olika tekniker (e.g., JSP + AJAX) Flera frameworks finns Vanligtvis sessions-orienterade Paketeras ofta i WAR-filer Web Archives (WAR) ZIP-file = compressed archive JAR-file = Java Archive (ZIP file with a manifest) WAR-file = JAR-file with web application information Sessions Används för att lagra data för en serie av HTTP förfrågningar Tex. kundvagn i en ebutik, användar inställningar, historik En identifierare för sessionen skickas med vid varje förfrågan Sessionsidentifieraren används för att hitta sessionen Data lagras i sessions contexten
Tre Lagers Arkitektur Två Lagers Arkitektur 1. Gränssnitt - websidor 2. Logik - mjukvarokomponenter (JavaBeans, EJB) 3. Data - databaser Tydlig uppdelning av ansvar Skalbart Stödjer roll-baserad utveckling Passar bra för stora webbsidor och integration med affärslogik 1. Användargränssnitt (+ Logik) 2. Data + Logik Kräver färre mjukvarukomponenter Kortare utvecklingscykler för mindre utvecklarteam Passar bättre för mindre web-platser JSP 1. En JSP-sida efterfrågas 2. Servern kollar om en Java Servlet existerar för sidan 3. Om ingen Servlet hittas (eller om den hittar en nyare JSPsidan hittas),översätts JSP-sidan till Java (en Servletklass skapas) 4. Java Servleten kompileras Java Servlets Java klasser Implementerar Java Servlet API gränssnittet (fanns innan JSP) Tar emot en förfrågan och genererar ett svar Kan skrivas manuellt Måste vara trådsäkra Genereras vanligtvis automatiskt från JSP Hanteras av en Servlet container 5. Java Servletens service-metod anropas och hanterar förfrågan Java Servlets Web Server Servlet Container Servlet Livscykeln för en Servlet 1. init() - anropas då servleten skapas 2. service() - anropas för varje förfrågan 3. destroy() - anropas då containern stängs
Servlets service()-metod Del av ett service-designmönster Ska inte omdefinieras Ärv istället från basklassen och implementera handlermetoder Separata hanterare för de olika HTTP metoderna (som tex doget()) 1.service() parsar förfrågan och avgör vilken typ av HTTP förfrågan som använts 2.service() anropar en handler-metod för den typen av förfrågan 3.Handler-metoden hanterar förfrågan. JavaServer Pages (JSP) HTML med extra XML-taggar (Scripted server-side) Java för webben Ett sätt att tillhandahålla dynamiskt innehåll på webbsidor XML-taggar fungerar som front-ends för Java-klasser Kan inkludera andra sidor dynamiskt JSPs kompileras till Java Servlets JSP-koden är inte synlig för klienten Genererar HTML dynamiskt Model-View-Controller designmönster rekommenderas JSP Syntax En JSP kan innehålla Statisk HTML-kod Directives Scripting Elements Actions Kommentarer Tag Libraries JSP Script Tags Directives <%@... %> Declarations <%!... %> Scriptlets <%... %> Expressions <%=... %> Comments <%--... --%> Statisk HTML All HTML hanteras av JSP som statisk text HTML kan blandas med JSP kod hur man vill Alla icke-jsp taggar tolkas som HTML Directives <%@... %> Types of JSP directives Page Include Tag Libraries (aka Custom Tags)
Page Directives <%@ page attribute="..." %> Instructs the JSP engine how to process the JSP Attributes determine directive content Page Directive Attributes language - selects scripting language (Java) extends - base class for generated Servlet import - Java class / package import session - enable session tracking (default: true) buffer - set output buffer size autoflush - enable auto flushing of output buffer isthreadsafe - thread safe marker info - page information (author, version, copyright etc) errorpage - set default error page iserrorpage - enable exception tracking on page contenttype - set response mime type Include Directive <%@ include file="page.jsp" %> inkluderar en annan sida vid kompileringen Den inkluderade sidan blir en del av servleten Tag Libraries <%@ taglib uri="taglib.tld" prefix="prefix" %> Loads a tag library Tags are usable via the specified tag prefix The JSP version of language extension Directive Examples <%@ page import="examples.*, examples.tags.*" %> <%@ taglib uri="/web-inf/examples-taglib.tld" prefix="examples" %> <%@ include file="/includes/head.jsp" %>... <examples:validateparameters parameters="name,age"/>... <%@ include file="/includes/foot.jsp" %> Scripting Elements Declarations <%!... %> Scriptlets <%... %> Expressions <%=... %>
Declarations Scriplets Innehållet hamnar i kroppen på servleten Används för att deklarera attribut och metoder Kanan sedan användas i Scriptlets eller expressions <%! public int getsum (int x, int y) { return x + y; } %> <jsp:declaration> public int getsum (int x, int y) { return x + y; } </jsp:declaration> Innehållet hamnar i servletens _jspservice()-metod Används för att bädda in Java-kod direkt i sidan. Kan producera html-utdata (via out.println()) <% int x = 1; int y = 2; int sum = x + y; %> <jsp:scriptlet> int x = 1; int y = 2; int sum = x + y; </jsp:scriptlet> Expressions Resultatet av uttrycket skrivs ut till HTML Används som ett alias för out.println()-satser Kode mmåste innehålla ett uttryck (eg tex inga semikolon på slutet av raden) Actions include - include another page forward - forward request to another resource param - specify parameters when calling or forwarding... 1 + 2 = <%= 1 + 2 %> 1 + 2 = <jsp:expression> 1 + 2 </jsp:expression> Include Action <jsp:include page="page.jsp"/> Inkluderar en annan sida vid en förfrågan Ignoreras om sidan inte hittas Används vanligtvis för att anropa deklarerade metoder Kontrollen återgår till sidan med anropet. Forward Action <jsp:forward page="page.jsp"/> Skickar vidare förfrågan till en annan sida Kontrollen återgår inte till den anropande sidan Med parameter: <jsp:forward page="page.jsp"> <jsp:param name="name" value="value"/> </jsp:forward>
Kommentarer <!-- HTML comment --> Med i svaret från servern Synlig i webbläsaren om man väljer att visa html-koden <%-- JSP comment --%> Inte del i svaret från servern Inte synlig i webbläsaren om man väljer att visa htmlkoden Tag Libraries Java klasser Implementerar JSP Tag Extension API interfacen Användbara som JSP taggar Java klass kopplad till en tag via XML Supports rollbaserad webutveckling (en programmerare kan skriva koden och en webbutvecklare behöver sedan bara använda tagarna) Objekt Ett antal objekt finns tillgängliga i alla JSP-sidor request Representerar HTTP förfrågan Innehåller all info från förfrågan Tillhandahåller ett API för att undersöka data från förfrågan Ger ett uniformt sätt att läsa datat oavsett metod response HTTP svaret out Ström för att skriva ut till svaret session lagrar sessionsinformationen... Läsa Parametrar request.getparameter("name") request.getparametervalues("name") request.getparameternames() request.getparametermap() Kolla alltid för null Returneras om parametern ej fanns med i requesten Tillhandahåll defaultvärden (om lämpligt) Cookies HTTP anslutningar kan stängas när som helst Vi behöver ett sätt att identifiera förfrågningar från samma klient Cookies är små textfragment som skicka i headers Cookies lagras på klientens filsystem och används för att identifiera besökare till sajten Webbläsare & Cookies Max storlek: 4096 bytes Max antal per sajt: 20 Max 300 cookies totalt Går att stänga av lagring av Cookies i webbläsare Cookies kan tas bort från klienten Cookies kan förändras Lagra inte känsligt data i cookies Använd cookies, men var inte beroende av dem
Sessions Data lagrade på webbservern och delad mellan förfrågningar från samma användare Kan lagra vad som helst Kan tex serialiceras till databaser eller vara mer kortlivade Vi behöver ett sätt att identifiera sessionen vid nya förfrågningar Cookies URL omskrivningar Dolda formulär fält JSP-sessions API:t döljer hur sessions identifikationen sker