Variabler, datatyper og uttrykk

Download Report

Transcript Variabler, datatyper og uttrykk

Programmering i Java
http://www.tisip.no/boker/java/
Web-programmering med JavaServer Pages
Forskjellige måter å programmere for web
Servleter
Hva består JavaServer Pages (JSP) av?
Å lese inn data fra brukeren
Datakontroll på klientsiden med JavaScript
JSP-sider som kommuniserer med databaser
Å lagre tilstandsinformasjon
Å programmere cookies
Å programmere med sesjonsobjekter
Problemet med oppdatering av sider
versjon januar 2005
side 2-3
side 4-6
side 7-12
side 13-18
side 19
side 20-24
side 25-27
side 28
side 29-30
side 31
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 2004.
Kapittel 21
Å 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.
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 2004.
Kapittel 21, side 2
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 HTMLside
• 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 HTMLside 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
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 2004.
Kapittel 21, side 3
Servleter
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.
service()
init()
objektet service()
er initiert
Servlet-objektet
opprettes og initieres
senest første gang
en klient etterspør siden.
jobber
destroy()
død
En servlet er et Java-objekt
som kjører i en web-tjener.
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 2004.
Kapittel 21, side 4
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.
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 2004.
Kapittel 21, side 5
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…
}
}
<html><head><title>
Et eksempel på tjenerside-programming</title></head>
<body>
Tidspunkt for nedlasting: Thu May 30 11:35:00 CEST 2002
</body>
</html>
kildekode hos
web-tjeneren
forespørselen fra
klienten genererer
denne HTML-koden
nettleseren viser
fram siden
Løs oppgavene side 761-762.
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 2004.
Kapittel 21, side 6
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.
<!-Tid.jsp E.L. 2002-05-30
--!>
<html><head><title>Et eksempel på tjenerside-programmering</title></head>
<body>
Tidspunkt for nedlasting: <%= new java.util.Date() %>
</body>
</html>
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 2004.
Kapittel 21, side 7
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 Javaklassene.
• 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.
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 2004.
Kapittel 21, side 8
Ferdigdefinerte objekter og uttrykk i JSP
• Ferdigdefinerte objekter
–
–
–
–
request, type: HttpServletRequest
response, type: HttpServletResponse
out, type: PrintWriter
session, type: HttpSession
• JSP-uttrykk
– Omsluttes av <%= og %>
– Eksempler:
Tidspunkt for nedlasting: <%= new java.util.Date() %> // Ikke semikolon!
Tjeneren regner ut 17 * 7 og får <%= 17 * 7 %>
Klientmaskinen er: <%= request.getRemoteHost() %>
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 2004.
Kapittel 21, side 9
JSP Scriptleter
Java-kode omsluttet med <% og %>, samme eksempel på to måter:
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("<br>" + tall);
sum += tall;
}
out.println("<br>" + "Summen er lik " + sum);
%>
Eksempel på utskrift hos klienten:
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);
%>
<br> <%= tall %>
<%
sum += tall;
}
%>
<br> Summen er lik <%= sum %>
Her kommer fem tilfeldige tall i intervallet [1, 100]:
86
7
43
91
3
Summen er lik 230
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 2004.
Kapittel 21, side 10
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 <%! og %>
<%! private int antall = 0; %> // objektvariabel, felles for alle klienter
<% antall++; %>
Antall = <%= antall %>
<br>
<% int teller = 0; %>
// lokal variabel, hver klient sin variabel
<% teller++; %>
Teller = <%= 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.
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 2004.
Kapittel 21, side 11
Kommentarer og direktiver
• Vanlige Java-kommentarer i Java-kode
• JSP-kommentarer i JSP-kode
<%-- dette er en JSP-kommentar, den kan gå over flere linjer --%>
• HTML-kommentarer for kommentarer som skal sendes til nettleseren
<!-- dette er en HTML-kommentar, den kan gå over flere linjer -->
• Et JSP-direktiv brukes til å styre på hvilken måte servleten blir laget.
• Et direktiv omsluttes av <%@ og %>.
• page-direktivet:
<%@ page import="mittBibliotek.Bok, java.text.NumberFormat" %>
• 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:
<%@ include file = "PersonForm.jsp"%>
Løs oppgave 1 og 2 side 767.
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 2004.
Kapittel 21, side 12
Å lese inn data fra brukeren
<html>
<head>
<title>Et input-felt</title>
</head>
<form action=”LesNavn.jsp" method="post">
<p>Skriv navnet ditt:<br>
<input name="navn" type="text" size="30">
<p>
<input type="submit" name="Send" value="Send">
<input type="reset" name="Slett" value="Slett">
</form>
</body>
</html>
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 2004.
Kapittel 21, side 13
Hva skjer etter at brukeren har trykket på Send-knappen?
LesNavn.jsp
<html><head><title>Tilbakemelding</title></head><body>
<%
String 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 + "!");
}
%>
<p><a href = "Navn.html">Tilbake</a></body></html>
kildekode på klientsiden
<html><head><title>Tilbakemelding</title></head><body>
Hei på deg, Ole Olsen!
<p>
<a href = "Navn.html">Tilbake</a>
</body></html>
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 2004.
Kapittel 21, side 14
Parameternavn og -verdi
parameterverdi
<input name="navn" type="text" size="30">
parameternavn
String navnet = request.getParameter("navn");
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 2004.
Kapittel 21, side 15
Feilmelding på samme side som input-feltet
<!-Navn2.jsp E.L. 2002-05-31
--!>
<html><head><title>Et input-felt med feilkontroll</title></head>
<form action="Navn2.jsp" method="get">
<p>Skriv navnet ditt:
<br><input name="navn" type="text" size="30">
<p>
<input type="submit" name="Send" value="Send">
<input type="reset" name="Slett" value="Slett">
</form>
<p>
<hr>
<%
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 + "!");
}
%>
</body></html>
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 2004.
Kapittel 21, side 16
Hva om vi hadde brukt ”get” i stedet for ”post”?
•
I HTML-filen skriver vi:
<form action=”Navn2.jsp" method="get">
•
•
•
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”.
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 2004.
Kapittel 21, side 17
Et eksempel med mange forskjellige HTML-elementer
Vis programliste
21.4 og 21.5,
side 772-775.
Gjør oppgave 1,
side 775.
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 2004.
Kapittel 21, side 18
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.
<html><head><title>Et input-felt med JavaScript</title><script language="JavaScript">
function kontrollerData() {
if (window.document.navnInput.navn.value == "") alert("Skriv navnet ditt!");
else window.document.navnInput.submit();
}
</script></head>
<form name="navnInput" action="Navn3.jsp" method="post">
<p>Skriv navnet ditt:<br><input name="navn" type="text" size="30"><p>
<input type="button" value = "Send" onClick = "kontrollerData()">
<input type="reset" name="Slett" value="Slett">
</form><p><hr>
<%
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 + "!");
}
%></body></html>
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 2004.
Kapittel 21, side 19
Databaser
<html><head><title>Enkel databasetest</title></head>
<font size="+2">Personer registrert i databasen</font>
<br><br>
<table bgcolor="skyblue" border="1">
<tr><th>Personnr</th><th>Fornavn</th>
<th>Etternavn</th></tr>
<tr><td>100</td><td>OLE</td><td>HANSEN</td></tr>
<tr><td>101</td><td>ANNE GRETHE</td><td>ÅS</td></tr>
<tr><td>102</td><td>JONNY</td><td>HANSEN</td></tr>
</table>
</body></html>
JSP-kode på tjenersiden, se neste lysbilde.
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 2004.
Kapittel 21, side 20
PersonTabell.jsp
<html><head><title>
Enkel databasetest</title></head><body>
<font size="+2">
Personer registrert i databasen</font>
<br><br>
<%@ page import="java.sql.*" %>
<table bgcolor="skyblue" border="1">
<tr><th>Personnr</th><th>Fornavn</th>
<th>Etternavn</th></tr>
<%
Connection forbindelse = null;
Statement setning = null;
try{
String dbDriver = "oracle.jdbc.driver.OracleDriver";
String dbNavn =
"jdbc:oracle:thin:@baron.stud.idb.hist.no:1521:orcl";
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("<tr><td>" +
resSet.getString("persnr") + "</td>");
out.print("<td>" +
resSet.getString("fornavn") + "</td>");
out.println("<td>" +
resSet.getString("etternavn") + "</td></tr>");
}
} 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);
}
}
}
}
%>
%></table></body></html>
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 2004.
Kapittel 21, side 21
En web-applikasjon som jobber mot en database
Bruker
databasewrapperfabrikken
fra kapittel 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 2004.
Kapittel 21, side 22
Rekkefølgen de ulike filene etterspørres i
Navneregister.jsp
form action
Vis programliste 21.8,
side 781-785.
BehandleValg.jsp
slett
include
Slett.jsp
ny
endre
include
persnr = ”ikke definert”
fornavn og etternavn lik blank
behandlendeFil = ”NyPerson.jsp”
PersonForm.jsp
PersonForm.jsp
form action
Gjør oppgave
1 og 2 side 781.
NyPerson.jsp
include
persnr, fornavn og etternavn
som gitt for person
behandlendeFil = ”EndrePerson.jsp”
form action
EndrePerson.jsp
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 2004.
Kapittel 21, side 23
Å 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)
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 2004.
Kapittel 21, side 24
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.
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 2004.
Kapittel 21, side 25
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.
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 2004.
Kapittel 21, side 26
Å programmere cookies
Vis programliste 21.9, side 787-788.
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 2004.
Kapittel 21, side 27
Å programmere med sesjonsobjekter
Vis programliste 21.10, side 789-791.
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 2004.
Kapittel 21, side 28
En liten bokhandel
Vis programliste 21.11
side 793-796
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 2004.
Kapittel 21, side 29
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.
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 2004.
Kapittel 21, side 30