HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Like dokumenter
HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring -

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

JavaServer Pages (JSP)

Eksamen i Internetteknologi Fagkode: ITE1526

Antall oppgaver: 6. Alle trykte og skrevne hjelpemidler

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

Eksamen i Internetteknologi Fagkode: IVA1379

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HTML5. Skjemaer på nettsider. Skjemaer med. Informasjonsteknologi 1 og 2. Gløer Olav Langslet Sandvika VGS

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Java Database Connectivity (JDBC) Norvald H. Ryeng

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Hva er Derby og Java DB? Denne forelesningen. Java Database Connectivity (JDBC) Hva er Derby og Java DB?

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

JSP. Tilstander og synkronisering

Sikkerhet og tilgangskontroll i RDBMS-er

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

Bruk av NetBeans i JSP-delen av Web-applikasjoner med JSP og JSF

HØGSKOLEN I SØR-TRØNDELAG

1. Å lage programmer i C++

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

1. Å lage programmer i C++

Eksamen i Internetteknologi Fagkode: ITE1526

Eksamensoppgave Vår 2012 Ordinær eksamen Bokmål. Videregående programmering. Eksamensdato: Studium/klasse: 2. klasse

INF106 Objektorientert programmering

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

TDT4110 IT Grunnkurs Høst 2014

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

Når en bruker skriver sitt navn ("Ole") i et form-element med name="fornavn" som attributt. klikker på submit-knappen

HØGSKOLEN I SØR-TRØNDELAG

Test 2 OOP. - Prøveeksamen

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi

HØGSKOLEN I SØR-TRØNDELAG

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

Høgskoleni Østfold. Ny/utsatt EKSAMEN

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi

Oblig 5 Webutvikling. Av Thomas Gitlevaag

Introduksjon til beslutningsstrukturer

Eksamen i IBE102 Webutvikling Våren 2017.

Lotus Traveler - Manual for installasjon

Objektorientert Programmering Ekstraordinær eksamen 2014

UNIVERSITETET I OSLO

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring

TDT4100 Objektorientert programmering

Shellscripting I. Innhold

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Brukerdokumentasjon. Webservices og webklient for kodeverk/ kodeverdi verifisering

Løsningsforslag for Eksamensoppgave i TDT4190 Distribuerte systemer

EKSAMEN OBJEKTORIENTERT PROGRAMMERING Alle trykte og skrevne. Java API dokumentasjon er tilgjengelig lokalt på hver maskin.

[Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hio.no) 07/ Vi holder orden på verdier med hjelp av variabler

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Kapittel 13 Advanced Hypertext Implementation. Martin Lie Ole Kristian Heggøy

HØGSKOLEN I SØR-TRØNDELAG

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Transkript:

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Løsningsforslag Kandidatnr: Eksamensdato: Varighet: Emnekode: Emnenavn: Klasse(r): 2.desember 2010 0900-1100 LO348D LN349D Web-applikasjoner med JSP og JSF 2 ING Nettstudenter Studiepoeng: Faglærer(e): Else Lervik, Grethe Sandstrak, Mildrid Ljosland Kontaktperson (adm.) Hjelpemidler: Oppgavesettet består av: Vedlegg består av: Ingen 5 oppgaver og 3 sider (inkludert forside og vedlegg) 0 sider Merknad: Oppgaveteksten kan beholdes av studenter som sitter eksamenstiden ut. Lykke til! 1

Oppgave 1 (JSP) vekt 15% En JSP blir kompilert om til en servlet, som er et Java objekt som kjører på en web tjener. Beskriv livsløpet til en servlet. Ta gjerne utgangspunkt i figuren under. Når en klient etterspør en jsp nettside vil det sjekkes om dette er første gang nettsiden kalles eller om servlet er eldre enn jsp siden. Dersom om en av disse testene slår til (første gang siden kalles / siden er endret), vil jsp siden bli oversatt til en servlet vha JavaServer pages kompilator og deretter kjøres initierings metoden. Denne kjøres kun en gang. Etter kompilering og initiering er serlveten klar til å behandle forespørsler (requests). Det opprettes en ny tråd for hver forespørsel. Service metoden blir kalt og denne behandler forespørselen videre og gir respons til klienten. Service metoden kjøres så hver gang nettsiden etterspørres (kompilering og initiering av servleten blir da ikke utført) Til sist i livsløpet til en servlet kalles metoden destroy har kan man frigjøre evt. ressurser ol. Lik initmetoden kalles også denne metoden kun én gang. Det kan skje ved at web tjener blir stoppet, eller applikasjonen blir fjernet. Merk: En kan ikke stole 100% på at denne metoden blir kjørt ved for eksempel server krasj.. Oppgave 2 (JSP) vekt 10% Inkludering av filer kan være nyttig når vi for eksempel har flere nettsider som skal ha samme logo. Beskriv hvordan vi kan inkludere filer i en JSP på to ulike måter. Få fram ulikhetene mellom de to metodene og hva som kan avgjøre hvilken metode en må bruke. Direktivet include/ statisk inkludering. 2

<%@ include file= logo.html %> jsp direktiv Filen som inkluderes blir satt inn i JSP koden, eksakt der direktivet står i koden FØR JSP en kompileres til en servlet => Servlet en inneholder dermed begge filene. Dynamisk inkludering <jsp:include page= logo.html flush= true %> jsp aksjon Filen som inkluderes blir først inkludert på det tidspunktet forespørselen blir gjort. Servlet en henter inn den aktuelle fila først når respons på en forespørsel gis. Brukes når: vi ikke har to (eller flere) JSP er som bruker kode fra hverandre. Ikke er veldig opptatt av ytelse. Statisk inkludering vil være raskere da all kode er kompilert inn i samme servlet Oppgave 3(JSP/JSF) vekt 15% Forklar kort hva SQL injeksjon er, og hvordan vi kan beskytte oss mot det? SQL injeksjon er injisering av fremmed kode i SQL setninger. For eksempel kan en logge seg på et nettsted ved å legge inn sql kode i brukernavn feltet: admin or 1 = 1 og la passordfeltet være blank. Da vil sql setning se ut feks slik: select * from bruker where brukernavn = admin OR 1 = 1 and passord = På denne måten får man en sql setning som alltid vil være sann og dermed tilgang til nettsider som skulle vært lukket for ikke autoriserte personer. Hindre SQL injeksjon Tålmodige hackere kan være i stand til å avsløre tabellstrukturer og slette data. Detaljerte feilmeldinger til klienten ved syntaksfeil (SQLException) som for eksempel forteller at kolonne X ikke finnes i tabell Y, kan være til stor hjelp for disse menneskene. Det er derfor ingen god idé å sende SQLExceptions til klienten, de hører hjemme på tjenersiden det er dessuten kun der de kan gis en fornuftig behandling. Filtrere input, slik at for eksempel apostrofer og andre tegn på svartelista stoppes. Et annet alternativ er å bruke PreparedStatement. Denne fungerer slik at SQL setningen kompileres på forhånd. Parametrene sendes inn til ferdig kompilert kode. Dermed unngår vi at databasetjeneren mottar en tekststreng med en fullstendig SQL setning (inkludert evt. injisert kode). Dersom samme sql skal utføres mange ganger i en applikasjon så får man også en ytelsesgevinst ved bruk av prep.stmt. Eks prep.stat: String sql = "UPDATE Student SET navn =? WHERE studid=?" Spørsmålstegnene representerer plassholdere. Ved kjøring av sql setningen vil kun verdiene oppdateres. Merk: Verdiene blir validert. 3

Oppgave 4 (JSF) vekt 30% Vi har en bean klasse som vi har gitt navnet Eksamen2010 med metoden public ArrayList<Person> getpersonene(). Klassen Person består av metodene getnavn(), getadresse() og getalder(). Vi ønsker å få vist fram persondataene i en tabell. a) Forklar hva som skjer hvis vi skriver <h:datatable value="#{eksamen2010.personene}" var="person" > <h:column> #{person.navn} </h:column> <h:column> #{person.adresse} </h:column> <h:column > #{person.alder} år" </h:column> </h:datatable> Det lages en tabell med tre kolonner. Data til tabellen hentes fra beanen Eksamen2010, der egenskapen personene (metoden getpersonene) blir brukt. For hvert objekt i tabellisten, lages en linje i tabellen. Vi henviser til et slikt objekt med navnet person. I første kolonne skrives peronens avn ut, i andre kolonne adressen og i tredje kolonne alderen. PS trykkfeil: Skal ikke stå etter år b) Nederst i tabellen vil vi ha utskrevet Gjennomsnittsalder: xxx,x år (Gjennomsnittsalderen regnes ut ved å summere alle aldrene, og deretter dele på antallet.) Skisser,gjerne med kode, de endringene som er nødvendig i koden fra a. Må noe endres/legges til i java klassene, i såfall hva og hvor? I første eller andre <h:column>: <f:facet name="footer"> Gjennomsnittsalder: </f:facet> I tredje <h:column>: <f:facet name="footer"> <h:outputtext value="#{eksamen2010.gjennomsnitt}"> <f:convertnumber pattern="0.0" /> </h:outputtext> år 4

</f:facet> I Eksamen2010: Må lage en metode getgjennomsnitt() som finner gjennomsnittet av alderen på alle personene. c) Forklar hva du vil gjøre for å få kolonnen med alder til å vises med rød skrift. Angi helst flere ulike måter det kan gjøres på. Må definere stil for kolonne teksten. Dette kan gjøres på diverse måter: Alt 1: <div style="color:red"> #{person.alder} år </div> Alt 2: <h:outputtext value=" #{person.alder} år" style="color:red" /> Alt 3: <h:outputtext value=" #{person.alder} år" styleclass="red" /> pluss stildefinisjon.red { } color: red; Alt 4: <h datatable columnclasses="empty, empty, red" > pluss stildefinisjonene.empty { }.red { } color: red; PS: <column> har ikke noen attributt som kan brukes d) Vi ønsker at bare de personene som er myndige (18 år eller eldre) skal vises fram. Hvordan vil du løse dette?(du kan se bort fra problemet med at da bør gjennomsnittsalderen endres). Alternativ 1: Kan lage en egenskap ismyndig() i Person klassen. Alle kolonneteksene legges inn i en h:outputtext, og attributtet rendered legges til. For navnet blir det slik: <h:outputtext value="#{person.navn}" rendered="#{person.myndig}"/> Tilsvarende for adresse og alder. 5

Eventuelt kan egenskapen ismyndig() sløyfes, isteden skriver vi rendered= #person.alder>=18 Alternativ 2: Lage en ny metode finnalleover18 eventuelt finnalleover(int alder) i Eksamen2010 som returnerer en ArrayList med de ønskede personene, og bruke den som value i datatable. Oppgave 5 (JSF) vekt 30% Et web sted består av en rekke sider. Forklar hvordan du vil løse det følgende (skriv noen få linjer om hvert punkt): a) Alle sidene skal ha et enhetlig preg. Bruker Facelets. Det innebærer at vi lager en template som definerer grunnstrukturen på sidene. Her setter vi blant annet opp hvilke stilark vi skal bruke, og vi definerer plassholdere med ui:insert. I enkeltsidene bruker vi ui:composition til å henvise til templaten, og fyller inn plassholderne ved hjelp av ui:define. Det som vises fram, er templaten med de fylte plassholderne. b) Noen av sidene skal passordbeskyttes. Vi bruker web tjeneren til å foreta autentiseringen. Det innebærer at vi må definere en database med tabeller over roller og brukere og en autentiseringsrealm. De sidene som skal passordbesyttes, legges i en egen katalog. I web.xml setter vi opp hva den beskyttede katalogen heter, hvilke roller som er definert samt hvilken type autentisering vi ønsker. c) Sidene skal ha språkstøtte for norsk og engelsk Alle tekster må legges i en property fil. Denne filen må finnes i to utgaver, en som slutter på _no (norske tekst), og en som slutter på _en (engelske tekster). I faces config.sys må vi sette opp en resource bundle som forteller hvor disse property filene finnes, og hva vi ønsker å kalle dem i jsffilene. Dessuten må vi fortelle hvilke språk som er støttet, det gjøres også i faces config.xml. I jsffilene henviser vi til disse filene ved å skrive for eksempel #{tekst.logginnverdi} der tekst er navnet vi har definert på property filene mens LoggInnVerdi er navnet på en property. Når jsf filen vises fram, hentes verdien på denne propertyen fra riktig språkversjon. Vi kan la brukeren velge språk ved å ha en knapp eller lignende som fører til at den riktige Localeverdien settes i Context objektet. d) På en av sidene skal brukeren oppgi et bankkontonummer. Dette må oppgis, og det må være nøyaktig 11 siffer. Bruker skal få beskjed hvis dette ikke er oppfylt. Må legge inn validering på dette feltet i jsf filen. For å sjekke at noe er skrevet, brukes required= true. For å sjekke at det er nøyaktig 11 siffer, kan man bruke validateregex pattern= \d{11} eller man kan bruke validatelongrange minimum= 10000000000 maximum= 99999999999. I siste tilfelle må variabelen være av typen long. Og så må man legge inn enten <h:message for= kontonummer /> eller <h:messages /> for å få feilmeldingen ut til bruker. 6