Jakarta Tomcat

Bohdan Čech, shake@mail.muni.cz


Obsah


O projektu Jakarta Tomcat

Jakarta, nebo také Apache Jakarta je projektem organizace Apache Software Foundation. Hlavní portál projektu najdeme na adrese http://jakarta.apache.org. Cílem projektu Jakarta je vytvářet kvalitní open-source řešení serverových aplikací pro Java platformu. V současné době se jedná o nejkomplexnějsí volně šiřitelné řešení pro serverové aplikace.

Jedním ze stěžejních podprojektů projektu Jakarta je projekt Jakarta Tomcat, také nazývaný jako Apache Tomcat. Tomcat je oficiální referenčňí implementace technologií Java Servlet a Java Server Pages (JSP), obojí vyvíjené pod záštitou společnosti SUN. Ve své stabilní řadě 4.1 Tomcat nabízí podporu pro Java Servlet verze 2.3 a JSP verze 1.2. Budoucí řada 5, která je nyní ve fázi alfa testování, pak nabídne podporu Java Servlet verze 2.4 a JSP verze 2.0 .


Vysvětlení pojmů aneb co je to ten servlet?

Servlety a JSP vznikly jako odpověď technologie Java na programování serverových aplikací pomocí technologií CGI (Common Gateway Interface), PHP (PHP: Hypertext Preprocessor).
Servlet je program napsaný v jazyce Java, který běží na serveru, a který dokáže zpracovávat požadavky zaslané pomocí HTTP protokolu a dokáže na ně HTTP protokolem odpovídat. V podstatě se dá říct, že každý servlet je malý webový server. Aplikace typu Tomcat je potom jakýsi zásobník servletů, který se stará o jejich spouštění, běh, ukončení, komunikaci s klienty a další věci. V podstatě by bylo možné zpracovávat i požadavky jiných druhů serverů (nejen HTTP), ale v praxi se jiné použití, než právě pro HTTP neuchytilo, a proto se dnes místo HTTP Servlet používá zkracené Servlet. Tady budu tedy hovořit pouze o HTTP Servletech.
JSP je technologie umožňující směšovat statické HTML stránky s dynamicky generovaným obsahem a je jistou analogií s technologiemi jako jsou ASP či PHP. JSP stránky je možno používat i samostatně, ale podstatně lepší využití je ve spolupráci JSP a Servletů. Servlet samotný je totiž poměrně nešikovný jako nástroj pro vytváření statického HTML kódu (out.println("<TITLE>Titulek</TITLE>");). JSP se proto používá ke směšování statických částí HTML stránek, které jsou napsány v klasickém HTML kódu, s dynamickými částmi, které jsou vytvářeny pomocí servletu.

Nezbytná ukázka servletu Hello World! :-)
Hello.java:

	import javax.servlet.*;
	import javax.servlet.http.*;
			
	public class Hello extends HttpServlet
		{
			public void doGet (HttpServletRequest request, HttpServletResponse response)
				throws ServletException
			{
				PrintWriter out;
				String title = "Example Hello World! Servlet";
				response.setContentType("text/html");
				out = response.getWriter();
				out.println("<HTML><HEAD><TITLE>");
				out.println(title);
				out.println("</TITLE></HEAD><BODY>");
				out.println("HELLO WORLD!");
				out.println("</BODY></HTML>");
				out.close();
			}
		}
	}
		

A to samé pomocí JSP
Hello.jsp:

	<%
		String title = "Example Hello World! JSP";
	%>
	<HTML>
	<HEAD>
		<TITLE><= title %></TITLE>
	</HEAD>
	<BODY>
		HELLO WORLD!
	</BODY>
	</HTML>
		


Praktické využití a výhody oproti jiným řešením

Možností praktického využití této technologie je mnoho. Tato technologie poslouží stejně dobře pro malé stránky s dynamickým obsahem, stejně jako pro rozsáhlé portály a informační systémy. Správná kombinace Servletů a JSP nám umožní vytvářet stránky jednoduchostí PHP a s možnostmi CGI. Přitom naše aplikace budou přenositelné a bezpečné.

Hlavní výhody oproti CGI


Instalace

Tomcat je dostupný jak v binární formě tak ve formě zdrojových kódů. Jelikož aplikace potřebuje pro svůj běh mnoho knihoven (převážne v jazyce Java), nebudu se zabývat překladem aplikace ze zdrojových kódů (Postup při kompilaci nalezneme zde). V binárním balíku již všechny potřebné knihovny jsou obsaženy.
Postup při instalaci:


Konfigurace a běh

Po úspěšné instalaci můžeme přistoupit ke konfiguraci našeho serveru. Všechny konfigurační soubory jsou v adresáři $CATALINA_HOME/conf.
Soubor catalina.policy slouží k nastavení Java Security Manageru. Tyto práva se aplikují pouze v případě, že je Tomcat spuštěn s parametrem "-security".
jk2.properties slouží pro nastavení modulu pro spolupráci s web servery pomocí protokolu AJP (Apache JServ Protocol), který zvládá nejen Apache, ale i IIS, Netscape/iPlanet nebo Domino. Soubor server.xml obsahuje kompletní nastavení aplikace Tomcat.
V souboru tomcat-users.xml se nastavují uživatelé a přiřazují se jim práva k jednotlivým aplikacím. Po nainstalování je zde třeba vytvořit uživatele pro aplikaci manager (V roles musí mít manager), který pak může spravovat servlety pomocí webového rozhraní.
V souboru web.xml se nastavují inicializační hodnoty pro všechny webové aplikace. Servlety jsou pak schopny tyto inicializační hodnoty číst a využít.

Konfigurace samotné aplikace (server.xml):

V souboru jsou komentáře prakticky ke každé položce a proto zde uvedu jen ty nejdůležitější časti konfigurace. Hlavní element celého XML souboru je element Server, který představuje celý server. Jeho parametry jsou nastavení portu (pouze pro interní použití), debug a hesla pro shutdown. Shutdown serveru se provede prostým zasláním uvedeného hesla na uvedený port, proto vřele doporučuju heslo změnit z defaultniho SHUTDOWN na nějaké jiné a omezit přístup na port zvenčí.
Důležitým podelementem je Service, který představuje službu serveru. Každá služba (service) se dá chápat jako samostatný server. Definuje se v ní :

Možností nastavení je poměrně hodně, proto je třeba prostudovat dokumentaci, pro řádné seznámení s možnostmi aplikace a s podrobným nastavením.


Spolupráce s web servery, především Apache

Aplikace Tomcat umí vyřizovat požadavky HTTP a to nejen na servlety, ale také na statické stránky, případně tyto požadavky přesměrovávat apod. Dá se tedy říct, že Tomcat obsahuje webový server. Nemá však takové možnosti nastavení, jako například Apache a není ani zdaleka tak efektivní. Proto je vhodné používat Tomcat s nějakým webserverem, kdy webserver uspokojuje všechny požadavky a pouze ty, určené pro Tomcat, předává dál. Popíši tady řešení, které se používá při spolupráci se serverem Apache.
Pro spolupráci se používa modul mod_jk, který stáhneme a přeložíme. Do httpd.conf pak přidáme tyto řádky:

		LoadModule jk_module libexec/mod_jk.so
		AddModule mod_jk.c
		JkWorkersFile /etc/httpd/workers.properties
		JkLogFile /var/log/httpd/mod_jk.log
		JkLogLevel info
		

Dúležitý je především JkWorkersFile, který ukazuje na soubor s definicí tzv. workers, kteří v podstatě zajišťují komunikaci. Jak vytvořit tento soubor se můžeme dozvědět třeba zde. Stejné nastavení pak musíme umístit do adresáře conf aplikace Tomcat.

Potom už stačí přidat do definice virtuálního webu například:

		JkMount /servlets/* ajp13
		JkMount *.jsp ajp13
		

Což zpúsobí, že všechny požadavky na soubory s příponou jsp, případně požadavky pod /servlets/, budou přesměrovány na Tomcat.


Shrnutí a užitečné odkazy

Rozchodit Apache ve spolupráci s Apache Tomcat je složitější, než třeba v případě použití PHP. Investovaný čas se však určitě vyplatí. Některá vývojová prostředí pro Javu jako například NetBeans umožňují přímý vývoj aplikací na bázi servletů a JSP a umí automaticky upravovat konfiguraci serveru Tomcat podle potřeb. Použití je pak naprosto triviální.

Související odkazy: