Apache Tomcat – serwer aplikacji webowych rozwijany w ramach projektu Apache.
Jako kontener aplikacji jest serwerem, który umożliwia uruchamianie aplikacji internetowych w technologiach Java Servlets i Java Server Pages (JSP). Jest to jeden z bardziej popularnych kontenerów Web. Tomcat jest wykorzystywany w takich serwerach aplikacji JEE (J2EE) jak Apache Geronimo. Jest również bardzo popularnym kontenerem dla samodzielnych aplikacji (niewymagających pełnego serwera aplikacji) pisanych w środowisku Spring Framework. [Wikipedia]
Dokumentacja Tomcata: https://tomcat.apache.org/tomcat-8.5-doc/introduction.html
Pojęcia:
Document root - główny katalog aplikacji webowej gdzie znajdują się jej zasoby
Context path - relatywna ścieżka do zasobów serwera.
Na przykład, jeżeli umieścimy aplikację webową w katalogu \webapps\myapp , to będziemy mogli się do niej dostać poprzez link URL http://localhost/myapp, a jej context path będzie równy /myapp.
WAR - to rozszerzenie pliku pakietu zawierającego aplikację webową w formacie ZIP (skrót od Web Archive). Zazwyczaj aplikacje Javowe są pakowane jako WAR przez deploymentem. Zwykle plik ten tworzony jest przez środowisko programistyczne.
Po wgraniu pliku WAR, Tomcat rozpakowuje go i zapisuje jego pliku w nowym podkatalogu w katalogu webapps.
Zadanie 1 - ściągnij Tomcata
Ściągnij binarną dystrybucję Tomcata w wersji 8.5 odpowiednią dla używanego systemu ze strony https://tomcat.apache.org/download-80.cgi
Rozpakuj ściągniętą paczkę w dowolne miejsce.
Po rozpakowaniu otrzymasz foler apache-tomcat-8.5.2. .. .. class:: tag
Zadanie 2 - uruchom serwer
Uruchom serwer Tomcat korzystając ze skryptu /bin/startup.[sh|bat]
Powinieneś zobaczyć coś takiego:
Using CATALINA_BASE: /home/marcin/Downloads/apache-tomcat-8.5.35
Using CATALINA_HOME: /home/marcin/Downloads/apache-tomcat-8.5.35
Using CATALINA_TMPDIR: /home/marcin/Downloads/apache-tomcat-8.5.35/temp
Using JRE_HOME: /usr
Using CLASSPATH: /home/marcin/Downloads/apache-tomcat-8.5.35/bin/bootstrap.jar:/home/marcin/Downloads/apache-tomcat-8.5.35/bin/ tomcat-juli.jar
Tomcat started.
Zadanie 3 - przetestuj
W katalogu /webapps/sample/ znajduje się przykładowa aplikacja.
Sprawdź, czy aplikacja działa. Powinna być dostępna pod adresem: http://localhost:8080/sample/
Jeżeli nie, to skopiuj ze strony
Plik sample.war do katalogu /webapps/
Restart Tomcat running
shutdown.[sh|bat]
startup.[sh|bat]
Sprawdź, czy działa zarówno JSP page jak i Servlet
Jeśli "JSP page" nie działa, to najprawdopodobniej musisz ustawić zmienną systemową JAVA_HOME na ścieżkę do JDK Java 8:
tomek@tomek-Lubuntu:~$ java -version
openjdk version "9-internal"
tomek@tomek-Lubuntu:~$ which java
/usr/bin/java
tomek@tomek-Lubuntu:~$ realpath /usr/bin/java
/usr/lib/jvm/java-9-openjdk-amd64/bin/java
tomek@tomek-Lubuntu:~$ ls /usr/lib/jvm/
java-1.8.0-openjdk-amd64 java-1.9.0-openjdk-amd64 java-8-openjdk-amd64 java-9-openjdk-amd64
tomek@tomek-Lubuntu:~$ export JAVA_PATH=/usr/lib/jvm/java-8-openjdk-amd64/
Wyłącz i włącz ponownie Tomcat i sprawdź, czy po ustawieniu JAVA_HOME strona JSP zaczęła działać poprawnie:
tomek@tomek-Lubuntu:~$ $CATALINA_HOME/bin/shutdown.sh
Using CATALINA_BASE: /home/tomek/apache-tomcat-8.5.23/
Using CATALINA_HOME: /home/tomek/apache-tomcat-8.5.23/
Using CATALINA_TMPDIR: /home/tomek/apache-tomcat-8.5.23//temp
Using JRE_HOME: /usr
Using CLASSPATH: /home/tomek/apache-tomcat-8.5.23//bin/bootstrap.jar:/home/tomek/apache-tomcat-8.5.23//bin/tomcat-juli.jar
tomek@tomek-Lubuntu:~$ $CATALINA_HOME/bin/startup.sh
Using CATALINA_BASE: /home/tomek/apache-tomcat-8.5.23/
Using CATALINA_HOME: /home/tomek/apache-tomcat-8.5.23/
Using CATALINA_TMPDIR: /home/tomek/apache-tomcat-8.5.23//temp
Using JRE_HOME: /usr/lib/jvm/java-8-openjdk-amd64/
Using CLASSPATH: /home/tomek/apache-tomcat-8.5.23//bin/bootstrap.jar:/home/tomek/apache-tomcat-8.5.23//bin/tomcat-juli.jar
Tomcat started.
Jeśli wszystko działa, powinieneś mieć również dostęp do dokumentacji Tomcata, która jest z nim dostarczona i domyślnie udostępniana przez sam serwer: http://localhost:8080/docs/index.html
Tomcat umożliwia kontrolę dostępu do aplikacji odpalonych na serwerze. Aplikacje mogą (ale nie muszą) korzystać z metody uwierzytalniania dostarczonych przez Tomcat.
Żeby umożlwić kontrolę dostępu, Tomcat korzysta z bazy danych użytkowników, zwanej Realm.
Realm zawiera listę nazw użytkowników, ich haseł i ról (roles).
Role pozwalają na nadawanie grupom użytkowników uprawnień. Przypominają Linuxowe grupy użytkowników.
Jeden użytkownik może mieć przypisane kilka ról.
Zadanie 4 - skonfiguruj dostęp
Wejdź na domyślną stronę dostarczoną wraz z Tomcatem: http://localhost:8080/
Spróbuj obejrzeć status serwera klikając na "Server Status".
Powinno pojawić się okienko pytające o nazwę i hasło użytkownika.
Ze względów bezpieczeństwa Tomcat nie ma zdefiniowanych domyślnych użytkowników.
Role, które umożliwiają na dostęp do aplikacji Manager są wyjaśnione tutaj: http://localhost:8080/docs/manager-howto.html#Configuring_Manager_Application_Access
Edytując plik /conf/tomcat-users.xml dodaj użytkownika "guest", przypisz mu hasło (może byc puste) i dodaj rolę "manager-status":
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<!--
NOTE: By default, no user is included in the "manager-gui" role required
to operate the "/manager/html" web application. If you wish to use this app,
you must define such a user - the username and password are arbitrary. It is
strongly recommended that you do NOT use one of the users in the commented out
section below since they are intended for use with the examples web
application.
-->
<user username="guest" password="" roles="manager-status"/>
</tomcat-users>
Spróbuj jeszcze raz zalogować się do aplikacji "manager/status".
Zadanie 5 - zarządzaj, podejście 1.
Manager to aplikacja pozwalająca na zarządzanie Tomcatem z poziomu przeglądarki.
Jest ona dostarczona domyślnie uruchamiana wraz z Tomcatem.
Jej częścią jest strona Server Status, którą odwiedzialiśmy w poprzednim zadaniu.
Spróbuj wejść na stronę menedżera: http://localhost:8080/manager/html
Ponownie edytuj plik /conf/tomcat-users.xml tym razem dodając użytkownika admin i przypisując mu rolę nadającą uprawnienia dostępu do strony managera.
Sprawdź, czy po zalogowaniu jako admin masz dostęp do menedżera.
Jeśli jesteś zalogowany jako guest, spróbuj w innej przeglądarce albo uruchom ponownie przeglądarkę.
Zadanie 6 - zarządzaj, podejście 2.
Kiedy skonfigurujemy nasz serwer, nie chcemy, by użytkownicy mieli dostęp do przykładowych aplikacji dostarczonych z Tomcatem, dlatego warto je wyłączyć. Jedną z takich aplikacji jest aplikacja "sample", którą otwieraliśmy w zadaniu 3. (http://localhost:8080/sample/) Spróbujemy teraz wyłączyć tę aplikację.
Wejdź na stronę menedżera: http://localhost:8080/manager/html
Zatrzymaj ("Stop") aplikację "sample", którą otwierałeś w zadaniu 3. (http://localhost:8080/sample/)
Sprawdź, czy strona jest dostępna.
Zatrzymaj i uruchom ponownie serwer i sprawdź, czy teraz aplikacja sample jest dostępna.
Za pomocą "Undeploy" zatrzymaj i usuń aplikację sample.
Zatrzymaj i uruchom ponownie serwer i sprawdź, czy teraz aplikacja sample jest dostępna.
Zauważ, że aplikacja została usunięta z katalogu /webapps/sample i nie ma jej na liście aplikacji w menedżerze Tomcata.
Zadanie 7 - Dodaj nową aplikację
Dodawanie nowych aplikacji ("Deployment") odbywa się automatycznie po skopiowaniu ich do katalogu /webapps/ Możemy też zrobić to z poziomu menedżera Tomcat.
Ściągnij na dysk pliki
Wypakuj do katalogu i uruchom Intellij
Wybierz Project -> Open i znajdź wybrany katalog.
Wybierz okienko Mavena odśwież (jeżeli trzeba dodaj plik pom) i wykonaj clean, install.
W oknie drzewa projektu powinien pojawić się katalog target a w nim plik SimpleServlet-1.war.
Skopiuj ten plik do katalogu webapps Tomcata. Sprawdź czy działa wchodząc na link http://localhost:8080/SimpleServlet-1/hello
Jeżeli nie wejdź w managera i wybierz opcje WAR file to deploy podając wyżej wymieniony plik.
Exercise 7 - monitor
Spójrz na katalo z logami /logs
Sprawdź jakie informacje znajdziesz w pliku catalina.out.
Exercise 8 - crash
Dodaj do aplikacji linijkę
throw new OutOfMemoryError("blad");
Zbuduj aplikację za pomocą mavena i wgraj na serwer i uruchom. Zobacz czy znajdziesz błąd w logach w których logach znajdziesz błąd.
Zadanie 9 - port
Domyślnie Tomcat uruchamia się na porcie 8080. Jeżeli jakiś inny proces zajmuje już ten port to otrzymamy błąd przy uruchomieniu serwera.
Aby zmienić port wejdź w ustawienia w pliku server.xml znajdującego się w $CATALINA_HOME/conf/server.xml.
Zmień port na 8081, uruchom drugi raz Tomcata. Sprawdź w przeglądarce czy aplikacje działają na porcie 8081? Sprawdź w logach co się stało.
Zmień w pliku server.xml porty które wymagają zmiany.
Przerestartuj tomacata, tak by działały dwie osobne instancje.
Zadanie 10 - debugowanie zdeployowanej aplikacji
Wyłącz Tomcata i włącz korzystając z
export JPDA_ADDRESS=8000export JPDA_TRANSPORT=dt_socket | bin/catalina.sh jpda start
Na windows :
set JPDA_ADDRESS=8000set JPDA_TRANSPORT=dt_socketbin/catalina.bat jpda start
Address to port do nasłuchiwania przy debugowaniu.
W intellij wybierz Run -> Debug następnie Edit Configurations, w okienku Wybier z lewej strony plus i opcję Remote.
W nowo otwartym oknie zmień port na 8000 i kliknij debug. Od tego momentu jesteś podłączony debugerem do zdeployowanej aplikacji na Tomcat.
Dodaj breakpoint w 16 lini pliku SimpleServlet.java i odśwież stronę. Powinieneś złapać się breakpointem na tej linijce!
Dodać w web XML zarządzanie dostępem do zasobó przez role i logowanie!!