Edellisessä osassa luotiin ensimmäinen Servlet, sekä näytettiin tietoa JSP-sivun avulla.
Tässä osassa luodaan lomake, johon syötetyt tiedot voidaan lähettää palvelimelle varastoon. Sovellus ei käytä tietokantaa.
Html-tägi <form> aloittaa lomakkeen. Lomakkeessa voi olla esimerkiksi tekstikenttiä, valintakenttiä, erilaisia listoja ja nappuloita. Verkosta löytyy useita Html-oppaita, muunmuassa W3Schools tarjoaa hyviä oppaita eri html:n osa-alueisiin: http://www.w3schools.com/html/.
Lomakkeella on (ainakin) kolme attribuuttia, sen nimi (name), osoite johon lomakkeen tiedot lähetetään (action), sekä lähetysmetodi (method). Metodi get lisää lomakkeen tiedot osoitteen jatkoksi, kun taas metodi post lähettää tiedot osana pyyntöä.
Lisätään lista.jsp tiedostoon lomake, jossa kysytään uimarin nimeä ja syntymävuotta. Komento ${pageContext.request.contextPath} palauttaa polun web-sovellukseen (koita mihin pyyntö menee ilman polkua!).

Lomake näkyy myös web-sivulla.

Kun Lähetä-nappia painaa, päädymme virhesivulle, sillä osoitetta /UimariHarjoitus/LisaaUimari ei löydy.

Luodaan seuraavaksi Servlet uimarin lisäämistä varten. Anna servletin nimeksi LisaaUimariServlet, ja aseta sen poluksi /LisaaUimari.

Muokkaa servletin koodia siten, että pyynnön parametrit nimi ja syntymaVuosi tulostetaan konsoliin. Huomaa, että nimi ja syntymaVuosi ovat lomakkeen kenttien nimet!

Nyt kun täytät lomakkeen ja painat lähetä, huomaat että viesti menee perille!


Lisätään ensiksi rekisteri LisaaUimariServlet-luokkaan, ja tallennetaan uusi uimari rekisteriin.

RequestDispatcher-luokalla on myös metodi forward, jolla pyynnön voi ohjata toiseen osoitteeseen. Lähetetään pyyntö uimarin tallennuksen jälkeen Lista-servletille.

Kun lomake on lähetetty, käyttäjä näkee taas saman lista-sivun. Huomaa että osoite on kuitenkin /LisaaUimari, eli osoite jonne uimarin tiedot lähetettiin. Uimaria ei ole lisätty listalle, Miksi?

Uimaria ei lisätty listalle, koska rekisteri on Servlet-kohtainen. Luodaan köyhän miehen tietovarasto muuttamalla uimarit-attribuutti Rekisteri-luokasta staattiseksi. Poistamme myös listan luonnin konstruktorista, ja siirrämme sen luokkaan liittyväksi.

Muuta myös ListaServlet-luokan metodia processRequest siten, että se vain ottaa rekisteristä sieltä olevat uimarit ja lisää ne pyynnön attribuutiksi.

Nyt voit lisäillä uimareita

Huomaa, että uimarit katoavat aina kun ohjelmisto käynnistetään uudestaan. Myöskään virheellisiä pyyntöjä ei käsitelty tässä millään tavalla.
Seuraavaksi tutustutaan tietokannan käyttöön