Datateknikk Side 1 av 8 Eksamen i Internetteknologi Fagkode: ITE1526 Tid: Mandag, 23.05.05, 9:00-12:00 Tillatte hjelpemidler: Alle trykte og skrevne hjelpemidler tillatt. Eksamen består av 3 oppgaver og to vedlegg.
Datateknikk Side 2 av 8 Kort om oppgavesettet. Hver av oppgavene er en del av et system for håndtering av oppslag på en oppslagstavle. I oppgave 1 skal det utvikles en modul for vising av alle oppslag basert på kategori og for visning av enkeltoppslag. I oppgave 2 skal det utvikles en modul for endring/oppdatering av eksisterende oppslag, mens det i oppgave 3 skal utvikles en modul for opprettelse av nye oppslag på oppslagstavla. All informasjon i OppslagsTavla applikasjonen lagres i en MySQL database, nødvendige tabeller er gitt i vedlegg 1. Oppgave 1 (35%) PHP Det skal være mulig å få en oversikt over alle oppslag som er registrerte basert på kategori som vist i figur 1. Figuren inneholder også informasjon om oppsett og ønskede marger. Det er ønskelig at kategorimenyen står i ro, alle endringer skjer i feltet for visning av oppslag. Benytt CSS for oppsett av siden. Første gang en kommer inn på web-siden skal alle registrerte oppslag i kategori med navn «Gjesteforelesninger» vises. Kategorinavn skal vises som meny til venstre i skjermbildet, hver meny skal være en hyperlenke og valg av en kategori skal medføre at oppslag registrert på denne kategorien vises i feltet merket Felt for visning av oppslag i figuren under. For hvert oppslag skal tittel, ingress og dato vises med det nyeste oppslaget først i oversikten. Det skal videre være mulig å lese et oppslag ved å trykke på tittel eller Les mer, dette skal være hyperlenker som gjør at hele oppslaget med tittel, ingress, tekst (feltet oppslagtekst), dato, fullt navn på forfatter av oppslaget og antall visninger skal vises, dette er vist i figur 2. Skriptet som viser enkeltoppslag må også oppdatere trefftelleren. Figur 1: Skjermbilde som viser alle oppslag i en kategori
Datateknikk Side 3 av 8 Figur 2: Skjermbilde som viser et enkeltoppslag Oppgave 2 (25%) JSP Det skal være mulig å redigere enkelte felt i et eksisterende oppslag fra en JSP side med navn oppslagstavla.jsp. JSP siden kalles med parameteren oppslagid som angir id for det oppslaget som skal redigeres. (En Endre knapp skal legges inn for forfatteren av et oppslag i løsningen til oppgave 1, men dette er ikke en del av denne oppgaven). Feltene tittel, ingress og oppslagtekst skal kunne redigeres. Skjermbilde skal se ut som vist i figur 3. Når knappen «Lagre endringer» velges skal databasen oppdateres med ny informasjon gitt inn om det aktuelle oppslaget. Skriv en JSP side som skaper og håndterer hendelsene for skjermbildet i figur 3. Benytt Java bønnen (Oppslag.java ) i vedlegg 2 for å løse oppgaven. Etter at endringene er utført i databasen skal oversiktsiden over alle oppslag i aktuell kategori vises ved hjelp av PHP-skriptet skrevet i oppgave 1.
Datateknikk Side 4 av 8 Figur 3: Skjermbilde som viser endring av et oppslag på oppslagstavla Oppgave 3 (40%) Valgfri implementasjon I denne oppgaven skal du lage et skript/kode som håndterer opprettelse av et nytt oppslag på oppslagstavla. Det er kun registrert brukere som skal kunne utføre dette, disse er lagret i tabellen brukere med brukernavn og tilhørende passord som er md5 kryptert. Skriv en klasse med navn Bruker og opprett et nytt objekt av denne typen når en bruker logger inn, objektet bør ta vare på brukernavn, IP adresse og tidspunkt for innlogging. Opprett en sesjon (session) og brukerobjektet skal lagres i denne. Brukeren skal dermed ikke trenge å logge inn flere ganger. Ved hver oppkobling skal det verifiseres at IP adressen er lik adressen som er lagret i brukerobjektet. En ny knapp med navn «Nytt oppslag» skal legges til i skjermbildet i figur 1. Når denne aktiveres skal skriptet/koden skape dialogen i figur 4 samt lagre informasjonen gitt inn i databasen når knappen «Registrer» aktiveres. Input data må valideres, du bestemmer selv om dette skal gjøres på klienten eller tjeneren. Alle felt må fylles ut. Feltet bruker skal fylles ut automatisk og verdien hentes fra brukerobjektet som er lagret i sesjonen. Tittel skal ha maksimal lengde på 12 tegn, tittel, ingress og oppslag skal ikke kunne inneholde HTML koder. Ved feil i input data skal brukeren få beskjed om dette og mulighet for å rette opp i feilen før skjemaet sendes inn på nytt. Tilby også mulighet for utlogging.
Datateknikk Side 5 av 8 Figur 4: Skjermbilde for registrering av et nytt oppslag LYKKE TIL!
Datateknikk Side 6 av 8 Databasetabeller benyttet av oppslagstavla: Vedlegg 1 Tabellen oppslag inneholder informasjon om et oppslag og har følgende felter: id Autonummer primærnøkkel tittel Tekst (lengde 50) ingress Tekst (ubegrenset lengde) oppslagtekst Tekst (ubegrenset lengde) bruker Tekst Fremmednøkkel til brukere.brukernavn kategori Integer Fremmednøkkel til kategori.kat_id dato datofelt (date) treff Integer Tabellen kategori inneholder tilgjengelige kategorier med id og navn og har følgende felter: kat_id Autonummer primærnøkkel navn Tekst (lengde 15) Tabellen brukere inneholder informasjon om en bruker og har følgende felter: brukernavn Tekst (lengde 12) primærnøkkel passord Tekst (lengde 32) md5 kryptert fornavn Tekst (lengde 32) etternavn Tekst (lengde 32)
Datateknikk Side 7 av 8 Oppslag.java package eksamen_v05; import java.sql.*; Vedlegg 2 public class Oppslag { private static final String CONTENT_TYPE = "text/html"; String brukernavn = null; String passord = null; String url = null; String id = null; String kategori = null; String tittel = null; String ingress = null; String oppslagtekst = null; String dato = null; String bruker = null; String treff = null; // Bruker konstruktør funksjonen for å forsøke å initialisere databasedriveren public Oppslag () throws RuntimeException { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); catch (Exception e) { throw new RuntimeException ("Fant ingen databasedriver: " + e); brukernavn = "kc"; passord = "xyz"; url = "jdbc:mysql://limbo.hin.no:3306/test2"; public void setoppslagid(string id) { this.id = id; try { // Kobler oss opp mot databasen Connection forbindelse = DriverManager.getConnection(url, brukernavn, passord); PreparedStatement uttrykk = null; uttrykk = forbindelse.preparestatement ("SELECT * FROM oppslagstavla WHERE id=?"); uttrykk.setstring(1,id); ResultSet resultat = uttrykk.executequery(); if (resultat.next() ) { tittel = resultat.getstring("tittel"); ingress = resultat.getstring("ingress"); oppslagtekst = resultat.getstring("oppslagtekst"); dato = resultat.getstring("dato"); bruker = resultat.getstring("bruker"); kategori = resultat.getstring("kategori"); treff = resultat.getstring("treff"); forbindelse.close (); catch (SQLException sqle) { sqle.printstacktrace(); public void settittel(string navn) { this.tittel = navn; public void setoppslagtekst(string navn) { this.oppslagtekst = navn; public void setingress(string navn) { this.ingress = navn; public String gettittel() { return tittel;
Datateknikk Side 8 av 8 public String getingress() { return ingress; public String getoppslagtekst() { return oppslagtekst; public String getkategori() { return kategori; public String getdato() { return dato; public String getbruker() { return bruker; public String getoppslagid() { return id; public String gettreff() { return treff; public void lagreoppslag() { try { // Kobler oss opp mot databasen Connection forbindelse = DriverManager.getConnection(url, brukernavn, passord); PreparedStatement uttrykk = null; uttrykk = forbindelse.preparestatement ("UPDATE oppslagstavla set tittel=?, ingress=?, oppslagtekst=? WHERE id=?"); uttrykk.setstring(1,tittel); uttrykk.setstring(2,ingress); uttrykk.setstring(3,oppslagtekst); uttrykk.setstring(4,id); uttrykk.executeupdate(); forbindelse.close (); catch (SQLException sqle) { sqle.printstacktrace();