Basic Internet Programming. Servlets, Cookies and Sessions. Björn Eiderbäck Cristian Bogdan

Relevanta dokument
F8 Webbteknologier 1. Dynamiska webbsidor

2I1070 Lektion 2 Servlets och databaskopplingar Internetprogrammering 2I1049 Treskiktsarkitektur Klient-server med servlets

Servlets y JSP Fernando Berzal,

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http.

Tentamen ITK:P2. Inga hjälpmedel tillåtna förutom penna och papper. Skriv tydligt och texta gärna. 14 st frågor, 70 poäng.

F9 Webbteknologier 1. EDA095 Nätverksprogrammering. Roger Henriksson Datavetenskap Lunds universitet

F10 Webbteknologier. EDA095 Nätverksprogrammering. Roger Henriksson Datavetenskap Lunds universitet

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

EDA095 HTML. Per Andersson. April 26, Lund University Innehåll: HTML, CSS, DOM, JavaScript

Att skriva till och läsa från terminalfönstret

Uniform Resource Locator (URL) JavaServer Pages - JSP. Webbklienter. Webbserver. Hypertext Transfer Protocol (HTTP) HTTP Request

Recitation 4. 2-D arrays. Exceptions

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Lösenordsportalen Hosted by UNIT4 For instructions in English, see further down in this document

Vad ska ni göra? ProgramvaruUtveckling för Stora System. Kravförvirring. 9 frågor till prefekten. Christin Lindholm

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Tentamensskrivning Nätverksprogrammering (EDA095) , kl 8-13

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

Beijer Electronics AB 2000, MA00336A,

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Michael Q. Jones & Matt B. Pedersen University of Nevada Las Vegas

Webbteknik II. Föreläsning 5. Restless farewell. John Häggerud, 2011

Tentamensskrivning Nätverksprogrammering (EDA095 - FED) , kl 8-13

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Tentamen Nätverksprogrammering Lösningsförslag

Reguljära uttryck. Reguljära uttryck. Nu kommer en siffra78 och en till SIFFRA(78) men utan 7kstuga SIFFRA(89)

Swedbank Mobile Loadtesting. LoadRunner Mobile App protocol

Support Manual HoistLocatel Electronic Locks

Tentamen Nätverksprogrammering Lösningsförslag

Datasäkerhet och integritet

2.1 Installation of driver using Internet Installation of driver from disk... 3

Föreläsning 4. Innehåll. Java EE 7 subapi. Java EE. Java EE. DD2390 Internetprogrammering 6 hp

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

INTRODUKTION TILL JDBC

Chapter 4: Writing Classes/ Att skriva egna klasser.

Retrieve a set of frequently asked questions about digital loans and their answers

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Föreläsning 14. Filhantering

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

Lite mer om CGI-programmering

LARS. Ett e-bokningssystem för skoldatorer.

Alternativet är iwindows registret som ni hittar under regedit och Windows XP 32 bit.

Upplägg. Introduktion. Examination. Mål. Konsekvenser. Java. Kursen heter konstruktion, ej design eller formgivning.

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Voice over IP / SIP. Switching Costs SIP. Motivation for VoIP. Internet Telephony as PBX replacement. Internet Telephony Modes.

Introduk+on +ll programmering i JavaScript

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

F4. programmeringsteknik och Matlab

DB, DATA, LOGIC, EXPOSURE (WEB)

Exemple på Tentauppgifter Webbprogrammering

Lösningsförslag till tentamen

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

DVG C01 TENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES EXAMINATION :15-13: 15

JAVAUTVECKLING LEKTION 7

Information technology Open Document Format for Office Applications (OpenDocument) v1.0 (ISO/IEC 26300:2006, IDT) SWEDISH STANDARDS INSTITUTE

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

electiaprotect GSM SEQURITY SYSTEM Vesta EZ Home Application SMART SECURITY SYSTEMS! SVENSKA ios Android

Att använda Java SE JDK 6

Lösningar för tenta 2 DAT043,

tentaplugg.nu av studenter för studenter

Modern webbutveckling. av Robert Welin-Berger

Internationalisering/lokalisering på webben

Tentamen Nätverksprogrammering Lösningsförslag

FactoryCast HMI. Premium & Quantum PLC. Applets

Lab 6: ASP.NET 2.0 Providermodellen

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Input. Programmering. Andra källor

12.6 Heat equation, Wave equation

Webbregistrering pa kurs och termin

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 3

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

emopluppen Användning av "Ant" Niklas Backlund Version: 1.4 ( 2002/04/26 07:27:52 UTC)

Språkkonventioner och redigering av tal.

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

tentaplugg.nu av studenter för studenter

Björn Persson. Komponenter med J2EE. Del 1

Isolda Purchase - EDI

Fördjupad Java. Undantagshantering. Fel

Statistik från webbplatser

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Metoder (funktioner) Murach s: kap Winstrand Development

Webbsidor och webbservrar

Objektsamlingar i Java

Problem som kan uppkomma vid registrering av ansökan

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Föreläsning 3. Stack

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Transkript:

2004, Cookies and Sessions Björn Eiderbäck bjorne@nada.kth.se Cristian Bogdan cristi@nada.kth.se Introduktion Pragmatisk exempelorienterad beskrivning Länkar på nätet Varför bygga sidor dynamiskt? Websidorna baseras på data från användarna Websidorna konstrueras från data som ändras ofta Websidorna använder information från databaser, andra program på nätet eller via andra serverresurser 1

Vad är servlets? är program körs på serversidan Motsvarar ungefär CGI-bin, dvs program som kör på servern skrivna i diverse olika språk En servlet Läser data från klienter Genererar svar Skickar data tillbaks till klienter Kommunicerar med filer, databaser och andra program Hur kör jag servlets? En servlet körs i en Container av typ Tomcat En servlet anropas från en webläsare eller från en form i en html/xhtml-sida 2

Effektivt Fördelar med servlets jämfört med cgi-bin Trådar istället för OS-processer Bekvämt Massor med högnivåfaciliteter Kraftfullt Dela data, poolning, persistens Portabelt Kan köras på massor av plattformar och servrar Säkert Körs i sandlåda, ingen overflow Ej dyrt En servlets struktur import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletTemplate extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // Use "request" to read incoming HTTP headers // (e.g., cookies) and query data from HTML forms. // Use "response" to specify the HTTP response status // code and headers (e.g. the content type, cookies). PrintWriter out = response.getwriter(); // Use "out" to send content to browser 3

En enkel servlet som genererar text import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { /* servlet container takes care of writing initial http header lines. Still, we can change headers: */ response.setcontenttype("text/plain"); /* now the content: */ PrintWriter out = response.getwriter(); out.println("hello World"); Kompilera Lägg in följande i CLASSPATH %CATALINA_HOME%\common\lib\servlet.jar Servletklasserna ligger i servlet.jar, så dom måste med Kompilera med javac javac MinServlet.java Alternativt om inte CLASSPATH är satt kan man göra något i stil med javac classpath ".;%CATALINA_HOME%\common\lib\servlet.jar" MinServlet.java Sök i aktuell katalog Använd klasser i servlet.jar placerad i Tomcats lib 4

Managing tomcat via ant Sets the classpath and other tomcat environment for you Works on all Windows and Unix/Mac OS X platforms ~> mkdir test; cd test ~/test> (set the path to ant) ~/test> cp -r /info/intnet03/localtomcat/. ~/test> cd localtomcat/ localtomcat> ant install localtomcat> ant compile localtomcat> ant tomcat localtomcat> ant stoptomcat Standard Web Application (webapp) Directories Under webapps/ everything is tomcat-independent! webapps/ (servlet contexts) ROOT/ http://host:port/ examples/ http://host:port/examples WEB-INF/ (not visible by http) labbar/ http://host:port/labbar test.html, test.jsp foo/bar.html http://host:port/labbar/test.html WEB-INF/ (not visible by http) web.xml somejsptaglibrary.tld classes/ HelloWoldServlet.java HelloWorldServlet.class somepackage/aclassinthepackage lib/ somelibrary.jar 5

En servlet som genererar HTML import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response)throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); String doctype = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n"; out.println(doctype + "<HTML>\n" + "<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" + "<BODY>\n" + "<H1>Hello WWW</H1>\n" + "</BODY></HTML>"); En användbar klass för att skapa HTML-header public class ServletUtilities { public static final String DOCTYPE = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">"; public static String headwithtitle(string title) { return(doctype + "\n" + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n"); //Resten av klassen behövs inte nu, så den utelämnar vi 6

En klass som använder föregående klass import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SimplerHelloWWW extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println(servletutilities.headwithtitle("hello WWW") + "<BODY>\n" + "<H1>Hello WWW</H1>\n" + "</BODY></HTML>"); Lifscykel init anropas då servleten skapas public void init() throws ServletException { //Initiera servleten, tex genom att läsa in data från databas service Varje gång en server får en fråga skapas en ny tråd och anropar service doget, dopost och doxxx Dessa metoder är dom man normalt själv skriver för att beskriva vad servleten ska göra vid respektive anrop Vi tittar i Suns tutorial som beskriver detta http://java.sun.com/docs/books/tutorial/servlets/index.html 7

Initieringsparametrar, servlet public class ShowMessage extends HttpServlet { private String message; private String defaultmessage = "No message."; private int repeats = 1; public void init() throws ServletException { ServletConfig config = getservletconfig(); message = config.getinitparameter("message"); if (message == null) { message = defaultmessage; try { String repeatstring = config.getinitparameter("repeats"); repeats = Integer.parseInt(repeatString); catch(numberformatexception nfe) { /* NumberFormatException handles case where repeatstring is null *and* case where it is in an illegal format. */ 8

public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); String title = "The ShowMessage Servlet"; out.println(servletutilities.headwithtitle(title) + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">" + title + "</H1>"); for(int i=0; i<repeats; i++) { out.println("<b>" + message + "</B><BR>"); out.println("</body></html>"); Initieringsparametrar, web.xml <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd"> <web-app> <servlet> <servlet-name>showmsg</servlet-name> <servlet-class>showmessage</servlet-class> <init-param> <param-name>message</param-name> <param-value>shibboleth</param-value> </init-param> 9

<init-param> <param-name>repeats</param-name> <param-value>5</param-value> </init-param> </servlet> </web-app> Anropa servlet med parametrar, htmldel <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!-- Front end to ThreeParams servlet. Taken from Core Web Programming Java 2 Edition from Prentice Hall and Sun Microsystems Press, http://www.corewebprogramming.com/. May be freely used or adapted. --> <HTML> <HEAD> <TITLE>Collecting Three Parameters</TITLE> </HEAD> <BODY BGCOLOR="#FDF5E6"> <H1 ALIGN="CENTER">Collecting Three Parameters</H1> 10

<FORM ACTION="/servlet/ThreeParams"> First Parameter: <INPUT TYPE="TEXT" NAME="param1"><BR> Second Parameter: <INPUT TYPE="TEXT NAME="param2"><BR> Third Parameter: <INPUT TYPE="TEXT" NAME="param3"><BR> <CENTER><INPUT TYPE="SUBMIT"></CENTER> </FORM> </BODY> </HTML> Anropa servlet med parametrar, servletdel import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ThreeParams extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); String title = "Reading Three Request Parameters"; 11

out.println(servletutilities.headwithtitle(title) + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" + "<UL>\n" + " <LI><B>param1</B>: " + request.getparameter("param1") + "\n" + " <LI><B>param2</B>: " + request.getparameter("param2") + "\n" + " <LI><B>param3</B>: " + request.getparameter("param3") + "\n" + "</UL>\n" + "</BODY></HTML>"); Request headers Med servleten kommer massa information via HTTP-protokollet. Vi kan läsa av hur servleten anropades (GET eller POST), vilken URI som angavs, vilka browser klienten har, vilken dator som klienten befinner sig på och en del annat 12

exempel public class ShowRequestHeaders extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); String title = "Servlet Example: Showing Request Headers"; out.println(servletutilities.headwithtitle(title) + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" + "<B>Request Method: </B>" + request.getmethod() + "<BR>\n" + "<B>Request URI: </B>" + request.getrequesturi() + "<BR>\n" + "<B>Request Protocol: </B>" + request.getprotocol() + "<BR><BR>\n" + "<TABLE BORDER=1 ALIGN=\"CENTER\">\n" + "<TR BGCOLOR=\"#FFAD00\">\n" + "<TH>Header Name<TH>Header Value"); 13

Enumeration headernames = request.getheadernames(); while(headernames.hasmoreelements()) { String headername = (String)headerNames.nextElement(); out.println("<tr><td>" + headername); out.println(" <TD>" + request.getheader(headername)); out.println("</table>\n</body></html>"); /** Vi låter dopost använda doget. */ public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { doget(request, response); Cookies Cookies kan användas för att koppla data till viss användare Namn/lösen (försiktighet krävs dock!), var man varit på siten, varukorg eller liknande En cookie lagras på klientens dator Vi nästa ansluten till servern kan man läsa av cookien hos servern 14

Exempel, setcookies public class SetCookies extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { for(int i=0; i<3; i++) { // Default maxage is -1, indicating cookie // applies only to current browsing session. Cookie cookie = new Cookie("Session-Cookie-" + i, "Cookie-Value-S" + i); response.addcookie(cookie); cookie = new Cookie("Persistent-Cookie-" + i, "Cookie-Value-P" + i); // Cookie is valid for an hour, regardless of whether // user quits browser, reboots computer, or whatever. cookie.setmaxage(3600); response.addcookie(cookie); response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); String title = "Setting Cookies"; out.println(servletutilities.headwithtitle(title) + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" + "There are six cookies associated with this page.\n" + "To see them, visit the\n" + "<A HREF=\"/servlet/ShowCookies\">\n" + "<CODE>ShowCookies</CODE> servlet</a>.\n" + "<P>\n" + "Three of the cookies are associated only with the\n" + "current session, while three are persistent.\n" + "Quit the browser, restart, and return to the\n" + "<CODE>ShowCookies</CODE> servlet to verify that\n" + "the three long-lived ones persist across sessions.\n" + "</BODY></HTML>"); 15

Exempel, showcookies public class ShowCookies extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); String title = "Active Cookies"; out.println(servletutilities.headwithtitle(title) + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" + "<TABLE BORDER=1 ALIGN=\"CENTER\">\n" + "<TR BGCOLOR=\"#FFAD00\">\n" + " <TH>Cookie Name\n" + " <TH>Cookie Value"); Cookie[] cookies = request.getcookies(); if (cookies!= null) { Cookie cookie; for(int i=0; i<cookies.length; i++) { cookie = cookies[i]; out.println("<tr>\n" + " <TD>" + cookie.getname() + "\n" + " <TD>" + cookie.getvalue()); out.println("</table></body></html>"); 16

Sessionstracking För att hantera en användares sessioner med en server och kanske flytta data mellan olika delar kan vi använda Cookies Kan vara avstängda hos klienten URL-rewriting Lite klumpigt att hantera Hidden forms Också lite knöligt Java servlets erbjuder speciella sessionmekanismer som döljer den faktiska metod som används exempel import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.net.*; import java.util.*; public class ShowSession extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); String title = "Session Tracking Example"; HttpSession session = request.getsession(true); String heading; Integer accesscount = (Integer)session.getAttribute("accessCount"); 17

if (accesscount == null) { accesscount = new Integer(0); heading = "Welcome, Newcomer"; else { heading = "Welcome Back"; accesscount = new Integer(accessCount.intValue() + 1); // Use setattribute instead of putvalue in version 2.2. session.setattribute("accesscount", accesscount); out.println(servletutilities.headwithtitle(title) + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">" + heading + "</H1>\n" + "<H2>Information on Your Session:</H2>\n" + "<TABLE BORDER=1 ALIGN=\"CENTER\">\n" + "<TR BGCOLOR=\"#FFAD00\">\n" + " <TH>Info Type<TH>Value\n" + "<TR>\n" + " <TD>ID\n" + " <TD>" + session.getid() + "\n" + "<TR>\n" + " <TD>Creation Time\n" + " <TD>" + new Date(session.getCreationTime()) + "\n" + "<TR>\n" + " <TD>Time of Last Access\n" + " <TD>" + 18

+ new Date(session.getLastAccessedTime()) + "\n" "<TR>\n" + " <TD>Number of Previous Accesses\n" + " <TD>" + accesscount + "\n" + "</TABLE>\n" + "</BODY></HTML>"); /** Handle GET and POST requests identically. */ public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { doget(request, response); Request and Session Attributes Servlet can access attributes stored within the request or within the session Attributes are like variables: One servlet can set an attribute in the request or session, another (included or forwarded to) servlet can retrieve the attribute value, change it, etc If the attribute is in the session, future accesses from the same browser can read its value (this is how login is done) javax.servlet.servletrequest.setattribute(string name, Object value), getattribute(string name) javax.servlet.httpsession.setattribute(string name, Object value), getattribute(string name) 19

Hands-on with Tomcat Various ways of mapping a servlet in web.xml /servlet/helloworldservlet /servlet/hello /world /anything.abc A form response Some HTTP request headers Some HTTP response headers Redirections, forwards, includes Sessions Länkar Tutorial från SUN http://java.sun.com/docs/books/tutorial/servlets/index.html Tutorial av Marty Hall http://www.apl.jhu.edu/~hall/java/servlet-tutorial/ Diverse resurser http://www.corewebprogramming.com/ 20