3. Web sovelluksen asentaminen
Tomcattiin
Palvelimen pystyttämisen jälkeen päästänkin itse asiaan eli laittamaan toimintaan web sovelluksia (deploy web applications). Seuraavassa kuvataan web sovelluksen rakenteen luominen manuaalisesti (ilman war[1] pakettia) ja Tomcat-palvelimeen toimintaan laittaminen. Koodit saat tutor_osa1.zip[2] tiedostosta.
Normaalisti koko web sovellus pakataan yhteen pakettiin jonka tarkennin on war (web archive). Tämän paketin avulla sovelluksen asentaminen on niinkin yksinkertaista, että riittää sijoittaa kyseinen paketti webapps hakemistoon Tomcatin ollessa käynnissä. Tutoriaalissa ei näin ole toimittu. Syy on se, että lukijalle jää parempi kuva siitä, missä hakemistossa mikäkin tiedosto kuuluu olla.
Web sovellusta luodessa hakemistorakenne on oleellinen. Myös kapitaaleilla on merkitystä hakemistojen ja tiedostojen nimissä[3].
Annamme web sovelluksellemme nimeksi tutor. Luo seuraava hakemistorakenne:
1.
TOMCAT_HOME\webapps\
tutor
2.
TOMCAT_HOME\webapps\ tutor \WEB-INF
3.
TOMCAT_HOME\webapps\ tutor \WEB-INF\classes
4.
TOMCAT_HOME\webapps\ tutor \WEB-INF\lib
Lisäksi voit tehdä muita hakemistoja, esimerkiksi hakemiston 1) alle vaikkapa images hakemiston. Hakemistojen merkitys ja käyttö on seuraavanlainen
Jos haluat sisällyttää uuden kirjaston siten, että kaikki websovellukset voivat sitä käyttää, niin sijoita se TOMCAT_HOME\shared\lib hakemistoon.
Yksittäiset luokat voit sijoittaa kaikkien web sovellusten saataville hakemistoon TOMCAT_HOME\shared\classes.
Hakemistojen nimet ja sijainnit saattavat muuttua seuraavissa Tomcatin versioissa (todella epätodennäköistä, ainoa suurempi muutos käyttäjän kannalta viimeisen kahden vuoden aikana on ollut ympäristömuuttujan TOMCAT_HOME nimeäminen CATALINA_HOME nimellä).
Jos haluat käyttää tätä tutoriaalia täsmälleen sellaisena kuin se on nyt, niin käytä varmuuden vuoksi Tomcatin versiota 4.1.12. Suurella todennäköisyydellä tutoriaalin kaikki osat toimivat myös uudemmissa Tomcat-versioissa.
Käsitellessäsi täkeitä XML-tiedostoja server.xml ja web.xml kannattaa niistä pitää varmuuskopioita. Tarina tosielämästä:
Allekirjoittaneella ei Tomcat käynnistynyt XML parserointivirheiden takia. Olin editoinut XML tiedostoja notepadilla, ja sillä kävin ne jälleen läpi. Notepadillä kaikki näytti hyvältä. Avasin XML tiedostot Borlandin JBuilderillä, ja ilmeni että server.xml tiedosto oli vaurioitunut (näkyi tyhjänä). Ilmeisesti ongelma on tiedon siirtämisessä leikepöydän kautta.
Lisäksi xml tiedostot kannattaa validoida. Vanhemmilla Jbuilderin versioilla sovelluksen web.xml tiedosto saattaa vaikuttaa validilta[5], vaikkei se sitä olisi. Tämä saattaa johtaa sovelluksen toimimattomuuteen sekä Tomcatin käynnistymisen hidastumiseen.
Jokaisella Web sovelluksella (jatkossa kutsun tällaista sovellusta lyhenteellä WEBAPP) on yksi ServletContext. Tämän olion avulla kaikki samaa WEBAPPiin kuuluvat servletit ja JSP:t voivat käyttää yhteisiä olioita. ServletContextin voisi kuvata yhteisenä muistiavaruutena saman web sovelluksen komponenttien kanssa (käytännössä samaan WEBAPPiin kuuluvat komponentit ovat siis samassa alihakemistossa TOMCAT_HOME\webapps\websovelluksen_nimi)
ServletContextin voi ilmoittaa server.xml tiedostossa. Tämä on välttämätöntä, mikäli haluat esimerkiksi saada sovelluksesi lokitiedot eri tiedostoon kuin muiden sovellusten lokitiedot.
ServletContext ilmoitetaan lisäämällä Context-elementti HOST-elementin sisään TOMCAT_HOME/conf/server.xml tiedostoon.
Lisätään seuraava teksti Host- elementin sisään (juuri ennen elementin lopetustagia </HOST>):
<Context path="/tutor"
docBase="tutor" debug="0" reloadable="true" />
Tässä path=”/tutor” tarkoittaa sitä, että kaikki kutsut, joissa palvelimen URL-osoitteen perään on laitettu teksti /tutor ohjataan kyseiseen WEBAPPiin.
DocBase attribuuttilla määrätään hakemisto jossa sovellus on. Nyt siis hakemisto olisi TOMCAT_HOME\webapps\tutor .
ServletContextin lisäyksen ja poiston saa tehtyä myös Tomcatin administrator[6] ohjelmalla.
Itseasiassa Tomcat luo ServletContextin automaattisesti käynnistyessään, ellei sitä ole ilmoitettu, mutta ei lisää edellä mainittua elementtiä server.xml tiedostoon. Eli voit käyttää ServletContext-oliota sovelluksessasi ilman sen ilmoittamista
[1] Tarkemmin kerrottu kappaleessa ”WAR ja web sovelluksen käsittely”.
[2] Ks.
http://sinuhe.jypoly.fi/~pkosonen/webapp/
[3] Windowsin käyttäjät erityishuomio!
[4] Ks.
http://java.sun.com/docs/books/tutorial/jar/
[5] Dokumentin rakenne vastaa määritettyä DTD:tä (Document Type Definition), ks, http://java.sun.com/dtd/web-app_2_3.dtd
[6] Ks. http://localhost/admin/