Ako na Apache Tomcat

Včera som sa rozhodol napísať si svoj prvý servrlet a prvú otázku ktorú som si položil bola ktorý webový aplikačný server si mám zvoliť Apache Tomcat alebo GlassFish.

Keďže môj otec už dlhšiu dobu používa GlassFish tak som sa preň rozhodol aj ja. Netušil som však, že ma čakajú problémy ktoré ma donútia zmeniť moju voľbu na Tomcat.

Teraz ukážem 2 spôsoby ako Apache Tomcat nainštalovať na systéme Fedora, RHEL alebo CentOS s tým, že by to malo fungovať aj pod inými distribúciami.

1. Apache Tomcat nezávislý od Eclipse

Spustíme si terminál ako používateľ root.

A - Inštalácia JDK

Poslednú verziu JDK je možné stiahnuť tu: http://www.oracle.com/technetwork/java/javase/downloads/index.html

Ako prvé vytvoríme nový priečinok /usr/java a presunieme sa doň.

root@linux ~ $ mkdir /usr/java
root@linux ~ $ cd /usr/java
root@linux java $

Do novo vytvoreného priečinka stiahneme JDK a rozbalíme.

root@linux java $ tar -xzf jdk-7u51-linux-x64.tar.gz

Toto nám vytvorilo priečinok /usr/java/jdk1.7.0_51 ktorý bude našim JAVA_HOME.
Teraz môžeme nastaviť JAVA_HOME pre všetkých používateľov jednoduchým pridaním serie príkazov do súboru /etc/profile.

JAVA_HOME=/usr/java/jdk1.7.0_51
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH

Po tomto pridaní by sme sa mali odhlásiť a znova prihlásiť a skontrolovať či JAVA_HOME pracuje správne.

root@linux ~ $ echo $JAVA_HOME
/usr/java/jdk1.7.0_51

B - Stiahnutie a rozbalenie Tomcatu

Tomcat budeme inštalovať do priečinku /usr/share a tak sa doň presunieme a stiahneme si Tomcat (v mojom prípade apache-tomcat-7.0.52.tar.gz).

root@linux ~ $ cd /usr/share
root@linux share $ wget http://tux.rainside.sk/apache/tomcat/tomcat-7/v7.0.52/bin/apache-tomcat-7.0.52.tar.gz

Pre overenie správnosti stiahnutia môžeme použiť md5sum ktorý najdeme ja na stránkach Tomcatu.

root@linux share $ md5sum apache-tomcat-7.0.52.tar.gz
3d780939cc4fce1661e7411bbd640c09  apache-tomcat-7.0.52.tar.gz

Teraz archív rozbalíme a mal by nám vzniknúť priečinok /usr/share/apache-tomcat-7.0.52.

root@linux share $ tar -xzf apache-tomcat-7.0.52.tar.gz
root@linux share $ ls -l | grep apache
drwxr-xr-x 9 root root 4096 feb 23 12:24 apache-tomcat-7.0.52

C - Nastavenie Tomcatu aby bežal ako servis

Teraz vytvoríme skript tak aby bolo možné Tomcat spúšťať/vypínať/reštartovať ako servis a aby sa nám spustil pri boote.
Presunieme sa do priečinku /etc/init.d a vytvoríme skript ktorý sa bude volať 'tomcat'.

root@linux ~ $ cd /etc/init.d
root@linux init.d $ vim tomcat

Tu je telo nášho skriptu:

#!/bin/bash
# description: Tomcat Start Stop Restart
# processname: tomcat
# chkconfig: 234 20 80
JAVA_HOME=/usr/java/jdk1.7.0_51
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CATALINA_HOME=/usr/share/apache-tomcat-7.0.52

case $1 in
start)
sh $CATALINA_HOME/bin/startup.sh
;;
stop)
sh $CATALINA_HOME/bin/shutdown.sh
;;
restart)
sh $CATALINA_HOME/bin/shutdown.sh
sh $CATALINA_HOME/bin/startup.sh
;;
esac
exit 0

Je potrebné nastaviť súboru správne práva.

root@linux init.d $ chmod 755 tomcat

Teraz použijeme chkconfig utilitu na nastavenie automatického spúšťania Tomcatu pri boote.

root@linux init.d $ chkconfig --add tomcat
root@linux init.d $ chkconfig --level 234 tomcat on
root@linux init.d $ chkconfig --list tomcat
tomcat          0:off   1:off   2:on    3:on    4:on    5:off   6:off

Ešte by sme mali skontrolovať Catalina.out log či sa nevyskytli nejaké chyby.

root@linux ~ $ more /usr/share/apache-tomcat-7.0.29/logs/catalina.out

D - Púšťanie Tomcatu ako neprivilegovaný užívateľ (odporúčam)

Na to či púšťať Tomcat ako neprivilegovaný užívateľ nech si odpovie každý sám ale podľa mňa je to lepšie a tu je sekvencia príkazov ako to zabezpečiť.

Ako prvé si musíme vytvoriť užívateľskú skupinu.

root@linux ~ $ groupadd tomcat

Vytvoríme neprivilegovaného používateľa a určíme mu domovský adresár v koreni Tomcatu.

root@linux ~ $ useradd -g tomcat -d /usr/share/apache-tomcat-7.0.52/tomcat tomcat

Koreňový adresár Tomcatu sme vytvárali ako root tak je treba zmeniť skupinu aj vlastníka tohto adresára.

root@linux ~ $ chown -Rf tomcat.tomcat /usr/share/apache-tomcat-7.0.52/

A nakoniec takto upravíme spúšťací skript ktorý sme pred nedávnom vytvorili.

#!/bin/bash
# description: Tomcat Start Stop Restart
# processname: tomcat
# chkconfig: 234 20 80
JAVA_HOME=/usr/java/jdk1.7.0_51
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CATALINA_HOME=/usr/share/apache-tomcat-7.0.52/bin

case $1 in
start)
/bin/su tomcat $CATALINA_HOME/startup.sh
;;
stop)
/bin/su tomcat $CATALINA_HOME/shutdown.sh
;;
restart)
/bin/su tomcat $CATALINA_HOME/shutdown.sh
/bin/su tomcat $CATALINA_HOME/startup.sh
;;
esac
exit 0

2. Apache Tomcat s použitím Eclipse

S použitím Eclipse je tento úkon oveľa jednoduchší a má len pár jednoduchých krokov.

  1. Stiahneme si Eclipse s oficiálnej stránky http://eclipse.org/downloads/ alebo nainštalujeme pomocou inštalátora. Myslím, že tu je to pekne popísané.
  2. Ak máme Eclipse budeme potrebovať plugin ktorý sa volá Web Tools Platform. Tento plugin sa dá veľmi jednoducho nainštalovať pomocou Eclipse. Otvoríme Eclipse > Help > Install New Software... a do poľa kde si volíme zdroje softvéru zadáme adresu http://download.eclipse.org/webtools/updates/ asi nejak takto alebo použijeme YUM.
    root@linux ~ $ yum -y install eclipse-wtp-*
    
  3. Po reštartovaní Eclipse necháme vytvoriť webový projekt. Či zvolíme statický alebo dynamický by malo byť jedno. Pred akýmkoľvek nastavovaním projektu musíme zvoliť resp. vytvoriť aplikačný server. Klik New Runtime... a zvolíme z ponuky serverov pričom nezabudnite označiť voľbu Create a new local server po kliknutí na tlačítko Next > už len zvolíme kam má byť server nainštalovaný a klikneme na Download and Install..., Eclipse bude chvíľku pracovať a to je všetko. Už len vyplníme údaje o novom projekte a môžeme pracovať.

Vzorový kód servrletu - Hello World!

A aby ste nemuseli študovať nejaké náročné príklady ponúkam jeden klasický Hello World!.

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		PrintWriter out = response.getWriter();
		out.println("HelloWorld!");
	}
	
	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		doGet(request, response);
	}

}