https://github.com/kristiania-pgr203-2021/pgr203-exam-q10357
Bruke maven for å bygge og teste programmet
mvn package
Deretter kan man kjøre pogrammet med kommandoen
java -jar ./target/Eksamen-1.0-SNAPSHOT.jar
Programmet kan opprette spørsmål og lagrer disse i databasen. Det er mulig å legge til spm med tittel/kategori som passer til tema. Så kan man legge til svaralternativer, ved å velge riktig spm. Det er også mulig å endre både spm og tittel/katergoi som er valgt. Bruker kan ta surveys ved å sende inn navn. Navnet blir lagret som cookie. Det er mulig å liste opp alle svarene som brukerne har svart på.
Eksempel steg:
- Trykk på "Make Survey" og "New survey"
- Legg til Tittel for spørreundersøkelsen, eks Resturaunt
- Trykk return og gå til new questions for å legge til et spm til undersøkelsen
- Du kan velge riktig navn på spørreundersøkelse (Resturaunt) og legge til passende tittel/katergi for denne (eks Middag, Dessert, Drikker)
- Legg til spm til katergien (mat), eks "Stem på hvilken rett du liker".
- Fyll inn mening for skala label 1(Smakte dårlig) og label 5 (smakte godt), skalaen viser 1-5.
- Gå tilbake og legg til options.
- Du må velge riktig spm som du har lagret og legge til svaralternativer. Det kan gjøres flere ganger etterhverandre. Eks( Middag: Stekt and, Wok, Stekt ris, Dessert: Creme brulee, Pai, Is. Drikker: Cola, Vann, Pepsi)
- Alt skal være lagret, og det er mulig å endre på både spm og tittel/katergori
- Bruker kan ta "Take survey".
- Skriv inn ditt navn, dette sendes til server og lagres i SessionUser tabellen.
- Serveren sette «Set-Cookie» headeren, alle requester vil etter dette ha en Cookie: i header. I vår løsning har vi valgt sessionUserId som cookieName, da vi kan lett bruke dette for å hente tilsvarende sessionUser.
- Her listes alle surveys, når det lages flere, og man kan legge til flere spm på samme måte, og disse vil da oppdateres under "Take surveys".
- Bruker velger skala verdi for forskjellige options og sender inn. Det skal ikke være mulig å hoppe over option, alle må besvares før sending.
- Det skal være mulig å se alle svar for alle brukere under "See answers".
- Det blir listet alle Surveys, og her kan du trykke inn for å se hva anonyme brukere har svart. Disse listest nedover og er delt i kategori og man ser skala som hver bruker har svart på.
Ekstra:
- Bruker registrere navn og lagres cookie
- Det er mulig å legge til flere spm, så det blir en stor spørreundersøkelse, med mange spm og kategorier
- Lett leselig løsning, organisert data
- Har laget controllers
- Splittet httpMessage
- Server skal returnere riktig feilmelding, 500 hvis noe har gått galt, 404 - ikke funnet, og prøvd å redirecte siden med 303.
- Brukt abstract klasser
Prøvd:
-
Har prøvd på favicon.ico: For å få til dette så måtte vi ha skrevet image-filen tilbake i responsen som en stream. Men dette fikk vi ikke til helt.
-
Cookie: Vi har en svært simpel login side hvor bruker skriver brukers fornavn. Det hadde vært foretrukket å også ha et passord med en hashfunksjon. Da kunne vi ha retrieved sessionused ved å bruke e-post og passord.
Cookie funksjonen ble implementert forholdsvis enkelt, på grunn av den gode HttpMessage klassen, og subklassene HttpResponseMessage og HttpRequestMessage. HttpResponseMessage gjorde det også enkelt å sende responsecode 303 See Other, med headeren Location: «link». Dette gjorde at vi klarte å implementere den ekstra funksjonaliteten om å sende brukeren tilbake til dit de var før.
- Dere har lest eksamensteksten
- Dere har lastet opp en ZIP-fil med navn basert på navnet på deres Github repository
- Koden er sjekket inn på github.com/pgr203-2021-repository
- Dere har committed kode med begge prosjektdeltagernes GitHub konto (alternativt: README beskriver arbeidsform)
-
README.md
inneholder en korrekt link til Github Actions -
README.md
beskriver prosjektets funksjonalitet, hvordan man bygger det og hvordan man kjører det -
README.md
beskriver eventuell ekstra leveranse utover minimum -
README.md
inneholder et diagram som viser datamodellen
-
mvn package
bygger en executable jar-fil - Koden inneholder et godt sett med tester
-
java -jar target/...jar
(ettermvn package
) lar bruker legge til og liste ut data fra databasen via webgrensesnitt - Serveren leser HTML-filer fra JAR-filen slik at den ikke er avhengig av å kjøre i samme directory som kildekoden
- Programmet leser
dataSource.url
,dataSource.username
ogdataSource.password
frapgr203.properties
for å connecte til databasen - Programmet bruker Flywaydb for å sette opp databaseskjema
- Server skriver nyttige loggmeldinger, inkludert informasjon om hvilken URL den kjører på ved oppstart
- Programmet kan opprette spørsmål og lagrer disse i databasen (påkrevd for bestått)
- Programmet kan vise spørsmål (påkrevd for D)
- Programmet kan legge til alternativ for spørsmål (påkrevd for D)
- Programmet kan registrere svar på spørsmål (påkrevd for C)
- Programmet kan endre tittel og tekst på et spørsmål (påkrevd for B)
- Før en bruker svarer på et spørsmål hadde det vært fint å la brukeren registrere navnet sitt. Klarer dere å implementere dette med cookies? Lag en form med en POST request der serveren sender tilbake Set-Cookie headeren. Browseren vil sende en Cookie header tilbake i alle requester. Bruk denne til å legge inn navnet på brukerens svar
- Når brukeren utfører en POST hadde det vært fint å sende brukeren tilbake til dit de var før. Det krever at man svarer med response code 303 See other og headeren Location
- Når brukeren skriver inn en tekst på norsk må man passe på å få encoding riktig. Klarer dere å lage en med action=POST og encoding=UTF-8 som fungerer med norske tegn? Klarer dere å få æøå til å fungere i tester som gjør både POST og GET?
- Å opprette og liste spørsmål hadde vært logisk og REST-fult å gjøre med GET /api/questions og POST /api/questions. Klarer dere å endre måten dere hånderer controllers på slik at en GET og en POST request kan ha samme request target?
- Vi har sett på hvordan å bruke AbstractDao for å få felles kode for retrieve og list. Kan dere bruke felles kode i AbstractDao for å unngå duplisering av inserts og updates?
- Dersom noe alvorlig galt skjer vil serveren krasje. Serveren burde i stedet logge dette og returnere en status code 500 til brukeren
- Dersom brukeren går til http://localhost:8080 får man 404. Serveren burde i stedet returnere innholdet av index.html
- Et favorittikon er et lite ikon som nettleseren viser i tab-vinduer for en webapplikasjon. Kan dere lage et favorittikon for deres server? Tips: ikonet er en binærfil og ikke en tekst og det går derfor ikke an å laste den inn i en StringBuilder
- I forelesningen har vi sett på å innføre begrepet Controllers for å organisere logikken i serveren. Unntaket fra det som håndteres med controllers er håndtering av filer på disk. Kan dere skrive om HttpServer til å bruke en FileController for å lese filer fra disk?
- Kan dere lage noen diagrammer som illustrerer hvordan programmet deres virker?
- JDBC koden fra forelesningen har en feil ved retrieve dersom id ikke finnes. Kan dere rette denne?
- I forelesningen fikk vi en rar feil med CSS når vi hadde
<!DOCTYPE html>
. Grunnen til det er feil content-type. Klarer dere å fikse det slik at det fungerer å ha<!DOCTYPE html>
på starten av alle HTML-filer? - Klarer dere å lage en Coverage-rapport med GitHub Actions med Coveralls? (Advarsel: Foreleser har nylig opplevd feil med Coveralls så det er ikke sikkert dere får det til å virke)
- FARLIG: I løpet av kurset har HttpServer og tester fått funksjonalitet som ikke lenger er nødvendig. Klarer dere å fjerne alt som er overflødig nå uten å også fjerne kode som fortsatt har verdi? (Advarsel: Denne kan trekke ned dersom dere gjør det feil!)