%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% :Tomcat
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\section{Práce se serverem Apache Tomcat 6} \label{Tomcat}

Apache Tomcat je server s~otevřeným zdrojovým kódem (open source) který zahrnuje JSP kontejner (viz. kapitola \ref{JSP}). Je to nejjednodušší dostupný Java server a~hodí se pro nasazení jakékoliv aplikace založené na servletech nebo JSP (například obyčejné JSP, Struts, JSF, JAX-WS, JAX-RS a~další). Tomcat je velmi pohodlný svou malou velikostí a~jednoduchým ovládáním, rovněž se velmi rychle nastartuje (téměř okamžitě) a~nezabírá příliš místa v~paměti. Je ideální pro menší aplikace které nejsou založené na EJB technologii a~hodí se jak pro vývoj a~testování, tak pro finální nasazení aplikace. V~této kapitole si server Tomcat popíšeme blíže, zaměříme se hlavně na nasazení webových aplikací.



\subsection{Instalace}

Tomcat je server založený na Javě, pro jeho spuštění budete potřebovat JDK. Výhodou je, že server lze spustit jak na operačním systému Windows, tak na Linuxu. Tomcat je možné stáhnout na adrese \url{http://tomcat.apache.org}. Zde si můžete vybrat více verzí, pravděpodobně budete chtít poslední vydanou. V~době psaní tohoto textu je to verze 6.0.20. Server si stáhnete jako archív \emph{zip} nebo \emph{tar.gz}. Pokud se nechcete podílet na vývoji Tomcatu, bude vám stačit binární distribuce. Poté stačí archív rozbalit v~nějakém adresáři.

Před samotným spuštěním serveru je potřeba mít nakonfigurované proměnné prostředí. Jak se lze dočíst v~\emph{readme.txt} (součást staženého obsahu), potřebujete založit proměnnou s~názvem \texttt{JAVA\_HOME} která bude ukazovat na cestu ke k~vašemu JDK adresáři (pozor, cesta je bez podadresáře \emph{bin}). Na Windows může cesta vypadat \emph{C:$\backslash$java$\backslash$jre5.0}, na Linuxu například \emph{/usr/local/java/jre5.0}. Konkrétní postup, jak nastavit proměnnou prostředí se na různých operačních systémech liší, budete si ho proto muset dohledat v~nápovědě k~vašemu operačnímu systému.


\subsubsection{Instalace na Linuxu pomocí RPM}

Nainstalování a~zprovoznění Tomcatu pomocí správce balíčků RPM na operačním systému Linux je velmi jednoduché. Dále uvedený postup je platný pro distribuci openSUSE 11.2. Spusťte YaST (přes grafické menu, nebo příkazem \emph{/sbin/yast2 --install}) a~do vyhledávání zadejte klíčové slovo \emph{Tomcat}. U~položky \emph{tomcat6} zatrhněte, že si přejete nainstalovat a~potvrďte volbu stiskem tlačítka OK. Tomcat se vám nainstaluje v~již spustitelné konfiguraci (odpadá potřeba nastavovat proměnné prostředí).

Po instalaci budou na rozdíl od předchozího postupu adresáře Tomcatu rozházené po systému. Nejdůležitější adresáře a~soubory jsou:
\begin{itemize}
\item \emph{/usr/bin/dtomcat6} -- pro spouštění Tomcatu. 
\item \emph{/srv/tomcat6/webapps} -- zde budou uloženy nasazené aplikace.
\item \emph{/etc/tomcat6} -- adresář s~konfiguračními soubory.
\end{itemize}

Pro pohodlnější přístup vedou na všechny tyto adresáře odkazy uložené v~\emph{/usr/share/tomcat6}.




\subsection{Spuštění Tomcatu}

Spuštění Tomcatu je velmi jednoduché. Ve Windows je potřeba spustit soubor \emph{startup.bat}, v~Linuxu alternativně \emph{startup.sh}. Pro ukončení Tomcatu je potřeba stejným způsobem spustit \emph{shutdown.bat} na Windows, resp. \emph{shutdown.sh} na Linuxu.



\subsubsection{Spuštění Tomcatu nainstalovaného přes RPM}

Pokud jste si Tomcat nainstalovali na Linuxu openSUSE 11.2 pomocí správce balíčků, pak je zde výjimka. Tomcat se spouští pomocí příkazu \texttt{dtomcat6 start} 

\begin{figure}[ht]
  \centerline{\includegraphics[height=40mm]{images/Tomcat_dtomcat6_start.png}}
  \caption{Spuštění Tomcatu na Linuxu (RPM).}
\end{figure}

a~ukončuje pomocí \texttt{dtomcat6 stop} z~příkazové řádky.

\begin{figure}[ht]
  \centerline{\includegraphics[height=40mm]{images/Tomcat_dtomcat6_stop.png}}
  \caption{Ukončení Tomcatu na Linuxu (RPM).}
\end{figure}




\subsection{Přístup na server}

Jestli se server správně spustil ověříte tak, že jako adresu do svého webového prohlížeče zadáte \emph{http://localhost:8080}. Měla by se vám zobrazit uvítací stránka Tomcatu, jak ukazuje obrázek \ref{Tomcat Localhost Figure}.

\begin{figure}[ht]
  \centerline{\includegraphics[height=100mm]{images/Tomcat_localhost:8080.png}}
  \caption{Přístup na běžící Tomcat.}
  \label{Tomcat Localhost Figure}
\end{figure}





\subsection{Založení správce serveru}

První věc, kterou potřebujete udělat po zdárně provedené instalaci Tomcatu je vytvořit administrátorský účet v~seznamu uživatelů. Ten je uložen v~souboru \emph{tomcat-users.xml} jako obyčejný text ve formátu XML. Kořenový XML element se jmenuje \emph{tomcat-users} a~je v~souboru zapsán implicitně hned po instalaci. Tomcat rozlišuje jednotlivé uživatele pomocí rolí. Ty jsou definovány každá jako element \emph{role} s~atributem \emph{rolename}, který obsahuje název této role. Ze začátku zde nejsou nastaveni žádní uživatelé, je proto potřeba doplnit minimálně správce serveru. Budete muset upravit soubor tak, aby vypadal takto:

\begin{Verbatim}
<tomcat-users>
    \codeHighlight{<role rolename="manager" />}
    \codeHighlight{<user username="admin"}
    \codeHighlight{      password="adminadmin"}
    \codeHighlight{      roles="manager" />}
</tomcat-users>
\end{Verbatim}

Uživatelské jméno a~heslo pro administrátora jsou čistě na vašem výběru, důležité je pouze, že musí mít nastavenu roli \emph{manager}. Pokud byste chtěli rolí pro jednoho uživatele uvést víc, zapisujte je všechny do stejného XML atributu \texttt{roles} a~oddělujte je od sebe čárkou. Po té, co soubor zeditujete a~uložíte tak budete mít přístup k~Tomcat Manageru pro pohodlné nasazování webových aplikací, o~kterém si řekneme za chvíli.





\subsection{Založení uživatele}

Pro webové aplikace pracující s~autorizací budete potřebovat nastavit ještě další uživatele, než je správce serveru. Začneme tím, že přidáme do souboru \emph{tomcat-users.xml} novou roli. Kromě role \emph{manager} si názvy jednotlivých rolí vymýšlíme. Pokud například máme na Tomcatu nasazenou webovou aplikaci zpracovávající internetové bankovnictví, jeví se jako vhodný název pro roli \texttt{bank\_account\_owner}. Následující příklad ukazuje, jak bude vypadat soubor \emph{tomcat-users.xml} po přidání takovéto role.

\begin{Verbatim}
<tomcat-users>
    <role rolename="manager" />
    \codeHighlight{<role rolename="bank_account_owner" />}

    <user username="admin" 
          password="adminadmin" 
          roles="manager" />
</tomcat-users>
\end{Verbatim}

Poté, co máme roli vytvořenou, potřebujeme k~ní založit jednotlivé uživatele podobně, jako jsme to udělali s~uživatelem \texttt{admin}. Příklad ukazuje, jak na server zařadit uživatele \texttt{netukar} s~rolí \texttt{bank\_account\_owner} a~heslem \texttt{tacmot}.

\begin{Verbatim}
<tomcat-users>
    <role rolename="manager" />
    <role rolename="bank_account_owner" />

    <user username="admin" 
          password="adminadmin" 
          roles="manager" />

    \codeHighlight{<user username="netukar"}
    \codeHighlight{      password="tacmot"}
    \codeHighlight{      roles="bank_account_owner" />}
	
</tomcat-users>
\end{Verbatim}




\subsection{Kontextová cesta}

Kontextová cesta aplikace, tak jak byla popsána v~kapitole \ref{Deployement}, je uložena v~souboru \emph{context.xml}, který je součástí adresáře \emph{META-INF}. Soubor \emph{context.xml} má velmi jednoduchou strukturu. Obsahuje jediný XML element s~názvem \texttt{Context} a~prázdným tělem. V~jeho atributu \texttt{path} je zapsána kontextová cesta. Předpokládejme, že vyvíjíme aplikaci Piggy Bank a~chceme ji testovat na serveru běžícím na našem počítači na portu 8080 (např. na serveru Tomcat s~implicitním nastavením). Aplikaci nasadíme na adrese \emph{http://localhost:8080/piggybank}. Kontextová cesta je tedy \emph{/piggybank}. Příklad ukazuje jak tuto cestu nastavit v~souboru \emph{context.xml}.

\begin{Verbatim}
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/piggybank" />
\end{Verbatim}

\fcolorbox{boxout}{boxin}{
\parbox{0.98\linewidth}{
Bohužel, i~přesto, že webové stránky Tomcatu uvádějí, že kontextová cesta se zjišťuje ze~souboru \emph{context.xml} adresáře \emph{META-INF} vaší webové aplikace, Tomcat 6.0.20 nejspíš celý tento adresář ignoruje. Kontextová cesta je namísto toho sestavena podle jména WAR souboru aplikace (bez přípony \emph{.war}). Tedy pokud se WAR soubor, který jste na Tomcat nahráli jmenoval \emph{Piggy\_Bank.war}, pak kontextová cesta bude \emph{/Piggy\_Bank}. Celá URL pak může vypadat \emph{http://www.myexample.com/Piggy\_Bank/}.
\\
\\
Naštěstí není problém si soubor WAR pojmenovat tak, aby kontextová cesta vypadala jak si přejeme. Pokud chcete v~kontextové cestě lomítko (například \emph{/banking/piggybank}), které není platným znakem pro název souboru, jde toto provést uvedením znaku \texttt{\#} na místě, kde takovéto lomítko chceme. Soubor WAR by se tedy jmenoval \emph{banking\#piggybank.war}.
}}



\subsection{Nasazení aplikace přes správce aplikací}

Nasazení aplikace pomocí rozhraní Tomcatu je velmi jednoduché. Na hlavní stránce Tomcatu klikněte v~menu na odkaz \emph{Tomcat Manager}. Alternativně můžete do webového prohlížeče zadat adresu \emph{http://localhost:8080/manager/html} (pokud Tomcat běží na vzdáleném počítači, nahraďte část \emph{localhost} adresou tohoto počítače). Prohlížeč vám zobrazí autorizační dialog do kterého musíte uvést uživatelské jméno a~heslo, které jsme nastavovali dříve v~této kapitole. Po zadání těchto údajů se zobrazí seznam všech nasazených aplikací, pod kterým je v~rámečku \emph{Deploy} pole pro zadání cesty k~souboru WAR s~webovou aplikací. Zajímavá je podsekce \emph{WAR file to deploy}, která vám umožní nahrát na Tomcat soubor WAR z~disku na vašem počítači. Stačí ho pouze vybrat a~volbu potvrdit. Ovládání je stejné jako při výběru souboru v~operačním systému.





\subsection{Manuální nasazení aplikace}

Pokud nemáte přístup k~Tomcat Manageru, můžete aplikace velmi jednoduše nasadit sami tak, že soubor WAR s~aplikací nahrajete do adresáře \emph{webapps}, který je součástí Tomcatu. Podle konfigurace Tomcatu někdy namísto souboru WAR musíte nahrát adresář aplikace (tj. extrahovat zde archív WAR). Tomcat není zapotřebí restartovat, po nějaké chvíli si aplikaci sám najde a~zpřístupní ji za běhu.




\subsection{Odinstalace}

Pokud chcete Tomcat odstranit, je možné jednoduše smazat celý adresář, ve kterém se nachází. Proměnnou prostředí \texttt{JAVA\_HOME} můžete zrušit, ale pokud ji v~operačním systému necháte, nic se tím nepokazí. Pokud jste Tomcat instalovali na Linuxu pomocí správce balíčků, odinstalujte jej přes něj. Postup je obdobný jako při instalaci.




\subsection{Závěr}

Tomcat představuje jednoduchý server určený pro Javovské webové aplikace. Je možné na něm nasadit servlety, JSP stránky i~aplikace ve frameworcích Struts, JSF, JAX-WS, JAX-RS a~dalších. Neumí pracovat s~EJB. Celý server běží velmi dobře i~ve výchozím nastavení a~je nenáročný jak z~hlediska času spuštění, tak z~hlediska operační paměti.

Použitá literatura:\\
\cite{Tomcat Homepage} \emph{Domovská stránka serveru Tomcat}

