Web-programmering med JSP Løsningsforslag leksjon 4 Oppgave 1 String adr = request.getremoteaddr() ; out.println(adr); Oppgave 2 Først her kommer HTML-filen med JavaScript et vi lagde i forrige leksjon. Klienten vil først hente denne. Når HTML-skjemaet er fylt ut vil det sendes til JSP en lenger ned. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!-- Denne koden er kanskje ikke optimal, spesielt ikke formatteringa av html-dokumentet (en burde kanskje satt tekst og forms i en tabell slik at det så litt penere ut). Ang. scriptet, så går dette igjennom hvert tekstfelt sekvensielt, og sjekker om det har en verdi. Hvis dette ikke er tilfelle, gir det ut en alert og setter fokus til det (første) feltet (som er funnet uten verdi). --> <head> <script language="javascript" type="text/javascript"> <!-- function sjekkform(strenger){ if (strenger.navn.value=="") { alert("du må skrive inn navnet") strenger.navn.focus() else if (strenger.adr.value=="" ){ alert("du må skrive inn adressen") strenger.adr.focus() else if (strenger.tlf.value==""){ alert("du må skrive inn telefonnummeret") strenger.tlf.focus() else if (strenger.epost.value==""){ alert("du må skrive inn epost") strenger.epost.focus() return true //--> </script> <title>untitled</title>
</head> <form onsubmit="return sjekkform(this)" action="http://localhost:9090/examples/jsp/ov4/oppg2.jsp" method="post"> <p>navn: <Input type="text" name="navn"></p> <p>adresse <input type="text" name="adr"></p> <p>tlf.nr.: <input type="text" name="tlf"></p> <p>epost: <input type="text" name="epost"></p> <input type="submit" value="ok"> </form> JSP-script et får tak i HTML-elementene med koden under. String navn; String adresse; String tlf; String epost; navn = request.getparameter("navn"); adresse = request.getparameter("adr"); tlf = request.getparameter("tlf"); epost= request.getparameter("epost"); <br> Navn: = navn <br> Adresse: = adresse <br> Telefonnummer: = tlf <br> Epost: = epost Oppgave 3 og 5. Merk at løsningen gir tilbake de verdiene som ble skrevet inn i HTML-skjemaet sammen med en feilmelding, hvis det er snakk om feil input. Dette gjør at brukeren ikke trenger å skrive inn alle feltene på nytt hvis f.eks. kun et felt er feil. Layout en til denne JSP en er dårlig, men det er gjort slik for å gi mest mulig oversikt. String navn; String adresse; String tlf; String epost; boolean feil = false; // henter inn fra HTML-skjema navn = request.getparameter("navn"); adresse = request.getparameter("adr"); tlf = request.getparameter("tlf"); epost = request.getparameter("epost"); //setter alle verdiene til en tom streng hvis de ikke finnes //gjør dette fordi vi skal gi brukeren mulighet kun til å taste inn //de verdiene som ble feil eller ikke ble inntastet. Dette gjør at
// brukeren ikke får se null hvis det er felter som ikke er tastet inn. if (navn==null) navn=""; if (adresse==null) adresse=""; if (tlf==null) tlf=""; if (epost==null) epost=""; // sjekker om HTML-skjemaet er fylt ut riktig if (erstreng(navn) && ergyldigtlf(tlf) && erstreng(adresse) && erstreng(epost)){ <br> Navn: = navn <br> Adresse: = adresse <br> Telefonnummer: = tlf <br> Bosted: = epost else { // dataene var ikke riktige, returnerer feilmelding og HTML-skjema if (!erstreng(navn)){ out.println("<br> Navnet er på galt format"); if (!erstreng(adresse)){ out.println("<br> Adressen er på galt format"); if (!erstreng(epost)){ out.println(" <br> Du må oppgi epost"); if (!ergyldigtlf(tlf)){ out.println("<br> Telefonnummeret er på galt format. Må være 8 siffer"); -- dette HTML-skjemaet skrives tilbake slik at brukeren kan taste inn på nytt, dvs. det har vært feil input. Merk at vi også skriver tilbake verdiene brukeren har tastet inn slik at de feltene som er riktige ikke må skrives inn på nytt -- <form action="test.jsp" method="get"> <p>navn: <Input type="text" name="navn" value="=navn" ></p> <p>adresse: <input type="text" name="adr" value="=adresse"></p> <p>tlf.nr.: <input type="text" name="tlf" value="=tlf"></p> <p>epost: <input type="text" name="epost" value="=epost"></p> <input type="submit" value="ok"> </form> ;//else -- Her kommer funksjoner --! private boolean erstreng(string streng){ if (streng!= null &&!streng.equals("")){ return true; else { ; private boolean ergyldigtlf(string tall){ if (tall!= null){ try{ int tmp = Integer.parseInt(tall); //alt har gått vel, hvis ikke hopper vi
// til catch if (tmp >= 10000000 && tmp < 100000000) return true; catch(numberformatexception e) { //ikke tall, returnerer false ; ; Oppgave 4 Denne oppgaven blir veldig lik oppgave 3. Forskjellen ligger jo kun i at vi også må returnere JavaScript-kode sammen med et HTML-skjema og feilmelding hvis input er feil. Merk at JavaScript-koden ikke sjekker at telefonnummeret er på 8 siffer. Det er det kun JSP-koden som gjør. Du vil derfor om du kun oppgir 6 siffer i telefonnummeret ikke få feilmelding fra JavaScript-koden, men fra JSP en på tjenersiden. Sørg for at du forstår forskjellen her! Se på kildekoden i nettleseren. Som du ser vil koden under bli ganske innfløkt. Det hadde nok vært mer oversiktlig å dele koden opp i flere metoder. String navn; String adresse; String tlf; String epost; boolean feil = false; // henter inn fra HTML-skjema navn = request.getparameter("navn"); adresse = request.getparameter("adr"); tlf = request.getparameter("tlf"); epost = request.getparameter("epost"); //setter alle verdiene til en tom streng hvis de ikke finnes //gjør dette fordi vi skal gi brukeren mulighet kun til å taste inn //de verdiene som ble feil eller ikke ble inntastet. Vi gjør derfor dette //fordi ikke brukeren skal få se null hvis det er felter som ikke er tastet inn. if (navn==null) navn=""; if (adresse==null) adresse=""; if (tlf==null) tlf=""; if (epost==null) epost=""; // sjekker om HTML-skjemaet er fylt ut riktig if (erstreng(navn) && ergyldigtlf(tlf) && erstreng(adresse) && erstreng(epost)){ <br> Navn: = navn <br> Adresse: = adresse <br> Telefonnummer: = tlf <br> Bosted: = epost else { // dataene var ikke riktige, returnerer feilmelding og HTML-skjema <head> <script language="javascript" type="text/javascript"> <!-- function sjekkform(strenger){
if (strenger.navn.value=="") { alert("du må skrive inn navnet") strenger.navn.focus() else if (strenger.adr.value=="" ){ alert("du må skrive inn adressen") strenger.adr.focus() else if (strenger.tlf.value==""){ alert("du må skrive inn telefonnummeret") strenger.tlf.focus() else if (strenger.epost.value==""){ alert("du må skrive inn epost") strenger.epost.focus() return true //--> </script> </head> if (!erstreng(navn)){ out.println("<br> Navnet er på galt format"); if (!erstreng(adresse)){ out.println("<br> Adressen er på galt format"); if (!erstreng(epost)){ out.println(" <br> Du må oppgi epost"); if (!ergyldigtlf(tlf)){ out.println("<br> Telefonnummeret er på galt format. Må være 8 siffer"); -- dette HTML-skjemaet skrives tilbake slik at brukeren kan taste inn på nytt, dvs. det har vært feil input. Merk at vi også skriver tilbake verdiene brukeren har tastet inn slik at de feltene som er riktige ikke må skrives inn på nytt -- <form onsubmit="return sjekkform(this)" action="oppg4.jsp" method="get"> <p>navn: <Input type="text" name="navn" value="=navn" ></p> <p>adresse: <input type="text" name="adr" value="=adresse"></p> <p>tlf.nr.: <input type="text" name="tlf" value="=tlf"></p> <p>epost: <input type="text" name="epost" value="=epost"></p> <input type="submit" value="ok"> </form> ;//else -- ************************** Her kommer metoder *************************** --! private boolean erstreng(string streng){ if (streng!= null &&!streng.equals("")){ return true;
else { ; private boolean ergyldigtlf(string tall){ if (tall!= null){ try{ int tmp = Integer.parseInt(tall); //alt har gått vel, hvis ikke hopper vi // til catch if (tmp >= 10000000 && tmp < 100000000) return true; catch(numberformatexception e) { //ikke tall, returnerer false ; ; Oppgave 5 Se oppgave 3. Oppgave 6 @ page import="java.util.enumeration" Enumeration enum = request.getparameternames(); // henter inn alle parameternavnene i forespørselen fra klienten // løkka går igjennom alle disse og henter/skriver ut verdien for hver parameter. while (enum.hasmoreelements()){ String paramnavn = (String) enum.nextelement(); String paramverdi = request.getparameter(paramnavn); out.println(paramnavn +" : "+paramverdi +"<br>"); //while Oppgave 7 Dette gjøres ved å legge til parametrene på slutten av URL en. Denne kan da se slik ut: http://localhost/examples/mine/oppg5.jsp?navn=tomas&epost=tomash@idb.hist.no&tlf=2386723&adr=bortivek kistan