Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.

Liknende presentasjoner


Presentasjon om: "Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."— Utskrift av presentasjonen:

1 Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21 Web-programmering med JavaServer Pages Forskjellige måter å programmere for webside 2-3 Servleterside 4-6 Hva består JavaServer Pages (JSP) av? side 7-12 Å lese inn data fra brukerenside Datakontroll på klientsiden med JavaScriptside 19 JSP-sider som kommuniserer med databaserside Å lagre tilstandsinformasjonside Å programmere cookiesside 28 Å programmere med sesjonsobjekterside Problemet med oppdatering av siderside 31

2 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 2 Å søke etter hoteller på Internett? •Du skriver inn navnet på en by og får en liste over mulige hoteller i retur. •Du sjekker kildekoden og finner hotellnavnene i klartekst. •Hvorfor inneholder ikke kildekoden programlogikk som søker etter hoteller i en database? •Svaret er at HTML-koden er spesiallaget: –Web-tjeneren mottar din forespørsel om hoteller i en bestemt by, sender forespørselen til et program som søker i databasen, og genererer så HTML-kode med passende hoteller. –Denne HTML-koden sendes til klienten som svar på forespørselen. •Dette kapitlet handler om å lage slike programmer.

3 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 3 Forskjellige måter å programmere for web •Dynamikk på klientsiden, i klientens nettleser –En applet er et program som lastes ned til nettleseren i tilknytning til en HTML- side •Nedlastingen tar noe lenger tid enn normalt •Nettleseren varsler i statuslinjen om at Java startes opp •Til gjengjeld får brukeren en side med langt større funksjonalitet enn det en statisk HTML-side kan tilby –Ulike scriptspråk har gradvis gjort det mulig å lage enkel dynamikk uten at det går på bekostning av nedlastingstiden. –Brukeren kan lese kildekoden til disse scriptene. •Dynamikk på tjenersiden –Brukeren fyller ut et skjema og trykker på Send-knappen. –Dataene sendes til tjenermaskinen der de blir behandlet av et program. –Denne behandlingen kan for eksempel være det å lage en spesielt tilpasset HTML- side som sendes tilbake til klienten. –Vi bruker JavaServer Pages (JSP) til å lage programmet på tjenersiden. JSP bygger på noe som heter servleter. •Programvare –Du trenger en web-tjener som støtter servletter og JSP –Du trenger den tilhørende online API-dokumentasjonen

4 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 4 Servleter En servlet er et Java-objekt som kjører i en web-tjener. init() service()destroy() Servlet-objektet opprettes og initieres senest første gang en klient etterspør siden. Meldingen service() sendes til servlet-objektet hver gang en klient etterspør siden Servlet-objektet er ute av verden fordi web-tjeneren er stoppet, eller annen grunn. objektet er initiert jobber død service()

5 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 5 Servlet-objektet •Alle klientene arbeider mot det samme servlet-objektet. •Eventuelle objektvariabler kan derfor bli oppdatert av flere forskjellige klienter. •Metoder som behandler objektvariabler bør derfor være synkroniserte (synchronized i metodehodet) –Eksempelvis bør den synkroniserte klassen java.util.Vector brukes i stedet for den usynkroniserte klassen java.util.ArrayList. •En pool av tråder blir laget når en servlet initieres. –En klient som etterspør en servlet (egentlig etterspørres servletens service()-metode) vil få tildelt sin egen tråd. –Tråden leveres tilbake til poolen etter bruk. –Hvis en servlet etterspørres, og tråd-poolen er tom, må klienten vente, eventuelt kan web-tjeneren være satt opp/laget slik at den utvider poolen. –Ved å bruke en pool av tråder unngår vi ressurskrevende initiering av tråder hver gang en etterspørsel kommer.

6 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 6 Et eksempel på programmering av tjenersiden Løs oppgavene side Et eksempel på tjenerside-programming Tidspunkt for nedlasting: Thu May 30 11:35:00 CEST 2002 public class EnkelServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { …se programliste 21.1… } kildekode hos web-tjeneren forespørselen fra klienten genererer denne HTML-koden nettleseren viser fram siden

7 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 7 JavaServer Pages (JSP) •En jsp-fil inneholder HTML-kode med elementer av Java-kode •Brukeren etterspør jsp-filen direkte –Hvis dette er første etterspørsel etter denne filen, vil den bli konvertert til en servlet. –Servleten kompileres og startes automatisk. –Resultatet av servletens service()-metode er en HTML-side som sendes til klienten og som der blir presentert i nettleseren. •En jsp-side er dermed en HTML-side som er laget av et servlet-objekt basert på en jsp-fil. Et eksempel på tjenerside-programmering Tidspunkt for nedlasting:"> Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Aka

8 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 8 Hvorfor JSP? •Bare for å slippe å skrive out.print() rundt HTML-kodene? •Nei! •HTML er presentasjon. •En jsp-fil vil i hovedsak inneholde HTML. •Web-designere lager HTML-kode. •Java-programmerere lager Java-klasser som beskriver det problemområdet som vi arbeider med. •Bare små kodesnutter med Java trengs for å lenke jsp-filen til Java- klassene. •Imidlertid, vi jobber med programmering, ikke webdesign. •Derfor er jsp-filene i denne boka litt utypiske, de innholder relativt lite HTML. Løs oppgaven side 763.

9 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 9 Ferdigdefinerte objekter og uttrykk i JSP •Ferdigdefinerte objekter –request, type: HttpServletRequest –response, type: HttpServletResponse –out, type: PrintWriter –session, type: HttpSession •JSP-uttrykk –Omsluttes av –Eksempler: Tidspunkt for nedlasting: // Ikke semikolon! Tjeneren regner ut 17 * 7 og får Klientmaskinen er:

10 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 10 JSP Scriptleter Her kommer fem tilfeldige tall i intervallet [1, 100]: <% int sum = 0; for (int i = 0; i < 5; i++) { int tall = (int) (100 * Math.random() + 1); out.println(" " + tall); sum += tall; } out.println(" " + "Summen er lik " + sum); %> Her kommer fem tilfeldige tall i intervallet [1, 100]: <% int sum = 0; for (int i = 0; i < 5; i++) { int tall = (int) (100 * Math.random() + 1); %> <% sum += tall; } %> Summen er lik Java-kode omsluttet med, samme eksempel på to måter: Eksempel på utskrift hos klienten: Her kommer fem tilfeldige tall i intervallet [1, 100]: Summen er lik 230

11 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 11 JSP-deklarasjoner •Lokale variabler deklareres inne i scriptleter. Hver klient får sitt eget sett av disse. •Variabler deklarert utenfor scriptleter blir objektvariabler (det vil si at de er felles for alle klienter). Slike variabler må omsluttes med // objektvariabel, felles for alle klienter Antall = // lokal variabel, hver klient sin variabel Teller = –Første gang servleten aksesseres får vi denne utskriften i nettleservinduet: Antall = 1 Teller = 1 –Neste gang ser det slik ut: Antall = 2 Teller = 1 –Og videre: Antall = 3 Teller = 1 –Hver gang servleten stopper, nullstilles variabelen antall.

12 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 12 Kommentarer og direktiver •Vanlige Java-kommentarer i Java-kode •JSP-kommentarer i JSP-kode •HTML-kommentarer for kommentarer som skal sendes til nettleseren •Et JSP-direktiv brukes til å styre på hvilken måte servleten blir laget. •Et direktiv omsluttes av. •page-direktivet: •include-direktivet medfører at kildekoden i filen som inkluderes blir satt inn på den plassen der direktivet står. Dette skjer før servleten lages. Eksempel: Løs oppgave 1 og 2 side 767.

13 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 13 Å lese inn data fra brukeren Et input-felt Skriv navnet ditt:

14 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 14 Hva skjer etter at brukeren har trykket på Send-knappen? Tilbakemelding Tilbake LesNavn.jsp Tilbakemelding Hei på deg, Ole Olsen! Tilbake kildekode på klientsiden

15 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 15 Parameternavn og -verdi String navnet = request.getParameter("navn"); parameternavn parameterverdi

16 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 16 Feilmelding på samme side som input-feltet Et input-felt med feilkontroll Skriv navnet ditt: <% String navnet = request.getParameter("navn"); if (navnet != null) { // OBS! Første gang siden lastes ned er navnet lik null navnet = navnet.trim(); if (navnet.equals("")) out.println("Du må skrive navnet ditt!"); else out.println("Hei på deg, " + navnet + "!"); } %>"> Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Aka

17 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 17 Hva om vi hadde brukt ”get” i stedet for ”post”? •I HTML-filen skriver vi: •Dataene brukeren skriver inn, hektes på URL’en slik at de vises i nettleserens adressefelt. •Det er en øvre grense på antall tegn. Vanligvis er det ingen grunn til å bruke ”get” i stedet for ”post” når data skal sendes til tjeneren. •Sensitive data skal alltid sendes via ”post”.

18 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 18 Vis programliste 21.4 og 21.5, side Gjør oppgave 1, side 775. Et eksempel med mange forskjellige HTML-elementer

19 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 19 Datakontroll på klientsiden med JavaScript •Et supplement til datakontroll på tjenersiden. –Av effektivitetsgrunner bør data kontrolleres før de sendes til tjeneren. –Ikke en erstatning for datakontroll på tjenersiden. –Data skal alltid kontrolleres på tjenersiden. •HTML-koden utvides med script-kode. •JavaScript er de facto-standarden for script-programmering på klientsiden. Et input-felt med JavaScript function kontrollerData() { if (window.document.navnInput.navn.value == "") alert("Skriv navnet ditt!"); else window.document.navnInput.submit(); } Skriv navnet ditt: <% String navnet = request.getParameter("navn"); if (navnet != null) { // OBS! Første gang siden lastes ned er navnet lik null navnet = navnet.trim(); if (navnet.equals("")) out.println("Du må skrive navnet ditt!"); else out.println("Hei på deg, " + navnet + "!"); } %>

20 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 20 Databaser JSP-kode på tjenersiden, se neste lysbilde. Enkel databasetest Personer registrert i databasen Personnr Fornavn Etternavn 100 OLE HANSEN 101 ANNE GRETHE ÅS 102 JONNY HANSEN

21 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 21 PersonTabell.jsp Enkel databasetest Personer registrert i databasen Personnr Fornavn Etternavn <% Connection forbindelse = null; Statement setning = null; try{ String dbDriver = "oracle.jdbc.driver.OracleDriver"; String dbNavn = Class.forName(dbDriver); forbindelse = DriverManager.getConnection( dbNavn, ”brukernavn", ”passord"); setning = forbindelse.createStatement(); String sql = "select * from person"; ResultSet resSet = setning.executeQuery(sql); while (resSet.next()) { out.print(" " + resSet.getString("persnr") + " "); out.print(" " + resSet.getString("fornavn") + " "); out.println(" " + resSet.getString("etternavn") + " "); } } catch (Exception e) { out.print("Feil ved databasetilkobling: " + e); } finally { try { if (resSet != null) resSet.close(); } catch (Exception e) { out.print("Feil ved lukking av resultatsett: " + e); } finally { try { if (setning != null) setning.close(); } catch (Exception e) { out.print("Feil ved lukking av setningsobjekt: " + e); } finally { try { if (forbindelse != null) forbindelse.close(); } catch (Exception e) { out.print("Feil ved lukking av databseforbindelse: " + e); } %>

22 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 22 En web-applikasjon som jobber mot en database Bruker databasewrapper- fabrikken fra kapittel 20.

23 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 23 Rekkefølgen de ulike filene etterspørres i Vis program- liste 21.8, side Navneregister.jsp BehandleValg.jsp Slett.jspPersonForm.jsp NyPerson.jspEndrePerson.jsp form action include persnr = ”ikke definert” fornavn og etternavn lik blank behandlendeFil = ”NyPerson.jsp” include persnr, fornavn og etternavn som gitt for person behandlendeFil = ”EndrePerson.jsp” form action slettnyendre Gjør oppgave 1 og 2 side 781.

24 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 24 Å lagre tilstandsinformasjon •HTTP er en tilstandsløs protokoll. –Den samme klienten kan sende mange forespørsler til web-tjeneren. –Web-tjeneren behandler hver eneste forespørsel helt uavhengig av de andre. –Web-tjeneren husker ingenting. •Hvordan overføre data fra en web-side til en annen? –Bruke send-knappen og så tolke request-objektet –Bruke skjulte felt –Lagre data, enten på klientsiden (cookies) eller på tjenersiden (sesjonsobjekt)

25 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 25 Cookies – en oversikt •Lagres på klientsiden •Brukes ofte for personlig informasjon, f.eks. navn og adresse •Håndteres av nettleseren •Maks 4kb per cookie •Maks 20 cookies per nettsted •Maks 400 cookies per nettleser •Hvis du ikke har konfigurert nettleseren til ikke å akseptere cookies, vil du helt sikkert finne en mengde cookies på din datamaskin. Søk etter kataloger med navn cookies og filer med navn cookies.*. •Cookies lar web-tjeneren gjenkjenne deg, men ikke identifisere deg. •Programmer på web-tjenere bør ikke avhenge av at cookies brukes på klientsiden. •Cookies bør være et tilbud til klienten, ikke den eneste muligheten.

26 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 26 Sesjonsobjekter – en oversikt •Lagres på tjenersiden •En klient tildeles en sesjonsidentifikasjon når sesjonen starter, det vil si når kontakt mellom tjener og klient opprettes. •Dataene lagres i et sesjonsobjekt på tjenersiden, mens sesjonsidentifikasjonen normalt lagres hos klienten som en cookie. •Som vi skal se senere, det er mulig å bruke sesjonsobjekter uten å bruke cookies. •Et eksempel som bruker cookies og sesjonsobjekt: 1.Du logger deg på en nettbutikk for å bestille pizza og brus, og dermed får du tildelt en sesjonsidentifikasjon som lagres på din maskin i en cookie. 2.Samtidig tildeles du et sesjonsobjekt hos web-tjeneren. 3.Hver gang maskinen din ber om en ny fil fra web-tjeneren sendes sesjonsidentifikasjonen sammen med URL-en. 4.Dersom du gjør bestillinger, lagres de i det tilhørende sesjonsobjektet hos tjeneren. 5.Dersom web-tjeneren allerede har lagret navn, telefon og leveringsadresse i cookies på maskinen din, blir du bedt om å bekrefte at dette er riktig før ordren bekreftes. 6.Eventuelt skriver du inn disse opplysningene, og de blir automatisk lagret i cookies slik at du slipper å skrive dem inn ved en senere anledning. 7.Dersom du skulle glemme hele bestillingen og kanskje nøye deg med det du måtte ha i kjøleskapet, vil sesjonsobjektet bli slettet hos web-tjeneren etter en gitt tid.

27 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 27 Å programmere cookies Vis programliste 21.9, side

28 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 28 Å programmere med sesjonsobjekter Vis programliste 21.10, side

29 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 29 En liten bokhandel Vis program- liste side

30 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 21, side 30 Problemet med oppdatering av sider •Last ned HTML-filen fra programliste 21.4 i din nettleser. •Fyll inn data, trykk Send. •Tilbakemelding: ”Din evaluering er lagret.” •Trykk Oppdater-knappen i nettleseren. •Dataene lagres en gang til. •En enkelt bruker kan fylle datafilen med likelydende evalueringer. •Kan løses ved å bruke et sesjonsattributt. –Setter attributtet etter at dataene er lagret (første gang). –Før lagring kontrollerer vi om det er satt. –Hvis det er satt, lagrer vi ikke på nytt. •Tilsvarende problemstilling gjelder oppdatering av databaser. Løs oppgavene side 796.


Laste ned ppt "Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."

Liknende presentasjoner


Annonser fra Google