Vytvorenie a nasadenie webových aplikácií pre Tomcat pomocou Eclipse

Róbert Novotný

Prehľad revízií
Revízia 1.012. marca 2006

Prvé vydanie

Revízia 1.0.122. októbra 2006

Opravená konfigurácia automatického načítavania kontextu pre Tomcat verzie 5.5.18 a novšej.

Revízia 1.113. decembra 2006

Pridaná sekcia o nutnosti vložiť do projektu JAR súbory s interfaceamy pre servlety a JSP.


1. Úvod
2. Vytvorenie projektu
2.1. Adresárová štruktúra
2.2. Vytvorenie projektu v Eclipse
2.3. Konfigurácia webovej aplikácie v Tomcate
3. Otestovanie konfigurácie
3.1. Test statického súboru
3.2. Test dynamickej JSP stránky
4. Záverečné poznámky
A. Alternatívny spôsob vytvorenia projektu v Eclipse

1. Úvod

V tutoriále popíšeme vytvorenie webovej aplikácie využívajúcej servlety a JSP pomocou Eclipse a jej nasadenie na server Apache Tomcat 5.5.x.

Predpokladáme korektne nainštalovaný server Apache Tomcat a nainštalované prostredie Eclipse s workspace nastaveným do adresára C:\Projects. V tutoriále budeme predpokladať, že premenná prostredia %CATALINA_HOME% odkazuje do adresára v ktorom je nainštalovaný Tomcat.

2. Vytvorenie projektu

2.1. Adresárová štruktúra

Najprv vytvoríme adresárovú štruktúru pre projekt. Budeme sa držať odporúčaní Java Sun BluePrints pre webové aplikácie.

Obrázok 1. Odporúčaná adresárová štruktúra

Odporúčaná adresárová štruktúra

Tabuľka 1. Popis adresárov

seminarAdresár obsahujúci projekt pre Eclipse. Tento adresár by sa mal nachádzať v adresári workspaceu prostredia Eclipse. Pre účely tutoriálu budeme predpokladať, že workspace je v adresári C:\Projects.
srcAdresár pre zdrojové súbory (*.java). V tomto adresári sa nachádza koreň adresárovej štruktúry zodpovedajúcej balíčkom. Teda napr. trieda seminar.lib.Utils sa bude nachádzať v adresári C:\Projects\seminar\src\seminar\lib\Utils.java
webKoreňový adresár pre statické komponenty webovej aplikácie, t. j. pre HTML súbory, obrázky a pod.
WEB-INFAdresár pre konfiguračné nastavenia webovej aplikácie. Názov tohto adresára musí byť uvedený veľkými písmenami!
classesAdresár pre skompilované CLASS súbory. Podadresáre v tomto adresári musia zodpovedať balíčkom. Teda napr. skompilovaná trieda seminar.lib.Utils sa bude nachádzať v adresári C:\Projects\seminar\web\WEB-INF\classes\seminar\lib\Utils.class
libAdresár pre knižnice v archívoch JAR, ktoré webová aplikácia využíva.

2.2. Vytvorenie projektu v Eclipse

Na základe adresárovej štruktúry teraz vytvoríme nový projekt Eclipse. Použitím klasického FileNewProjectJava Project spustíme sprievodcu vytvorením projektu. Do názvu projektu uvedieme seminar. Eclipse zahlási, že v tom adresári spozoroval adresárovú štruktúru a pokúsi sa zdetekovať umiestnenia zdrojových kódov.

Obrázok 2. Založenie projektu

Založenie projektu

Tento fakt vezmeme na vedomie a prejdeme do ďalšieho kroku sprievodcu.

Obrázok 3. Automatická detekcia adresárov

Automatická detekcia adresárov

Eclipse sa snažil zdetekovať adresáre pre zdrojové súbory i pre binárne súbory. Žiaľ, neúspešne. Mylne sa totiž domnieva, že koreňovým adresárom pre zdrojové súbory je adresár C:\Projects\seminar. Tento predpoklad je ale nesprávny, pretože my chceme mať zdrojové súbory v adresári C:\Projects\seminar\src. Ideme teda mýlku Eclipse opraviť.

Klikneme na položku seminar v strome a zvolíme položku Remove project 'seminar' from build path (Odstrániť projekt seminar z cesty pre kompilovanie). Týmto krokom ale docielime iba akýsi medzistav, v ktorom nemáme definované adresáre pre zdrojové kódy (a náš projekt asi bude mať nejaký kód, však?). To však hneď napravíme.

Klikneme v strome na položku src a klikneme na položku Add folder 'src' to build path (Pridať adresár src to cesty pre kompilovanie).

Obrázok 4. Nastavenie adresára pre zdrojové kódy

Nastavenie adresára pre zdrojové kódy

Eclipse nám oznámi, že prestane považovať adresár projektu (t. j. adresár C:\Projects\seminar) za koreňový adresár pre zdrojové kódy.

Obrázok 5. Potrvrdenie úprav

Potrvrdenie úprav

Po potvrdení by sme mali dostať už korektnú situáciu, podľa ktorej máme ako adresár zdrojových kódov nastavený adresár C:\Projects\seminar\src.

Obrázok 6. Situácia s korektným nastavením adresára zdrojových kódov

Situácia s korektným nastavením adresára zdrojových kódov

Ostáva nám už len nastaviť adresár pre binárne súbory (súbory *.class). To nastavíme kliknutím na Browse... pri Default output folder. Nastavíme adresár seminar/web/WEB-INF/classes. Kliknutím na Finish je tvorba projektu v Eclipse skončená.

V našej webovej aplikácii zrejme budeme chcieť popri JSP stránkach vyvíjať aj servlety. Musíme preto zabezpečiť, aby náš projekt mal prístup k základným Java triedam a interfaceom, ktoré tvoria jadro tejto technológie.

Poznámka

Servlety a JSP sú technológiou, ktorej vývoj, normy a špecifikácie sú riadené cez tzv. Java Community Process, čo je formálny proces umožňujúci zainteresovaným stranám ovplyvňovať vývoj platformy Java. Tejto konkrétnej technológii zodpovedá jednak formálna špecifikácia JSR 53 a jedna sada Java interfaceov a tried, ktoré reprezentujú programátorský základ tejto technológie.

Tie sú reprezentované triedami a rozhraniami z balíčkov javax.servlet a javax.servlet.jsp. Čitateľ si rýchlo všimne, že v štandardnej edícii Java Development Kitu™ sa tieto triedy nenachádzajú - sú totiž súčasťou až Java Development Kit Enterprise Edition™. Našťastie nie je vonkoncom potrebné mať k dispozícii kompletnú megainštaláciu JDK EE, pretože tieto triedy a interfacey sú k dispozícii priamo v inštalácii Tomcatu, konkrétne v JAR archívoch servlet-api.jar a jsp-api.jar nachádzajúcich sa v podadresári common/lib inštalácie Tomcatu.

Tieto JAR archívy pridáme do nášho projektu štandardným spôsobom. Na karte Libraries zvolíme položku Add external JARs... a vyhľadáme v ich súborovom systéme. (Ak archívy pridávame do projektu až po jeho vytvorení, k tejto karte sa dopracujeme cez ProjectPropertiesJava Build Path

Obrázok 7. Pridanie externého JAR archívu

Pridanie externého JAR archívu

2.3. Konfigurácia webovej aplikácie v Tomcate

V serveri Tomcat môže byť nasadených viacero webových aplikácií zároveň. Každej webovej aplikácii prislúcha cesta v URL adrese, ktorá predstavuje jej koreňový adresár. V Tomcate je spolu s inštaláciou zabudovaná webová aplikácia manager. Tá má koreňový adresár v adresári %CATALINA_HOME%\server\webapps\manager (premenná %CATALINA_HOME% predstavuje adresár, v ktorom je nainštalovaný Tomcat) a zodpovedá jej URL adresa http://localhost:8080/manager.

Poznámka

Nemýľme si koreňový adresár webovej aplikácie s koreňovým adresárom projektu v Eclipse! Za koreňový adresár webovej aplikácie považujeme adresár, ktorý v sebe obsahuje adresár WEB-INF. Za koreňový adresár projektu považujeme adresár vo workspace Eclipse so štruktúrou uvedenou v sekcii Adresárová štruktúra.

Našu aplikáciu seminar potrebujeme nakonfigurovať v podobnom duchu.

  1. Koreňovým adresárom projektu je teda C:\Projects\seminar.

  2. Koreňovým adresárom webovej aplikácie je adresár obsahujúci podadresár WEB-INF, čiže adresár C:\Projects\seminar\web.

  3. Názov webovej aplikácie bude seminar a zodpovedať jej bude URL adresa http://localhost:8080/seminar.

Zoznam webových aplikácií, ktoré sú nakonfigurované v Tomcate, je reprezentovaný súbormi v adresári %CATALINA_HOME%\conf\Catalina\localhost. V tomto adresári sa nachádza niekoľko súborov s príponou XML - každý z nich obsahuje nastavenia pre jednu webovú aplikáciu.

V tomto adresári vytvoríme nový textový súbor seminar.xml a uvedieme doň nasledovné nastavenia:

<Context docBase="C:\projects\seminar\web" reloadable="true" backgroundProcessorDelay="3" />

Názov súboru (seminar.xml) reprezentuje názov webovej aplikácie a z toho vyplývajúcej URL adresy. Atribút docBase predstavuje cestu ku koreňovému adresáru webovej aplikácie. Položka reloadable určuje automatické načítavanie súborov obsahujúcich skompilované triedy v prípade, že zmeníme niektorú z tried webovej aplikácie. Atribút backgroundProcessorDelay určuje, že zisťovanie zmien súborov skompilovaných tried sa bude diať každé 3 sekundy.

Poznámka

Atribúty reloadable a backgroundProcessorDelay je možné vynechať. To ale znamená, že pri zmene a skompilovaní tried projektu bude nutné reštartovať Tomcat, čo je pomerne otravná činnosť.

Atribút backgroundProcessorDelay je v platnosti od verzie 5.5.18. Konfiguráciu pre staršie verzie si overte v dokumentácii.

Uložením tohto súboru a reštartovaním Tomcata dokončíme konfiguráciu.

3. Otestovanie konfigurácie

Konfiguráciu Tomcata otestujeme vytvorením jedného statického súboru a jednej JSP stránky.

3.1. Test statického súboru

V koreňovom adresári webovej aplikácie (t. j. v adresári C:\Projects\seminar\web) vytvoríme pokusný HTML súbor hello.html s nasledovným obsahom:

<html>
  <h1>Hello World</h1>
</html>

Otestujeme ho navštívením adresy http://localhost:8080/seminar/hello.html.

3.2. Test dynamickej JSP stránky

V koreňovom adresári webovej aplikácie (t. j. v adresári C:\Projects\seminar\web) vytvoríme pokusnú JSP stránku hello.jsp s nasledovným obsahom:

<%= new java.util.Date() %>

Otestujeme ho navštívením adresy http://localhost:8080/seminar/hello.jsp. Mali by sme vidieť reťazec s aktuálnym dátumom a časom.

4. Záverečné poznámky

Ak sa testy stránok nepodaria, medzi najčastejšie chyby patrí uvedenie nesprávneho adresára v atribúte docBase v konfiguračnom súbore pre webovú aplikáciu. Skontrolujme preto nastavenie tejto hodnoty.

Adresárová štruktúra uvedená na začiatku kapitoly je len odporúčanou adresárovou štruktúrou. Technicky nič nebráni mať v jedinom adresári uložené aj statické súbory stránok (t. j. HTML súbory, obrázky) spolu so zdrojovými kódmi tried.

Je tu však jeden zádrheľ: adresárovú štruktúru v adresári WEB-INF je nutné dodržiavať v tom zmysle, že skompilované triedy webovej aplikácie sa MUSIA nachádzať v adresári WEB-INF\classes a prípadné knižnice JAR sa MUSIA nachádzať v adresári WEB-INF\lib. V opačnom prípade nebudú vaše skompilované súbory, či JAR knižnice nájdené.

Webová aplikácia musí obsahovať vo svojom koreňovom adresári podadresár WEB-INF s príslušnými podadresármi aj v prípade, že by mali byť prázdne! (Tomcat verzie 5.5.x sa vie vysporiadať aj s prípadom, keď (veľmi jednoduchý) projekt adresár WEB-INF neobsahuje, ale predošlé verzie s tým mali značné problémy).

A. Alternatívny spôsob vytvorenia projektu v Eclipse

V tejto sekcii použijeme alternatívny spôsob vytvorenia nového projektu v Eclipse. Použitím klasického FileNewProjectJava Project spustíme sprievodcu vytvorením projektu. Do názvu projektu uvedieme seminar. Eclipse zahlási, že v tom adresári spozoroval adresárovú štruktúru a pokúsi sa zdetekovať umiestnenia zdrojových kódov.

Obrázok A.1. Založenie projektu

Založenie projektu

Tento fakt vezmeme na vedomie a prejdeme do ďalšieho kroku sprievodcu.

Obrázok A.2. Automatická detekcia adresárov

Automatická detekcia adresárov

Opravu adresárov však vykonáme inak. Vytvorenie projektu dokončíme hneď teraz kliknutím na Finish a nastavenia zmeníme iným spôsobom.

V strome v pohľade Package Explorer klikneme pravým tlačidlom na názov projektu a z kontextového menu vyberieme Properties.

Obrázok A.3. Kontextové menu pre vlastnosti projektu

Kontextové menu pre vlastnosti projektu

V zobrazenom dialógu vyberieme zo stromu položku Java Build Path a kartu Source. Tu môžeme nastaviť adresáre pre zdrojové súbory tried i pre skompilované súbory. V nastavení, ktoré je uvedené na nasledovnom obrázku, je ako adresár pre zdrojové súbory nastavený adresár projektu (teda adresár C:\Projects\seminar), čo je nesprávna hodnota.

Nesprávnu hodnotu odstránime kliknutím na položku seminar a následne na tlačidlo Remove. Korektný adresár pridáme pomocou Add folder... a začiarknutím adresára src.

Obrázok A.4. Výber zdrojového adresára

Výber zdrojového adresára

Nastavenie potvrdíme kliknutím na Yes v otázke Do you want to remove the project as source folder? (Želáte si zrušiť nastavenie, podľa ktorého je adresár projektu zároveň adresárom zdrojových súborov?).

Ďalej nastavíme adresár pre skompilované triedy do adresára seminar\web\WEB-INF\classes, čím získame výsledný stav ako nasledovnom obrázku:

Obrázok A.5. Správne nastavenie adresárov

Správne nastavenie adresárov

Nastavenie potvrdíme kliknutím na OK.