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

Relevanta dokument
F8 Webbteknologier 1. Dynamiska webbsidor

Dynamiska webbsidor. F10 Webbteknologier EDA095 Nätverksprogrammering. Serversidan eller klientsidan? Common Gateway Interface

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

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

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

Servlets y JSP Fernando Berzal,

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

F8 Webbteknologier 2. EDA095 Nätverksprogrammering. Roger Henriksson Datavetenskap Lunds universitet

F8 Webbteknologier 2. PHP PHP: Hypertext Preprocessor

Webbsidor och webbservrar

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

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

Olika slags datornätverk. Föreläsning 5 Internet ARPANET, Internet började med ARPANET

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

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

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

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.

Namn: (Ifylles av student) Personnummer: Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Tentamen Nätverksprogrammering Lösningsförslag

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Lite mer om CGI-programmering

Tentamen Nätverksprogrammering Lösningsförslag

Databaser på webben. Revision Johan Näsholm, johan@nasholm.com

Tentamen Nätverksprogrammering Lösningsförslag

Allmänna anvisningar: Skriv dina svar på svarsblanketten (se nästa sida) Markera och ange alla svar tydligt och entydigt efter instruktionerna.

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Webbprogrammering. Sahand Sadjadee

Objektorienterad programmering i Java

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

TDP013 Node.js, JSCoverage, Mocha. Marcus Bendtsen Institutionen för Datavetenskap

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Programmeringteknik. Planering MÅL LABB: MOMENT LAB4 HTML - EXEMPEL HTML. Webbdelen

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

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

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

PHP. TNMK30 - Elektronisk publicering

Classes och Interfaces, Objects och References, Initialization

Medieteknologi Webbprogrammering och databaser MEB725, 5p (7,5 ECTS) Klientprogrammering JavaScript Program på flera sidor

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Webbservrar, severskript & webbproduktion

JAVASCRIPT. Beteende

E12 "Evil is going on"

Karlstads Universitet, Datavetenskap 1

Kapitel 6. Kapitel 6. Hakparenteser fšr att ange index float[] priser = new float[500]; frekvens[4] boolean[] flaggor;

Introduk+on +ll programmering i JavaScript

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

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

PHP. Dynamiska webbsidor

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Internationalisering/lokalisering på webben

Modul 6 Webbsäkerhet

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

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

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

ASP.NET Thomas Mejtoft

Arrayer. results

Högskolan Dalarna sid 1 av 5 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Modul 8 Hantering av indata

Exemple på Tentauppgifter Webbprogrammering

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

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

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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

E13 "Behind the Wild"

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Avancerade Webbteknologier

Tentamen Nätverksprogrammering Lösningsförslag

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Java Secure Sockets Extension JSSE. F5 Secure Sockets EDA095 Nätverksprogrammering! Roger Henriksson Datavetenskap Lunds universitet

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Statistik över heltal

Föreläsning 13 Innehåll

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

Webbprogrammering - 725G54 PHP. Foreläsning II

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

DAT043 - Föreläsning 7

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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.

Labora&on 8 Formulär övningar/uppgi6er

tentaplugg.nu av studenter för studenter

Transkript:

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

Dynamiska webbsidor HTML är statisk. En sida får sitt utseende bestämt när en webbdesigner skapar den. Ofta vill man ha mera dynamiska webbsidor: Svar på en databasförfrågan. Konstant uppdaterade webbsidor. Dialog med användaren. Animeringar. Kontroll av inmatad information i ett formulär. 2

Serversidan eller klientsidan? Klientsidan Applets JavaScript Flash Serversidan CGI CommonGateway Interface JSP (Java Server Pages) och Servlets ASP Active Server Pages PHP PHP:Hypertext Preprocessor Varför inte en helt specialskriven webbserver? 3

Common Gateway Interface 1.När webbservern får en begäran om en webbsida med en särskild URL startar servern ett externt program ett CGI-skript. 2.Det externa programmet läser in eventuella parametrar i form av en query string antingen via standard input eller s.k. environtmentvariabler. 3.Programmet genererar en HTML-sida baserat på parametrarna och skriver HTML-koden till standard output. 4. Programmet avslutas. 4

HTML och formulär <html> <head><title>form example</title></head> <body> <form method="get" action="/cgi-bin/storeaddress.pl"> Your name: <input name="name" type="text" size=40> <br> Your e-mail: <input name="email" type="text" size=20> <br> <input type="submit"> </form> </body> </html> 5

HTTP-förfrågan Föregående exempel genererar en TCP-uppkoppling till servern och en HTTP-förfrågan sänds: GET /cgi-bin/storeaddress.pl?name=roger+henriks son&email=roger%40cs.lth.se HTTP 1.0 1. Servern startar skriptet storeaddress.pl. 2. Frågesträngen ( query string ) överförs via en environment-variabel. 6

POST istället för GET POST /cgi-bin/storeaddress.pl HTTP 1.0 Content-type: application/x-www-form-urlencoded Content-length: 49 name=roger+henriksson&email=roger%40cs.lth.se Begäran består av ett huvud (avslutat med dubbla radslut (CR+LF+CR+LF) och en frågesträng. CGI-skriptet läser frågesträngen via standard input. Lämpligt för stora datamängder. Frågesträngen syns ej i URL:en. 7

Svar CGI-skriptet skriver till standard output: 1. MIME-typ, typiskt Content-type: text/html. 2. Blankrad 3. HTML-kod för den genererade sidan. Exempel Content-type: text/html <html> <head><title>registration completed</title></head> <body> <h1>registration completed</h1> Roger Henriksson (roger@cs.lth.se) has been added to the database. </body> </html> 8

CGI Exempel Skriv ett CGI-skript som visar temperaturdata. DEMO temperatured.cgi 9

CGI: fördelar och nackdelar Fördelar Möjlighet att välja mellan många olika implementationsspråk. Väl beprövat och allmänt tillgängligt. Nackdelar Ineffektivt: startar en ny operativsystemprocess för varje HTTP-begäran. Måste avkoda frågesträngen själv. Besvärligt att bevara tillstånd måste spara på disk. 10

Servlets Servlet? Applet - liten applikation, Servlet - liten server Som CGI, fast: Skrivna i Java. Systemoberoende. Skapar inte ny operativsystemsprocess varje gång. Effektivare! Startar inte om för varje HTTP-begäran. Kan komma ihåg information från gång till gång. 11

En servlets liv En servlets liv Servern laddar in servleten. Servern väljer ett servletobjekt och anropar dess service()-metod. Ett eller flera servletobjekt skapas av servern. Service()-metoden behandlar begäran och genererar en HTML-sida åt klienten. Servern anropar init()- metoden i varje objekt. Servleten väntar på nästa begäran eller på att servern stoppar servleten. Ett HTTP-kommando mottas av servern. Servern stoppar servleten och anropar dess destroy()- metod. 12

Klassöversikt Paket import javax.servlet.*; // Standard i J2EE import javax.servlet.http.*; // Standard i J2EE import java.io.*; Klasser/interface HttpServlet superklass för webbservlets. HttpServletRequest klientens HTTP-begäran. HttpServletResponse servletens svar till klienten. ServletConfig information om servern. 13

HttpServlet En servlet instansieras av webbservern. Initialisering Implementera en av nedanstående: public void init(servletconfig config) throws ServletException; public void init(); Terminering public void destroy(); Implementera denna för att till exempel stänga databasuppkopplingar/stänga öppna filer när servleten avslutas av servern. 14

service() När servern tar emot ett HTTP-kommando anropas: protected void service(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException; Denna kan implementeras för att behandla en begäran från klienten. request information om klientens begäran response används för att skicka svar till klienten. Ofta vill vi göra olika saker beroende på typ av begäran: if (request.getmethod().equals("get")) {... } else { if (request.getmethod().equals("post")) {... 15

Alternativ till service() Standardimplementationen av service() undersöker vilken typ av kommando klienten skickade (GET/POST/HEAD etc) och anropar en av: protected void doget(httpservlerrequest request, HttpServletResponse response) throws ServletException,IOException; protected void dopost(httpservlerrequest request, HttpServletResponse response) throws ServletException,IOException; Likadant för: dohead doput dodelete 16

HttpServletRequest Information om klientens begäran. Metoder public String getparameter(string name); Returnerar värdet för angiven parameter, t.ex. innehållet i ett textfält i ett HTMLformulär. public String getremoteaddr(); public String getremotehost(); IP-nummer / namn på klientdatorn. public String getmethod(); Typ av begäran (GET, POST, etc.). Med flera... 17

HttpServletResponse Används för att skicka svar till klienten. 1. Ange MIME-typen för svaret: response.setcontenttype("text/html"); 2. HTML-koden skickas genom en ström: PrintWriter output = response.getwriter(); 3. Skriv HTML-koden till strömmen. 4. Stäng strömmen: output.close(); 18

Servlets och HTML-formulär I formulär kan man specificera vilken typ av HTTPkommando som ska användas när formuläret skickas in till servern: GET eller POST. POST vanligast. Om man skriver in en URL i adressfältet i en webbläsare används GET. DEMO GuessingGame 19

Tillståndsinformation Kommunikationen mellan klient och webbserver är ofta en dialog - jmf en webbshop. Servern måste hålla reda på vad som hänt under dialogen, dvs hålla reda på ett tillstånd. Tillstånd kan lagras i servleten, men: Vi måste kunna skilja på olika klienter! Gömda fält i formulär <input type= hidden name= number value= 42 > Cookies HttpSession 20

Klassen Cookie Namn/värdepar som lagras på klienten. Paket import javax.servlet.http.*; Konstruktor public Cookie(String name, String value); Metoder public String getname(); public String getvalue(); Med flera... 21

Skriva/läsa cookies Metoder i klasserna HttpServletRequest/HttpServletResponse. HttpServletRequest public Cookie[] getcookies(); Returnerar en vektor med samtliga cookies från denna webbplats. HttpServletResponse public void addcookie(cookie cookie); Skriver ner en ny cookie eller ny version av en gammal cookie till klienten. DEMO CookieGuess 22

JSP Java Server Pages Idé Programkoden i HTML-koden istället för HTML-koden i programkoden. Implementation En JSP-fil (.jsp) är en HTML-fil med några extra element i. JSP-elementen ( tags ) anger var dynamisk HTML-kod ska infogas i dokumentet och hur den ska genereras. När en klient begär JSP-filen tolkas innehållet av servern och görs automatiskt om till en servlet första gången. 23

Översättning av JSP-fil 2. Läs fil hello.jsp 1. GET /hello.jsp 6. <html> Hello! </html> 3. Generera 5. Exekvera helloservlet. java 4. Kompilera helloservlet. class 24

JSP Tags Direktiv Anvisningar för översättningen till servlet. "<%@... %>" Deklarationer Deklarationer av attribut motsvarande servletattribut. "<%!... %>" Uttryck Anger javauttryck vars värde stoppas in på sidan. "<%=... %>" Scriptlets Block av javakod som exekveras när JSP-sidan anropas. "<%... %>" Kommentarer "<%--... -- %>" 25

JSP Direktiv Styr översättningen till en servlet. "page" Styr servletens struktur: Importerar externa klasser, ändrar "content type", ändrar servletens superklass. Exempel: <%@ page import="java.util.*" %> <%@ page contenttype="text/plain" %> "include" Inkluderar andra JSP-filer vid översättningen. Exempel: <%@ include file="filetoinclude.jsp" %> 26

JSP Deklarationer Används för att deklarera variabler som sedan kan användas i uttryck och i "scriptlets". Motsvarar attributen i en servletklass. Exempel: <%! int counter = 0; %> <%! Date today = new Date(); %> Flera deklarationer kan samlas: <%! int counter = 0; Date today = new Date(); %> 27

JSP Uttryck Används för att stoppa in resultatet av en beräkning eller annat uttryck i HTML-koden. Exempel: <%= counter %> <%= today.tostring() %> Pris (inkl. moms): <%= pris*1.25 %> kronor. Kan innehålla godtyckliga javauttryck. 28

JSP Scriptlets Anger Javakod som ska exekveras när sidan hämtas. Exempel: <% total = 0.0; for(int i=0;i<myarray.length;i++) { total = total+myarray[i]; } %> Average: <%= total/myarray.length %> 29

JSP Implicita objekt Ett antal standardobjekt finns alltid tillgängliga utan explicit deklaration. request HTTP-begäran från klienten. response HTTP-svaret till klienten. session HTTPSession-objekt associerat till den aktuella användaren/sessionen. application out Refererar till "globala" objekt som ska delas mellan alla sessioner, t.ex. databasanslutning. Objekt som används för att skriva till den utgående svarsströmmen (till klienten). Med flera... 30

ServletContext Ett sätt att dela information mellan servlets/jsp-sidor. Typen för den implicita variabeln "application". Servlets: ServletConfig.getServletContext(); public void setattribute(string,object); public Object getattribute(string); Med mera... Gör det möjligt att dela upp en webbapplikation på flera servlets/jsp-sidor. Dock: Se upp för kapplöpning! 31

JSP Exempel DEMO guessinggame.jsp 32