Tee uusi itsenäinen ohjelma, raportointisovellus, jota käytetään selaimesta käsin HTML-sivujen avulla. Tätä varten toteutetaan oma HTTP-palvelin.
Ohjelmaa käytetään selaimen läpi
siten, että annettaessa selaimelle osoite http://127.0.0.1:2000/
tulee näkyviin HTML-sivu, jossa on linkit ohjelmalla tuotettaviin
raportteihin. Osoitteesta http://127.0.0.1:2000/jasenlistaus
saa
Jäsenlistaus -raportin ja osoitteesta http://127.0.0.1:2000/tyyppitilasto
saa Tyyppitilasto -raportin. Muista osoitteista tulee 'Sivua ei löydy' -tyyppinen virheilmoitus.
Molempien ohjelmien (Jäsenrekisterin graafisen hallintaohjelman ja raportointipalvelimen) tulee käyttää samoja Jasen, Jasentyyppi ja Luottamustoimi-luokkia sekä samaa raportin HTML:ksi muotoilu -logiikkaa.
Raportit tulostetaan nyt tiedoston sijasta TCP/IP -soketin läpi selaimelle. Tätä varten täytyy pystyttää serverisoketti kuuntelemaan jotain vapaata porttia (esim. 2000). Selaimelle asetetaan tällöin osoitteeksi: http://koneenIP:2000. Eli ohjelman tulee toimia HTTP-palvelimena.
Tätä varten tarvitaan java.net.ServerSocket ja java.net.Socket -luokkia. ServerSocket.accept() -kutsu palautuu, kun joku on ruvennut kuuntelemaan ao. porttia. Socket.getInputStream() ja .getOutputStream antavat streamit; joita voidaan käsitellä kuten tiedostoja.
HTTP-protokollassa selaimen ja serverin välinen keskustelu tapahtuu yksinkertaistettuna seuraavasti:
Selain lähettää merkkijonon: --------------------------------- GET /raportit/raportti1.html HTTP/1.1 selaimen tyyppi muutatietoa etc. ---------------------------------- eli viesti loppuu kahteen peräkkäiseen rivinvaihtoon. (Formeilla rivinvaihtojen jälkeen tulisi formin data.) /raportit/raportti1.html -tarkoittaa sivun polkua ao. serverillä. Serveri vastaa: --------------------------------- HTTP/1.1 200 OK pvm... Content-Length: 2863 Connection: close Content-Type: text/html Cache-Control: no-cache Pragma: no-cache selaimen tyyppi.... muuta tietoa <html> HTML-sivun sisältö </html> ---------------------------------- Header-osan ja sisältö osan välissä on samalla tavoin kaksi peräkkäistä rivinvaihtoa.
Content-Length -rivillä on siirrettävän sivun koko. Tätä ei tarvita, jos sivu on HTML-sivu (selain osaa päätellä sivun koon).
Tässä tapauksessa muiden parametrien (Connection, Content-Type, Cache-Control, Pragma) kannattaa olla ylläolevissa arvoissa, jotta selain ymmärtää, että siirrettävä data on HTML:ää ja ettei dataa tule säilöä välimuistiin.
Protokollan toimintaa voi tutkia esim. telnet:llä ottamalla yhteyden johonkin HTTP-palvelimeen (porttiin 80). eli esim.:
[aapo@veto-k1 tehtavat]$ telnet 192.168.168.1 80 Trying 192.168.168.1... Connected to 192.168.168.1. Escape character is '^]'. GET / HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 25 May 2001 13:57:38 GMT Server: Apache/1.3.12 (Unix) (Red Hat/Linux) PHP/3.0.15 mod_perl/1.21 Last-Modified: Fri, 23 Feb 2001 12:48:44 GMT ETag: "403a-b2f-3a965c2c" Accept-Ranges: bytes Content-Length: 2863 Connection: close Content-Type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> etc.
Oman palvelimen toimintaa voi tutkia samoin komennolla telnet 127.0.0.1 2000
.