WDIS 2019L: Zajęcia 1. Serwer Apache Tomcat. Środowisko NetBeans. Strona 1 z 9 Wybrane Działy Informatyki Stosowanej LABORATORIUM 1. KONFIGUROWANIE SERWERA APACHE TOMCAT. PODSTAWY UMIESZCZANIA PLIKÓW HTML, JSP ORAZ SERWLETÓW Spis treści I. Konfiguracja serwera Apache Tomcat... 2 II. Projekt 1a. Umieszczenie plików HTML na serwerze... 3 III. Projekt 1b. Umieszczenie plików JSP na serwerze... 4 IV. Projekt 1c. Pierwszy serwlet.... 5 V. Konfiguracja deskryptora rozmieszczenia serwletów web.xml... 6 VI. Projekt 1d. Serwlet z elementami grafiki... 8
WDIS 2019L: Zajęcia 1. Serwer Apache Tomcat. Środowisko NetBeans. Strona 2 z 9 I. Konfiguracja serwera Apache Tomcat 1. Uruchom środowisko NetBeans 2. W lewym górnym oknie, które wyświetla zawartość Projects (Projekty), przełącz się do okna Services (Usługi). 3. Rozwiń węzeł Servers. 4. Kliknij prawym przyciskiem myszy nazwę Apache Tomcat 8.x (x - numer wersji) a następnie wybierz opcję Start. Po chwili nastąpi uruchomienie serwera WWW Apache Tomcat. 5. Kliknij ponownie prawym przyciskiem myszy nazwę Apache Tomcat 8.x, a następnie wybierz opcję Properties. Zostanie wyświetlone poniższe okno z istotnymi ustawieniami konfiguracyjnymi serwera.
WDIS 2019L: Zajęcia 1. Serwer Apache Tomcat. Środowisko NetBeans. Strona 3 z 9 Zwróć uwagę na numer portu oraz warność zmiennej środowiskowej Catalina Home. 6. Otwórz przeglądarkę i wpisz w niej adres lokalny serwera Apache: http://localhost:8084/ W przeglądarce powinna pojawić się strona pokazana na rysunku poniżej. Jeśli strona nie została wyświetlona, trzeba ponownie przejrzeć informacje zamieszczone na temat instalacji serwera. 7. W oknie Output programu NetBeans znajdziemy między innymi informacje o zmiennych środowiskowych, których używać będzie środowisko NetBeans. 8. Dysk i folder, w którym został zainstalowany serwer Apache Tomcat będziemy nazywać $CATALINA_HOME. Domyślnie instalator proponuje folder na dysku systemowym Windows \Program Files\Apache Software Foundation\Apache Tomcat 8.x II. Projekt 1a. Umieszczenie plików HTML na serwerze 1. Jeśli serwer działa poprawnie, należy sprawdzić czy można na nim zainstalować i wyświetlić w przeglądarce dokumenty HTML i strony JSP. W naszym przypadku serwer jest uruchamiany na lokalnym komputerze i dostęp do serwera jest zdefiniowany na porcie 8084, zatem jako adresu URL będziemy używać localhost:8084.
WDIS 2019L: Zajęcia 1. Serwer Apache Tomcat. Środowisko NetBeans. Strona 4 z 9 Katalogi służące do przechowywania stron HTML i JSP dla serwera Apache Tomcat należy umieszczać w: $CATALINA_HOME \webapps\root 2. Utwórz na dysku Z:\ w Netbeans nowy projekt typu Java Class Library z kategorii Java o nazwie Projekt1a 3. Dodaj do projektu za pomocą menu File New File Categories: Other HTML File plik typu HTML o nazwie Hello.html 4. Dokonaj edycji pliku zgodnie z listingiem przedstawionym poniżej (instrukcje wymagające edycji znajdują się w sekcji <head> i <body>): 5. Zapisz zmiany w pliku Hello.html. Umieść w katalogu $CATALINA_HOME\webapps\ROOT poniższy plik Hello.html (powinien być na dysku Z:\Test1HTML) 6. Otwórz przeglądarkę i wpisz w niej adres: http://localhost:8084/hello.html Jeśli niepoprawnie wyświetlają się polskie znaki w przeglądarce internetowej zmień ustawienia następująco: FireFox: Menu Widok -> Zestaw znaków -> Środkowoeuropejski (ISO-8859-2) Internet Explorer: Menu Widok -> Kodowanie -> Europa Środkowa (ISO) lub Europa Środkowa (Windows) Jeżeli okaże się, że nie można wyświetlić dokumentu HTML, na przykład, gdy będą pojawiać się błędy nr 404 dokument nie znaleziony, oznacza to że dokumenty umieszczono w niewłaściwym katalogu, bądź też użyto niewłaściwego adresu URL (istotne są małe i duże litery). III. Projekt 1b. Umieszczenie plików JSP na serwerze 1. Utwórz w NetBeans na dysku Z:\ nowy projekt typu Web Application o nazwie Projekt1b wybierając kategorię projektu Java Web. 2. W następnym oknie dialogowym [Server and Settings] wybierz z listy serwer Apache Tomcat 8.x pozostałe ustawienia pozostaw bez zmian. Naciśnij przycisk Finish. 3. W oknie Projects kliknij gałąź WebPages prawym przyciskiem myszy i z menu podręcznego wybierz New a następnie JSP. W oknie dialogowym zmień nazwę pliku z newjsp na Hello 4. Dokonaj edycji programu zgodnie z listingiem przedstawionym poniżej:
WDIS 2019L: Zajęcia 1. Serwer Apache Tomcat. Środowisko NetBeans. Strona 5 z 9 5. Skompiluj plik Hello.jsp i sprawdź, czy kompilacja zakończyła się sukcesem. Jeśli nie, popraw błędy składni i ponów kompilację. 6. Umieść w katalogu $CATALINA_HOME\webapps\ROOT plik Hello.jsp (powinien być na dysku Z:\Test1JSP\web) 7. Otwórz przeglądarkę i wpisz w niej adres: http://localhost:8084/hello.jsp IV. Projekt 1c. Pierwszy serwlet. Serwlet, który nie należy do żadnego pakietu, nie korzysta z jakichkolwiek klas pomocniczych, jedynie co robi to generuje zwyczajny kod HTML. 1. Utwórz w NetBeans nowy projekt typu Java Class Library z kategorii Java o nazwie Projekt1c w folderze Z:\ Dodaj do projektu klasę typu Servlet o nazwie Test2Servlet (kliknij prawym przyciskiem nazwę projektu, następnie wybierz: New Other, następnie wybierz w panelu Categories: Web a w panelu Type Files: Servlet). Wypełnij okno dialogowe New Servlet, tak jak to pokazano poniżej i zatwierdź zmiany przyciskiem Finish.
WDIS 2019L: Zajęcia 1. Serwer Apache Tomcat. Środowisko NetBeans. Strona 6 z 9 Projekt1c 2. Pojawią się błędy w kodzie źródłowym programu, między innymi w wierszach od 8 do 11 programu (instrukcje są poprawnie napisane). Chwilowo zignoruj je, ponieważ oznacza to tylko brak dostępu środowiska NetBeans do klasy javax która nie jest standardowym pakietem Java SE. 3. Przełącz się w NetBeans do okna Projects i kliknij prawym przyciskiem myszy wewnątrz projektu Projekt1c nazwę Libraries a następnie z menu podręcznego wybierz opcję Add JAR/Folder. Dodaj do okna plik: servlet-api.jar który znajdziesz w folderze: Błędy w kodzie programu powinny zniknąć. $CATALINA_HOME\lib\servlet-api.jar 4. Zamień poniższą instrukcję w pliku Test2Servlet.java out.println("<h1>servlet Test2Servlet at " + request.getcontextpath() "</h1>"); na dwie nowe out.println("<h1>*** Wydział Transportu ***</h1>"); out.println("<h1>test 2 - Servlet, który nie należy do żadnego pakietu</h1>"); 5. Po udanej kompilacji pliku Test2Servlet.java wygenerowany plik klasy Test2Servlet.class należy skopiować do odpowiedniego katalogu, w naszym przypadku $CATALINA_HOME\webapps\ROOT\WEBINF\classes. Do kopiowania wykorzystaj koniecznie Eksploratora Windows. 6. Teraz należy skonfigurować plik web.xml V. Konfiguracja deskryptora rozmieszczenia serwletów web.xml Wybierając z menu File opcję OpenFile otwórz w NetBeans plik web.xml z katalogu: $CATALINA_HOME\webapps\ROOT\WEB-INF Aby wyświetlić zawartość pliku w kodzie źródłowym kliknij zakładkę XML. Plik web.xml zawsze jest umieszczany w katalogu WEB-INF aplikacji WWW. Plik web.xml ma w wersji Apache Tomcat 8.x następującą zawartość:
WDIS 2019L: Zajęcia 1. Serwer Apache Tomcat. Środowisko NetBeans. Strona 7 z 9 W tym miejscu umieszczamy instrukcje zawierające elementy servlet oraz servlet- mapping Niestandardowe adresy URL serwletów określa się przy użyciu elementów servlet oraz servlet-mapping, zapisywanych w pliku web.xml nazywanym deskryptorem rozmieszczenia. Do zarejestrowania adresu URL serwletu wystarczy znajomość pięciu poniższych informacji: o Położenia pliku. Zawsze jest on przechowywany w katalogu WEB-INF. o Jego podstawowej struktury. Plik zaczyna się od nagłówka XML i zawiera element web-app. o Sposobu określania nazwy serwletów. Do tego celu należy użyć elementu <servlet> zawierającego dwa elementy podrzędne: servlet-name oraz servlet-class. o Sposobu określania adresu URL dla serwletu o podanej nazwie. Do tego celu służy element servlet-mapping zawierający dwa elementy podrzędne: servlet-name oraz url-pattern. o Czasu odczytywania zawartości pliku web.xml. Jest on odczytywany wyłącznie podczas uruchamiania serwera. W celu określenia nazwy serwletu, wewnątrz elementu web-app należy umieścić element servlet zawierający dwa elementy podrzędne: servlet-name (określający nazwę nadawaną serwletowi) oraz servlet-class (zawierający pełną nazwę klasy serwletu). W naszym przypadku będzie to: <servlet> <servlet-name>test2servlet</servlet-name> <servlet-class>test2servlet</servlet-class> </servlet> Aby przypisać niestandardowy adres URL serwletowi o określonej nazwie, w pliku web.xml należy umieścić element servlet-mapping zawierający dwa elementy podrzędne: servlet-name (określający zdefiniowaną wcześniej nazwę serwletu) oraz url-pattern (końcówkę adresu URL rozpoczynającą się od znaku ukośnika). <servlet-mapping> <servlet-name>test2servlet</servlet-name> <url-pattern>/test2servlet</url-pattern> </servlet-mapping>
WDIS 2019L: Zajęcia 1. Serwer Apache Tomcat. Środowisko NetBeans. Strona 8 z 9 7. W pliku web.xml i dopisz w odpowiednim miejscu elementy servlet oraz servlet-mapping w postaci pokazanej wyżej. 8. Zapisz zmiany w pliku web.xml. 9. Po zapisaniu zmian w pliku, zrestartuj serwer Apache Tomcat, aby zmiany były uaktywnione. 10. Otwórz przeglądarkę i wpisz w niej adres: http://localhost:8084/test2servlet W ten sposób powinien zostać wyświetlony serwlet Test2Servlet.class, który nie należy do żadnego pakietu i jest wyświetlony przy użyciu niestandardowego adresu URL. Jeśli serwlet udało się skompilować, lecz przeglądarka nie znalazła zasobu o podanym adresie URL, to prawdopodobnie plik klasy serwletu został umieszczony w niewłaściwym miejscu lub wystąpiły błędy w konfiguracji pliku web.xml Pamiętaj: Jeśli wystąpiły błędy w pliku web.xml lub plik *.class został umieszczony w niewłaściwym miejscu lub jego nazwa była niezgodna z plikiem deskryptora, po wszelkich poprawkach zawsze należy zrestartować serwer Tomcat. VI. Projekt 1d. Serwlet z elementami grafiki 1. Utwórz na dysku Z:\ w Netbeans nowy projekt typu Java Class Library z kategorii Java o nazwie Projekt1d 2. Dodaj do gałęzi Library wybierając z menu podręcznego opcję Add JAR/Folder plik: servlet-api.jar który znajdziesz w folderze: $CATALINA_HOME\lib\servlet-api.jar 3. Dodaj do projektu klasę typu Servlet o nazwie Animacja 4. Poniżej instrukcji response.setcontenttype("text/html; charset=utf-8"); dopisz: // typ nagłówka -> odświeżanie co 10 s response.setheader("refresh", "10"); 5. Za poprzednią instrukcją dopisz instrukcje wyświetlające datę i czas: // aktualna data i czas String data = new Date().toString(); Pamiętaj o zaimportowaniu klasy Date z menu podręcznego Fix Imports. 6. Zamień instrukcję out.println("<h1>servlet Animacja at " + request.getcontextpath() + "</h1>"); na out.println(data + "\n<h1>witaj!!!</h1><br>\n" + "<img border='0' src='../images/duke.gif'>"); Instrukcja zawiera fragment kodu HTML, w którym następuje odwołanie do pliku graficznego duke.gif umieszczonego w określonym katalogu../images 7. Uruchom kompilację programu <F9>. 8. Po udanej kompilacji pliku Animacja.java wygenerowany plik klasy Animacja.class należy skopiować do odpowiedniego katalogu, w naszym przypadku $CATALINA_HOME\webapps\ROOT\WEB-INF\classes
WDIS 2019L: Zajęcia 1. Serwer Apache Tomcat. Środowisko NetBeans. Strona 9 z 9 9. W programie następuje odwołanie do pliku graficznego duke.gif umieszczonego w określonym katalogu../images. Zatem na serwer do foldera $CATALINA_HOME\webapps\ROOT, który jest reprezentowany przez znaki../ należy przekopiować do foldera /images plik duke.gif (musisz samodzielnie utworzyć folder /images). Plik znajdziesz na stronie z zadaniem. 10. Otwórz w NetBeans plik web.xml, wybierając z menu File opcje Open File (uwaga: nie dodawaj go do projektu!). Plik znajduje się w folderze $CATALINA_HOME\webapps\ROOT\WEB-INF. Dopisz w nim samodzielnie odpowiednie elementy servlet oraz servlet-mapping 11. Po zapisaniu zmian w pliku web.xml, zatrzymaj i ponownie uruchom serwer WWW. 12. Otwórz przeglądarkę i wpisz w niej adres: http://localhost:8084/animacja W ten sposób powinien zostać uruchomiony serwlet Animacja.class. Jeśli serwlet udało się skompilować, lecz przeglądarka nie znalazła zasobu o podanym adresie URL, to prawdopodobnie plik klasy serwletu został umieszczony w niewłaściwym miejscu. Nie można wykluczyć też błędu w pliku web.xml. Jeśli nie wyświetla się obraz graficzny, to nie jest wykluczone że folder /images z plikiem duke.gif został umieszczony w niewłaściwym miejscu.