Kun til bruk i tilknytning til l - PowerPoint PPT Presentation

About This Presentation
Title:

Kun til bruk i tilknytning til l

Description:

Web-programmering med JavaServer Pages Forskjellige m ter programmere for web side 2-3 Servleter side 4-6 Hva best r JavaServer Pages (JSP) av? – PowerPoint PPT presentation

Number of Views:97
Avg rating:3.0/5.0
Slides: 31
Provided by: Else153
Category:
Tags: bruk | java | kun | servlet | til | tilknytning

less

Transcript and Presenter's Notes

Title: Kun til bruk i tilknytning til l


1
Web-programmering med JavaServer Pages
  • Forskjellige måter å programmere for web side
    2-3Servleter side 4-6Hva består JavaServer
    Pages (JSP) av? side 7-12Å lese inn data fra
    brukeren side 13-18Datakontroll på klientsiden
    med JavaScript side 19JSP-sider som
    kommuniserer med databaser side 20-24Å lagre
    tilstandsinformasjon side 25-27Å programmere
    cookies side 28Å programmere med
    sesjonsobjekter side 29-30Problemet med
    oppdatering av sider side 31

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
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
Servleter
Meldingen service() sendes til servlet-objektet hv
er gang en klient etterspør siden
Servlet-objektet er ute av verden fordi
web-tjeneren er stoppet, eller annen grunn.
service()
init()
service()
destroy()
objektet er initiert
død
jobber
Servlet-objektet opprettes og initieres senest
første gang en klient etterspør siden.
En servlet er et Java-objekt som kjører i en
web-tjener.
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
Et eksempel på programmering av tjenersiden
public class EnkelServlet extends HttpServlet
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException se
programliste 21.1
kildekode hos web-tjeneren
lthtmlgtltheadgtlttitlegtEt eksempel på
tjenerside-programminglt/titlegtlt/headgt ltbodygt Tidsp
unkt for nedlasting Thu May 30 113500 CEST
2002 lt/bodygt lt/htmlgt
forespørselen fra klienten genererer denne
HTML-koden
nettleseren viser fram siden
Løs oppgavene side 761-762.
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.
  • lt!--
  • Tid.jsp E.L. 2002-05-30
  • --!gt
  • lthtmlgtltheadgtlttitlegtEt eksempel på
    tjenerside-programmeringlt/titlegtlt/headgt
  • ltbodygt
  • Tidspunkt for nedlasting lt new
    java.util.Date() gt
  • lt/bodygt
  • lt/htmlgt

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
Ferdigdefinerte objekter og uttrykk i JSP
  • Ferdigdefinerte objekter
  • request, type HttpServletRequest
  • response, type HttpServletResponse
  • out, type PrintWriter
  • session, type HttpSession
  • JSP-uttrykk
  • Omsluttes av lt og gt
  • Eksempler
  • Tidspunkt for nedlasting lt new
    java.util.Date() gt // Ikke semikolon!
  • Tjeneren regner ut 17 7 og får lt 17 7 gt
  • Klientmaskinen er lt request.getRemoteHost() gt

10
JSP Scriptleter
Java-kode omsluttet med lt og gt, samme eksempel
på to måter
  • Her kommer fem tilfeldige tall i intervallet 1,
    100
  • lt
  • int sum 0
  • for (int i 0 i lt 5 i)
  • int tall (int) (100 Math.random() 1)
  • gt
  • ltbrgt lt tall gt
  • lt
  • sum tall
  • gt
  • ltbrgt Summen er lik lt sum gt
  • Her kommer fem tilfeldige tall i intervallet 1,
    100
  • lt
  • int sum 0
  • for (int i 0 i lt 5 i)
  • int tall (int) (100 Math.random() 1)
  • out.println("ltbrgt" tall)
  • sum tall
  • out.println("ltbrgt" "Summen er lik " sum)
  • gt

Her kommer fem tilfeldige tall i intervallet 1,
100 86 7 43 91 3 Summen er lik 230
Eksempel på utskrift hos klienten
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
    lt! og gt
  • lt! private int antall 0 gt //
    objektvariabel, felles for alle klienter
  • lt antall gt
  • Antall lt antall gt
  • ltbrgt
  • lt int teller 0 gt // lokal variabel,
    hver klient sin variabel
  • lt teller gt
  • Teller lt teller gt
  • 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
Kommentarer og direktiver
  • Vanlige Java-kommentarer i Java-kode
  • JSP-kommentarer i JSP-kode
  • lt-- dette er en JSP-kommentar, den kan gå over
    flere linjer --gt
  • HTML-kommentarer for kommentarer som skal sendes
    til nettleseren
  • lt!-- dette er en HTML-kommentar, den kan gå over
    flere linjer --gt
  • Et JSP-direktiv brukes til å styre på hvilken
    måte servleten blir laget.
  • Et direktiv omsluttes av lt_at_ og gt.
  • page-direktivet
  • lt_at_ page import"mittBibliotek.Bok,
    java.text.NumberFormat" gt
  • 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
  • lt_at_ include file "PersonForm.jsp"gt

Løs oppgave 1 og 2 side 767.
13
Å lese inn data fra brukeren
lthtmlgtltheadgtlttitlegtEt input-feltlt/titlegtlt/headgt
ltform actionLesNavn.jsp" method"post"gt
ltpgtSkriv navnet dittltbrgt ltinput name"navn"
type"text" size"30"gt ltpgt ltinput
type"submit" name"Send" value"Send"gt ltinput
type"reset" name"Slett" value"Slett"gtlt/formgtlt
/bodygtlt/htmlgt
14
Hva skjer etter at brukeren har trykket på
Send-knappen?
lthtmlgtltheadgtlttitlegtTilbakemeldinglt/titlegtlt/headgtltb
odygtltString navnet request.getParameter("navn
")if (navnet ! null) navnet
navnet.trim() if (navnet.equals(""))
out.println("Du må skrive navnet ditt!") else
out.println("Hei på deg, " navnet
"!")gtltpgtlta href "Navn.html"gtTilbakelt/agtlt/b
odygtlt/htmlgt
LesNavn.jsp
kildekode på klientsiden
lthtmlgtltheadgtlttitlegtTilbakemeldinglt/titlegtlt/headgtltb
odygt Hei på deg, Ole Olsen! ltpgt lta href
"Navn.html"gtTilbakelt/agt lt/bodygtlt/htmlgt
15
Parameternavn og -verdi
ltinput name"navn" type"text" size"30"gt
parameterverdi
parameternavn
String navnet request.getParameter("navn")
16
Feilmelding på samme side som input-feltet
  • lt!--
  • Navn2.jsp E.L. 2002-05-31
  • --!gt
  • lthtmlgtltheadgtlttitlegtEt input-felt med
    feilkontrolllt/titlegtlt/headgt
  • ltform action"Navn2.jsp" method"get"gt
  • ltpgtSkriv navnet ditt
  • ltbrgtltinput name"navn" type"text" size"30"gt
  • ltpgt
  • ltinput type"submit" name"Send" value"Send"gt
  • ltinput type"reset" name"Slett" value"Slett"gt
  • lt/formgt
  • ltpgt
  • lthrgt
  • lt
  • 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
    "!")

17
Hva om vi hadde brukt get i stedet for post?
  • I HTML-filen skriver vi
  • ltform actionNavn2.jsp" method"get"gt
  • Dataene brukeren skriver inn, hektes på URLen
    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
Et eksempel med mange forskjellige HTML-elementer
Vis programliste 21.4 og 21.5, side 772-775.
Gjør oppgave 1, side 775.
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.
  • lthtmlgtltheadgtlttitlegtEt input-felt med
    JavaScriptlt/titlegtltscript language"JavaScript"gt
  • function kontrollerData()
  • if (window.document.navnInput.navn.value "")
    alert("Skriv navnet ditt!")
  • else window.document.navnInput.submit()
  • lt/scriptgtlt/headgt
  • ltform name"navnInput" action"Navn3.jsp"
    method"post"gt
  • ltpgtSkriv navnet dittltbrgtltinput name"navn"
    type"text" size"30"gtltpgt
  • ltinput type"button" value "Send" onClick
    "kontrollerData()"gt
  • ltinput type"reset" name"Slett" value"Slett"gt
  • lt/formgtltpgtlthrgt
  • lt
  • 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
    "!")
  • gtlt/bodygtlt/htmlgt

20
Databaser
lthtmlgtltheadgtlttitlegtEnkel databasetestlt/titlegtlt/h
eadgt ltfont size"2"gtPersoner registrert i
databasenlt/fontgt ltbrgtltbrgt lttable
bgcolor"skyblue" border"1"gt
lttrgtltthgtPersonnrlt/thgtltthgtFornavnlt/thgt
ltthgtEtternavnlt/thgtlt/trgt
lttrgtlttdgt100lt/tdgtlttdgtOLElt/tdgtlttdgtHANSENlt/tdgtlt/trgt
lttrgtlttdgt101lt/tdgtlttdgtANNE GRETHElt/tdgtlttdgtÅSlt/tdgtlt/
trgt lttrgtlttdgt102lt/tdgtlttdgtJONNYlt/tdgtlttdgtHANSENlt/td
gtlt/trgt lt/tablegt lt/bodygtlt/htmlgt
JSP-kode på tjenersiden, se neste lysbilde.
21
PersonTabell.jsp
  • lthtmlgtltheadgtlttitlegtEnkel databasetestlt/titlegtlt/he
    adgtltbodygt
  • ltfont size"2"gtPersoner registrert i
    databasenlt/fontgt
  • ltbrgtltbrgt
  • lt_at_ page import"java.sql." gt
  • lttable bgcolor"skyblue" border"1"gt
    lttrgtltthgtPersonnrlt/thgtltthgtFornavnlt/thgt
    ltthgtEtternavnlt/thgtlt/trgt
  • lt
  • Connection forbindelse null
  • Statement setning null
  • try
  • String dbDriver "oracle.jdbc.driver.OracleDr
    iver"
  • String dbNavn "jdbcoraclethin_at_baron.stud.
    idb.hist.no1521orcl"
  • 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("lttrgtlttdgt"
    resSet.getString("persnr") "lt/tdgt")
  • out.print("lttdgt"
    resSet.getString("fornavn") "lt/tdgt")
  • 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
En web-applikasjon som jobber mot en database
Bruker databasewrapper-fabrikken fra kapittel
20.
23
Rekkefølgen de ulike filene etterspørres i
Navneregister.jsp
form action
Vis program- liste 21.8, side 781-785.
BehandleValg.jsp
slett
ny
endre
include persnr, fornavn og etternavn
som gitt for person behandlendeFil
EndrePerson.jsp
include persnr ikke definert fornavn og
etternavn lik blank behandlendeFil
NyPerson.jsp
include
Slett.jsp
PersonForm.jsp
PersonForm.jsp
form action
form action
Gjør oppgave 1 og 2 side 781.
NyPerson.jsp
EndrePerson.jsp
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
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
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
  • 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.
  • Samtidig tildeles du et sesjonsobjekt hos
    web-tjeneren.
  • Hver gang maskinen din ber om en ny fil fra
    web-tjeneren sendes sesjonsidentifikasjonen
    sammen med URL-en.
  • Dersom du gjør bestillinger, lagres de i det
    tilhørende sesjonsobjektet hos tjeneren.
  • 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.
  • Eventuelt skriver du inn disse opplysningene, og
    de blir automatisk lagret i cookies slik at du
    slipper å skrive dem inn ved en senere anledning.
  • 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
Å programmere cookies
Vis programliste 21.9, side 787-788.
28
Å programmere med sesjonsobjekter
Vis programliste 21.10, side 789-791.
29
En liten bokhandel
Vis program- liste 21.11 side 793-796
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.
Write a Comment
User Comments (0)
About PowerShow.com