38
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II Autor: Marty Hall, Larry Brown, Yaakov Chaikin T‡umaczenie: Daniel Kaczmarek ISBN: 978-83-246-1726-5 Tytu‡ orygina‡u: Core Servlets and Javaserver Pages: Advanced Technologies, Vol. 2 (2nd Edition) Format: 172x245, stron: 632 Jak wykorzysta strumienie? Jak stworzy efektowny interfejs u¿ytkownika? Jak zapewni bezpieczeæstwo w tworzonych aplikacjach? Co spowodowa‡o, ¿e jŒzyk programowania Java zyska‡ tak wielk„ popularno? Przyczyn jest kilka: mo¿liwo przenoszenia kodu miŒdzy programami, wydajno i to, co programici lubi„ najbardziej mechanizm automatycznego oczyszczania pamiŒci. Nie bez znaczenia jest rwnie¿ to, ¿e Java jest jŒzykiem zorientowanym obiektowo, udostŒpnia obs‡ugŒ programowania rozproszonego oraz wietn„ dokumentacjŒ. Ponadto liczne publikacje oraz pomocna spo‡eczno sprawiaj„, ¿e Java zajmuje poczesne miejsce wrd innych jŒzykw programowania. Kolejne wydanie ksi„¿ki zosta‡o zaktualizowane o wszystkie te elementy, ktre pojawi‡y siŒ w wersji szstej platformy Java Standard Edition. DziŒki tej ksi„¿ce dowiesz siŒ, w jaki sposb wykorzysta strumienie, jak parsowa dokumenty XML czy te¿ w jaki sposb tworzy aplikacje sieciowe. Poznasz interfejs JDBC, sposb wykorzystania transakcji oraz wykonywania zapytaæ SQL. Autorzy w szczeg‡owy sposb poka¿„ Ci, jak tworzy aplikacje z wykorzystaniem biblioteki Swing. Dodatkowo przedstawi„, w jaki sposb zapewni bezpieczeæstwo w tworzonych przez Ciebie aplikacjach. Wszystkie te - oraz wiele innych zagadnienia zostan„ przedstawione w przystŒpny i sprawdzony sposb! Wykorzystanie strumieni Dokumenty XML i ich wykorzystanie w jŒzyku Java Programowanie aplikacji sieciowych Wykorzystanie interfejsu JDBC Tworzenie aplikacji wielojŒzycznych Mo¿liwoci pakietu Swing Wykorzystanie biblioteki AWT Bezpieczeæstwo w aplikacjach Zastosowanie podpisu cyfrowego Sposoby wykorzystania obiektw rozproszonych (RMI) Wykorzystaj zaawansowane mo¿liwoci jŒzyka Java w swoich projektach!

Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Embed Size (px)

DESCRIPTION

Kompletny przewodnik po zaawansowanych mechanizmach oraz funkcjach serwletów i JSP.* Jak kontrolować działanie aplikacji za pośrednictwem pliku deskryptora?* Jakie są możliwości rozbudowy systemu zabezpieczeń?* Jak można wykorzystać obsługę zdarzeń?Platforma Java 2 jest najczęściej wykorzystywaną technologią do budowy komercyjnych aplikacji internetowych, dynamicznych witryn WWW oraz aplikacji i usług sieciowych. Jej podstawą są serwlety i strony JSP, które są obsługiwane — przy użyciu komponentów wbudowanych lub dodatkowych — na praktycznie wszystkich serwerach WWW, a jednocześnie stanowią połączenie między klientami internetowymi i aplikacjami działającymi na serwerze. Tom II prezentuje zaawansowane narzędzia i techniki służące do tworzenia rozbudowanych i wysoko wydajnych aplikacji. Opisano w nim mechanizmy kontroli działania aplikacji za pomocą pliku web.xml, możliwości rozszerzenia systemu zabezpieczeń metodami deklaratywnymi i programistycznymi, a także sposoby używania filtrów serwletów i JSP. Przedstawiono tu także opis funkcji rzadziej używanych, lecz niezwykle przydatnych podczas tworzenia złożonych programów. Książka „Core Servlets i Java Server Pages. Tom II. Technologie zaawansowane. Wydanie drugie” to wyczerpujący podręcznik dla programistów znających już podstawy technologiczne serwletów i stron JSP, którzy chcą poznać i wykorzystać ich zaawansowane możliwości. Tom I zawiera szczegółowy opis serwletów i stron JSP, w tym nagłówki HTTP, pliki cookie, mechanizm śledzenia sesji, elementy skryptowe JSP, dołączanie plików, architekturę Model-Widok-Kontroler (MVC) i język wyrażeń JSP. Znajdziesz tam także opis formularzy HTML, JDBC oraz najlepsze praktyki projektowania i implementowania aplikacji. Wykorzystaj wszystkie możliwości serwletów i stron JSP, aby tworzyć profesjonalne aplikacje!* Deskryptor wdrożenia* Zabezpieczenia programistyczne i deklaratywne* Filtry serwletów i stron JSP* Model i obsługa zdarzeń* Własne biblioteki znaczników* Platforma Apache Struts

Citation preview

Page 1: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Core Java Servletsi JavaServer Pages.Tom II. Wydanie IIAutor: Marty Hall,Larry Brown, Yaakov ChaikinT³umaczenie: Daniel KaczmarekISBN: 978-83-246-1726-5Tytu³ orygina³u: Core Servletsand Javaserver Pages: AdvancedTechnologies, Vol. 2 (2nd Edition)Format: 172x245, stron: 632

� Jak wykorzystaæ strumienie?� Jak stworzyæ efektowny interfejs u¿ytkownika?� Jak zapewniæ bezpieczeñstwo w tworzonych aplikacjach?

Co spowodowa³o, ¿e jêzyk programowania Java zyska³ tak wielk¹ popularno�æ? Przyczyn jest kilka: mo¿liwo�æ przenoszenia kodu miêdzy programami, wydajno�æ i to, co programi�ci lubi¹ najbardziej � mechanizm automatycznego oczyszczania pamiêci. Nie bez znaczenia jest równie¿ to, ¿e Java jest jêzykiem zorientowanym obiektowo, udostêpnia obs³ugê programowania rozproszonego oraz �wietn¹ dokumentacjê. Ponadto liczne publikacje oraz pomocna spo³eczno�æ sprawiaj¹, ¿e Java zajmuje poczesne miejsce w�ród innych jêzyków programowania.

Kolejne wydanie ksi¹¿ki zosta³o zaktualizowane o wszystkie te elementy, które pojawi³y siê w wersji szóstej platformy Java Standard Edition. Dziêki tej ksi¹¿ce dowiesz siê,w jaki sposób wykorzystaæ strumienie, jak parsowaæ dokumenty XML czy te¿ w jaki sposób tworzyæ aplikacje sieciowe. Poznasz interfejs JDBC, sposób wykorzystania transakcji oraz wykonywania zapytañ SQL. Autorzy w szczegó³owy sposób poka¿¹ Ci, jak tworzyæ aplikacje z wykorzystaniem biblioteki Swing. Dodatkowo przedstawi¹,w jaki sposób zapewniæ bezpieczeñstwo w tworzonych przez Ciebie aplikacjach. Wszystkie te - oraz wiele innych � zagadnienia zostan¹ przedstawione w przystêpnyi sprawdzony sposób!

� Wykorzystanie strumieni� Dokumenty XML i ich wykorzystanie w jêzyku Java� Programowanie aplikacji sieciowych� Wykorzystanie interfejsu JDBC� Tworzenie aplikacji wielojêzycznych� Mo¿liwo�ci pakietu Swing� Wykorzystanie biblioteki AWT� Bezpieczeñstwo w aplikacjach� Zastosowanie podpisu cyfrowego� Sposoby wykorzystania obiektów rozproszonych (RMI)

Wykorzystaj zaawansowane mo¿liwo�ci jêzyka Java w swoich projektach!

Page 2: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Spis tre�ci

Wprowadzenie ................................................................................................................................................ 11

Podzi�kowania ............................................................................................................................................... 15

O autorach ...................................................................................................................................................... 16

Rozdzia� 1. U�ywanie i wdra�anie aplikacji internetowych ......................................................................... 17 1.1. Cele aplikacji internetowych .................................................................................... 18

Organizacja ....................................................................................................... 18Przeno�no�� ..................................................................................................... 18Separacja ......................................................................................................... 18

1.2. Struktura aplikacji internetowych ............................................................................... 19Lokalizacje poszczególnych rodzajów plików ......................................................... 19

1.3. Rejestrowanie aplikacji internetowych na serwerze ..................................................... 23Rejestrowanie aplikacji internetowych na serwerze Tomcat ................................... 24Rejestrowanie aplikacji internetowych na innych serwerach ................................... 26

1.4. Strategie rozwoju i wdra�ania aplikacji internetowych .................................................. 28Kopiowanie struktury do skrótu lub dowi�zania symbolicznego .............................. 29Wykorzystanie funkcji wdra�ania udost�pnianych przez IDE ................................... 30U�ywanie narz�dzi ant, maven i im podobnych ..................................................... 30U�ywanie IDE wraz z narz�dziem Ant ................................................................... 31

1.5. Umieszczanie aplikacji internetowych w plikach WAR .................................................. 311.6. Tworzenie prostej aplikacji internetowej ..................................................................... 32

Pobranie aplikacji app-blank i zmiana jej nazwy na testApp ................................... 33Pobranie plików test.html, test.jsp oraz TestServlet.java ....................................... 33Dodanie plików test.html i test.jsp do aplikacji internetowej testApp ..................... 33Umieszczenie pliku TestServlet.java w katalogu

testApp/WEB-INF/classes/coreservlets .......................................................... 34Kompilacja pliku TestServlet.java ........................................................................ 34Zadeklarowanie w pliku web.xml klasy TestServlet.class oraz adresu URL,

który j� wywo�uje ........................................................................................... 35Skopiowanie aplikacji testApp do katalogu katalog_tomcat/webapps .................... 36

Page 3: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

4 Core Java Servlets i JavaServer Pages

Uruchomienie serwera Tomcat ............................................................................ 36Wywo�anie aplikacji testApp przy u�yciu adresu URL

w postaci http://localhost/testApp/zasób ...................................................... 371.7. Wspó�u�ytkowanie danych przez aplikacje internetowe ................................................ 39

Rozdzia� 2. Kontrolowanie dzia�ania aplikacji przy u�yciu deskryptora web.xml ....................................472.1. Przeznaczenie deskryptora wdro�enia ........................................................................ 482.2. Definiowanie elementu g�ównego i elementu nag�ówka ............................................... 482.3. Elementy deskryptora web.xml .................................................................................. 50

Wersja 2.4 specyfikacji serwletów ....................................................................... 50Wersja 2.3 specyfikacji serwletów ....................................................................... 53

2.4. Przypisywanie nazw i w�asnych adresów URL .............................................................. 55Przypisywanie nazw ............................................................................................ 56Definiowanie w�asnych adresów URL ................................................................... 57Nazewnictwo stron JSP ...................................................................................... 62

2.5. Wy��czanie serwletu wywo�uj�cego ............................................................................ 64Zmiana odwzorowania wzorca adresu URL /servlet/ ............................................. 65Globalne wy��czanie serwletu wywo�uj�cego na serwerze Tomcat .......................... 66

2.6. Inicjalizowanie i wst�pne �adowanie serwletów i stron JSP .......................................... 68Przypisywanie serwletom parametrów inicjalizacyjnych .......................................... 68Przypisywanie parametrów inicjalizacyjnych JSP .................................................... 71Parametry inicjalizacyjne na poziomie ca�ej aplikacji ............................................. 74�adowanie serwletów w momencie uruchamiania serwera .................................... 74

2.7. Deklarowanie filtrów ................................................................................................ 782.8. Definiowanie stron powitalnych ................................................................................. 812.9. Wyznaczanie stron obs�uguj�cych b��dy ..................................................................... 81

Element error-code ............................................................................................ 82Element exception-type ...................................................................................... 84

2.10. Definiowanie zabezpiecze ...................................................................................... 86Definiowanie metody uwierzytelniania ................................................................. 86Ograniczanie dost�pu do zasobów sieciowych ...................................................... 88Przypisywanie ról ............................................................................................... 91

2.11. Kontrolowanie czasu wygasania sesji ....................................................................... 922.12. Dokumentowanie aplikacji internetowych .................................................................. 922.13. Przypisywanie plikom typów MIME ............................................................................ 932.14. Konfigurowanie stron JSP ........................................................................................ 94

Lokalizacja deskryptorów bibliotek znaczników ..................................................... 94Konfigurowanie w�a�ciwo�ci stron JSP ................................................................. 95

2.15. Kodowanie znaków ............................................................................................... 1002.16. Tworzenie procesów nas�uchuj�cych zdarze aplikacji .............................................. 1002.17. Tworzenie rozwi�za przeznaczonych dla �rodowisk klastrowych ............................... 1012.18. Elementy J2EE ..................................................................................................... 104

Rozdzia� 3. Zabezpieczenia deklaratywne ................................................................................................. 1093.1. Uwierzytelnianie przy u�yciu formularza .................................................................... 111

Definiowanie nazw u�ytkowników, hase� i ról ...................................................... 113W��czanie na serwerze uwierzytelniania przy u�yciu formularzy

i wskazywanie lokalizacji strony logowania oraz strony obs�ugi b��du logowania ....114Tworzenie strony logowania .............................................................................. 115Tworzenie strony z informacj� o b��dzie logowania ............................................. 118Wskazywanie adresów URL, które maj� by� zabezpieczone has�em ..................... 118Zdefiniowanie listy wszystkich abstrakcyjnych ról ............................................... 122

Page 4: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Spis tre�ci 5

Wskazywanie adresów URL dost�pnych wy��cznieza po�rednictwem protoko�u SSL .................................................................. 122

Wy��czanie serwletu wywo�uj�cego .................................................................... 1243.2. Przyk�ad. Uwierzytelnianie przy u�yciu formularzy ..................................................... 125

Strona g�ówna ................................................................................................. 125Deskryptor wdro�enia ....................................................................................... 126Plik z has�ami .................................................................................................. 129Strony logowania i obs�ugi b��du logowania ....................................................... 130Katalog investing ............................................................................................. 131Katalog ssl ..................................................................................................... 134Katalog admin ................................................................................................. 137Serwlet NoInvokerServlet ................................................................................. 140Strony niezabezpieczone .................................................................................. 141

3.3. Uwierzytelnianie metod� BASIC ............................................................................... 144Definiowanie nazw u�ytkowników, hase� i ról ...................................................... 146W��czanie na serwerze uwierzytelniania metod� BASIC

i definiowanie nazwy obszaru ....................................................................... 146Wskazywanie adresów URL, które maj� by� zabezpieczone has�em ..................... 146Zdefiniowanie listy wszystkich abstrakcyjnych ról ............................................... 147Wskazywanie adresów URL dost�pnych wy��cznie

za po�rednictwem protoko�u SSL .................................................................. 1473.4. Przyk�ad. Uwierzytelnianie metod� BASIC ................................................................. 147

Strona g�ówna ................................................................................................. 148Deskryptor wdro�enia ....................................................................................... 149Plik hase� ........................................................................................................ 151Plan finansowy ................................................................................................ 151Biznesplan ...................................................................................................... 152Serwlet NoInvokerServlet ................................................................................. 154

3.5. Konfigurowanie obs�ugi protoko�u SSL na serwerze Tomcat ....................................... 1553.6. WebClient. Interaktywna komunikacja z serwerami WWW .......................................... 1613.7. Podpisywanie certyfikatu serwera ............................................................................ 164

Eksport certyfikatu CA ...................................................................................... 166Komunikacja klienta WebClient z serwerem Tomcat przy u�yciu protoko�u SSL ..... 170

Rozdzia� 4. Zabezpieczenia programistyczne ........................................................................................... 1734.1. ��czenie zabezpiecze programistycznych i zabezpiecze

zarz�dzanych przez kontener ..................................................................... 175Odwo�ania do ról ............................................................................................. 176

4.2. Przyk�ad. ��czenie zabezpiecze programistycznych i zabezpieczezarz�dzanych przez kontener ..................................................................... 177

4.3. Zastosowanie wy��cznie zabezpiecze programistycznych ......................................... 1804.4. Przyk�ad. Zastosowanie wy��cznie zabezpiecze programistycznych ........................... 1844.5. Zabezpieczenia programistyczne i protokó� SSL ......................................................... 187

Ustalenie, czy u�ywany jest protokó� SSL ........................................................... 188Przekierowywanie wywo�a, które nie dotycz� protoko�u SSL ............................... 188Odczytanie liczby bitów w kluczu ....................................................................... 189Sprawdzenie algorytmu szyfrowania .................................................................. 189Dost�p do certyfikatu X.509 klienta .................................................................. 189

4.6. Przyk�ad. Zabezpieczenia programistyczne i protokó� SSL .......................................... 190

Page 5: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

6 Core Java Servlets i JavaServer Pages

Rozdzia� 5. Filtry serwletów i stron JSP ................................................................................................... 1955.1. Tworzenie prostych filtrów ...................................................................................... 196

Tworzenie klasy implementuj�cej interfejs Filter ................................................. 197Implementacja filtra w metodzie doFilter ............................................................ 198Wywo�anie metody doFilter obiektu FilterChain ................................................... 198Rejestrowanie filtra dla serwletów lub stron JSP ................................................. 198Wy��czenie serwletu wywo�uj�cego .................................................................... 200

5.2. Przyk�ad. Filtr raportuj�cy ........................................................................................ 2015.3. Dost�p do kontekstu serwletu z poziomu filtra ......................................................... 2075.4. Przyk�ad. Filtr zapisuj�cy do dziennika ..................................................................... 2085.5. U�ywanie parametrów inicjalizuj�cych dla filtrów ...................................................... 2105.6. Przyk�ad. Filtr czasu udost�pnienia .......................................................................... 2125.7. Blokowanie odpowiedzi .......................................................................................... 2155.8. Przyk�ad. Filtr blokuj�cy stron� ................................................................................ 2155.9. Modyfikowanie odpowiedzi ..................................................................................... 221

Obiekt przechowuj�cy odpowied, gotowy do wielokrotnego wykorzystania ............ 2225.10. Przyk�ad. Filtr zast�puj�cy ..................................................................................... 224

Ogólny filtr modyfikuj�cy ................................................................................... 224Konkretny filtr modyfikuj�cy .............................................................................. 225

5.11. Przyk�ad. Filtr kompresuj�cy .................................................................................. 2305.12. Konfigurowanie wspó�pracy filtra z obiektem RequestDispatcher ............................. 2355.13. Przyk�ad. �atanie potencjalnej dziury w zabezpieczeniach ........................................ 2375.14. Pe�na definicja deskryptora wdro�enia ................................................................... 243

Rozdzia� 6. Model zdarze� aplikacji ........................................................................................................... 2496.1. Monitorowanie zdarze polegaj�cych na utworzeniu i zniszczeniu kontekstu serwletu ..... 2526.2. Przyk�ad. Inicjalizowanie wspó�u�ytkowanych danych ................................................. 2536.3. Wykrywanie zmian warto�ci atrybutów kontekstu serwletu ......................................... 2586.4. Monitorowanie zmian we wspó�u�ytkowanych danych ................................................ 2596.5. Umieszczanie obiektów nas�uchuj�cych w bibliotekach znaczników ............................ 2676.6. Przyk�ad. Pakiet zawieraj�cy obiekty �ledz�ce nazw� firmy ........................................ 2696.7. Wykrywanie zdarze tworzenia i niszczenia sesji ....................................................... 2756.8. Przyk�ad. Obiekt nas�uchuj�cy, który zlicza sesje ...................................................... 276

Wy��czanie obs�ugi plików cookie ...................................................................... 2826.9. Wykrywanie zmian w atrybutach sesji ...................................................................... 2836.10. Przyk�ad. Monitorowanie zamówie na jachty ......................................................... 2836.11. Wykrywanie inicjalizacji i zniszczenia ��dania serwletu ............................................ 2906.12. Przyk�ad. Obliczanie obci��enia serwera ��daniami ................................................. 2916.13. Wykrywanie zmian atrybutów w ��daniach serwletów .............................................. 2966.14. Przyk�ad. Zatrzymywanie obiektu zbierania statystyk ��da ...................................... 2976.15. Wykorzystanie wielu obiektów nas�uchuj�cych wspó�pracuj�cych ze sob� ................. 299

�ledzenie zamówie na towary z oferty dnia ....................................................... 300Resetowanie licznika zamówie na oferty dnia ................................................... 306

6.16. Pe�na definicja deskryptora wdro�enia ................................................................... 311

Rozdzia� 7. Podstawowe informacje na temat bibliotek znaczników ....................................................... 3177.1. Komponenty biblioteki znaczników .......................................................................... 318

Klasa obs�ugi znacznika ................................................................................... 319Plik deskryptora biblioteki znaczników ............................................................... 320Plik JSP .......................................................................................................... 321

Page 6: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Spis tre�ci 7

7.2. Przyk�ad. Prosty znacznik liczby pierwszej ................................................................. 3227.3. Przypisywanie znacznikom atrybutów ....................................................................... 326

Atrybuty znacznika a klasa obs�ugi znacznika ..................................................... 326Atrybuty znacznika a deskryptor biblioteki znaczników ......................................... 327Atrybuty znacznika a plik JSP ............................................................................ 328

7.4. Przyk�ad. Znacznik liczby pierwszej o zmiennej d�ugo�ci ............................................ 3287.5. Zamieszczanie tre�ci znacznika w danych zwracanych przez znacznik ......................... 330

Tre�� znacznika a klasa obs�ugi znacznika ......................................................... 330Tre�� znacznika a deskryptor biblioteki znaczników ............................................ 331Tre�� znacznika a plik JSP ................................................................................ 331

7.6. Przyk�ad. Znacznik nag�ówka ................................................................................... 3327.7. Przyk�ad. Znacznik debugowania ............................................................................. 3357.8. Tworzenie plików znaczników .................................................................................. 3377.9. Przyk�ad. Prosty znacznik liczby pierwszej z u�yciem pliku znacznika ........................... 339

7.10. Przyk�ad. Znacznik liczby pierwszej o zmiennej d�ugo�ci z u�yciem pliku znacznika ...... 3407.11. Przyk�ad. Znacznik nag�ówka z u�yciem pliku znacznika ............................................ 341

Rozdzia� 8. Biblioteki znaczników. Funkcje zaawansowane .................................................................... 3458.1. Operacje na tre�ci znacznika .................................................................................. 3468.2. Przyk�ad. Znacznik filtruj�cy kod HTML ..................................................................... 3478.3. Przypisywanie atrybutom znaczników warto�ci dynamicznych ..................................... 350

Dynamiczne warto�ci atrybutów a klasa obs�ugi znacznika .................................. 351Dynamiczne warto�ci atrybutów a deskryptor biblioteki znaczników ...................... 351Dynamiczne warto�ci atrybutów a plik JSP ......................................................... 351

8.4. Przyk�ad. Prosty znacznik wykonuj�cy p�tl� .............................................................. 3528.5. Przypisywanie atrybutom znaczników warto�ci w postaci z�o�onych obiektów .............. 356

Dynamiczne, z�o�one warto�ci atrybutów a klasa obs�ugi znacznika ..................... 356Dynamiczne, z�o�one warto�ci atrybutów a deskryptor biblioteki znaczników ......... 356Dynamiczne, z�o�one warto�ci atrybutów a plik JSP ............................................ 357

8.6. Przyk�ad. Znacznik formatuj�cy tabele ..................................................................... 3578.7. Tworzenie znaczników wykonuj�cych p�tle ............................................................... 3628.8. Przyk�ad. Znacznik forEach ..................................................................................... 3638.9. Tworzenie funkcji j�zyka wyra�e ............................................................................. 367

8.10. Przyk�ad. Ulepszony znacznik debugowania ............................................................. 3698.11. Obs�uga zagnie�d�onych znaczników niestandardowych ........................................... 3728.12. Przyk�ad. Znacznik If-Then-Else ............................................................................... 373

Rozdzia� 9. Biblioteka standardowych znaczników JSP (JSTL) ............................................................... 3799.1. Instalacja biblioteki JSTL ........................................................................................ 3809.2. Znacznik c:out ....................................................................................................... 3819.3. Znaczniki c:forEach i c:forTokens ............................................................................ 3829.4. Znacznik c:if .......................................................................................................... 3839.5. Znacznik c:choose ................................................................................................. 3849.6. Znaczniki c:set i c:remove ...................................................................................... 3869.7. Znacznik c:import .................................................................................................. 3889.8. Znaczniki c:url i c:param ........................................................................................ 3919.9. Znacznik c:redirect ................................................................................................ 392

9.10. Znacznik c:catch .................................................................................................... 394

Page 7: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

8 Core Java Servlets i JavaServer Pages

Rozdzia� 10. Podstawy platformy Struts ................................................................................................... 39710.1. Podstawy Struts ................................................................................................... 398

Ró�ne strony Struts ......................................................................................... 398Zalety platformy Apache Struts w porównaniu z MVC

z obiektem RequestDispatcher i JSP EL ........................................................ 398Wady platformy Apache Struts w porównaniu z MVC

z obiektem RequestDispatcher i EL .............................................................. 40010.2. Instalacja i konfiguracja platformy Struts ................................................................ 402

Instalacja Struts .............................................................................................. 402Testowanie platformy Struts ............................................................................. 404Tworzenie w�asnych aplikacji Struts ................................................................... 405Dodawanie Struts do ju� istniej�cej aplikacji internetowej ................................... 405

10.3. Proces przetwarzania Struts i sze�� kroków do jego implementacji ........................... 406Proces przetwarzania na platformie Struts ......................................................... 406Sze�� podstawowych kroków w pracy ze Struts .................................................. 410

10.4. Przetwarzanie ��da przez obiekty Action ................................................................ 414Dzia�anie obiektów Action ................................................................................. 415Przyk�ad. Odwzorowanie jednego wyniku ............................................................ 418Przyk�ad. Odwzorowanie kilku wyników ............................................................... 424��czenie wspó�u�ytkowanych odwzorowa warunków .......................................... 432

10.5. Obs�uga parametrów ��da w komponentach bean formularzy .................................. 434Proces przetwarzania na platformie Struts z uwzgl�dnieniem komponentów bean .....434Sze�� podstawowych kroków w pracy ze Struts .................................................. 436Dzia�anie komponentów bean formularzy ........................................................... 438Wy�wietlanie w�a�ciwo�ci komponentu bean ...................................................... 440Przyk�ad. Komponenty bean formularza i danych wynikowych ............................... 442

10.6. Wst�pne wype�nianie formularzy danymi i ich ponowne wy�wietlanie ......................... 453Proces przetwarzania na platformie Struts ......................................................... 454Sze�� podstawowych kroków w pracy ze Struts .................................................. 455Wykorzystanie znaczników html: platformy Struts ............................................... 458Wype�nianie formularzy danymi pocz�tkowymi .................................................... 459Przyk�ad. Wype�nianie formularzy danymi pocz�tkowymi ...................................... 460Strategie tworzenia adresów URL dla obiektów Action ........................................ 469Ponowne wy�wietlanie formularzy ..................................................................... 472Przyk�ad. Ponowne wy�wietlanie formularza ....................................................... 475

Rozdzia� 11. Platforma Struts. Funkcje dodatkowe ................................................................................... 48511.1. Wykorzystanie plików w�a�ciwo�ci .......................................................................... 486

Zalety plików w�a�ciwo�ci ................................................................................. 486Dzia�anie platformy Struts z uwzgl�dnieniem plików w�a�ciwo�ci .......................... 486Sposób u�ywania plików w�a�ciwo�ci ................................................................ 487Przyk�ad. Proste komunikaty ............................................................................. 491Klucze dynamiczne .......................................................................................... 496Komunikaty parametryzowane .......................................................................... 497

11.2. Umi�dzynaradawianie aplikacji ............................................................................... 498�adowanie j�zykowych wersji pliku w�a�ciwo�ci .................................................. 498Definiowanie ustawie j�zykowych w przegl�darkach .......................................... 498Przyk�ad. Polska, hiszpaska i francuska wersja j�zykowa ................................... 499Wyniki ............................................................................................................ 500

Page 8: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Spis tre�ci 9

11.3. Definiowanie uk�adu stron przy u�yciu modu�u Tiles ............................................... 501Powody, dla których warto u�ywa� Tiles ............................................................. 501Wymagania wst�pne modu�u Tiles .................................................................... 502Cztery kroki w pracy z Tiles ............................................................................... 503Prosta aplikacja wykorzystuj�ca Tiles ................................................................ 506Obs�uga wzgl�dnych adresów URL .................................................................... 510Przyk�ad. Aplikacja e-boats ............................................................................... 511

11.4. Wykorzystanie Tiles Definitions .............................................................................. 519Powody, dla których warto u�ywa� Tiles Definitions ............................................ 521Pi�� kroków w pracy z Tiles Definitions .............................................................. 522Przyk�ad. Aplikacja e-boats wykorzystuj�ca modu� Tiles Definitions ...................... 525

Rozdzia� 12. Platforma Struts. Weryfikacja poprawno�ci danych wpisanych przez u�ytkownika ...... 52912.1. Weryfikacja poprawno�ci danych w klasie Action ..................................................... 530

Proces przetwarzania Struts ............................................................................. 531Przeprowadzenie weryfikacji danych w klasie Action ............................................ 531Przyk�ad. Wybór kolorów i rozmiarów czcionek wykorzystywanych w �yciorysie ....... 534

12.2. Weryfikacja poprawno�ci danych w komponencie bean formularza ............................ 541Proces przetwarzania Struts ............................................................................. 542Przeprowadzenie weryfikacji danych w komponencie ActionForm .......................... 542Przyk�ad. Wybór kolorów i rozmiarów czcionek

wykorzystywanych w �yciorysie (wersja druga) ................................................ 546Parametryzowane komunikaty o b��dach ........................................................... 553Przyk�ad. Weryfikacja poprawno�ci danych

z wykorzystaniem parametryzowanych komunikatów ....................................... 55312.3. Wykorzystanie platformy automatycznej weryfikacji poprawno�ci danych .................... 556

Weryfikacja r�czna a weryfikacja automatyczna .................................................. 556Weryfikacja na kliencie a weryfikacja na serwerze .............................................. 557Proces przetwarzania Struts ............................................................................. 558Konfiguracja mechanizmu automatycznej weryfikacji danych ................................ 559Przyk�ad. Automatyczna weryfikacja poprawno�ci danych .................................... 565

Dodatek A Tworzenie aplikacji przy u�yciu Apache Ant ........................................................................... 575A.1. Najwa�niejsze zalety Ant ......................................................................................... 576A.2. Instalacja i konfiguracja Ant .................................................................................... 576A.3. Tworzenie projektu Ant ........................................................................................... 577

Definiowanie projektu Ant ................................................................................. 578Definiowanie celów .......................................................................................... 580Przypisywanie zada do celów .......................................................................... 581Uruchamianie celu Ant ..................................................................................... 581

A.4. Przegl�d najcz��ciej u�ywanych zada Ant ............................................................... 582Zadanie echo .................................................................................................. 582Zadanie tstamp ............................................................................................... 583Zadanie mkdir ................................................................................................. 584Zadanie delete ................................................................................................ 584Zadanie copy .................................................................................................. 586Zadanie javac .................................................................................................. 588

A.5. Przyk�ad. Prosty projekt Ant .................................................................................... 591A.6. Tworzenie aplikacji internetowej przy u�yciu Ant ...................................................... 596

Zale�no�ci mi�dzy celami Ant ........................................................................... 597

Page 9: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

10 Core Java Servlets i JavaServer Pages

A.7. Przyk�ad. Wykonanie aplikacji internetowej ............................................................... 598Cel prepare ..................................................................................................... 600Cel copy ......................................................................................................... 601Cel build ......................................................................................................... 602

A.8. Tworzenie pliku WAR przy u�yciu Ant ........................................................................ 603Zadanie jar ..................................................................................................... 603Zadanie manifest ............................................................................................ 605

A.9. Przyk�ad. Tworzenie pliku WAR aplikacji internetowej ................................................. 606Cel war ........................................................................................................... 607

Skorowidz ..................................................................................................................................................... 611

Page 10: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

1U�ywanie i wdra�anie

aplikacji internetowych

W tym rozdziale:

� Cele aplikacji internetowych

� Struktura aplikacji internetowych

� Rejestrowanie aplikacji internetowych

� Strategie rozwoju i wdra�ania aplikacji internetowych

� Pliki WAR

� Wspó�u�ytkowanie danych przez aplikacje internetowe

W ramach aplikacji internetowych mo�na tworzy zwarte kolekcje serwletów, stron JavaServer Pages (JSP), bibliotek znaczników, dokumentów HTML (Hypertext Markup Language),obrazków, arkuszy stylów i innych tre�ci przeznaczonych dla internetu. Z kolekcji tych mo�nakorzysta na dowolnym serwerze zgodnym ze specyfikacj� serwletów. Prawid�owo zaprojek-towane aplikacje internetowe mo�na przenosi z jednego serwera na inny albo umieszczaw innej lokalizacji na tym samym serwerze bez konieczno�ci wprowadzania zmian do ser-wletów, stron JSP czy plików HTML wchodz�cych w sk�ad aplikacji.

W ten sposób nawet z�o�one aplikacje mo�na przenosi bez wi�kszego wysi�ku, u�atwiaj�c ichwielokrotne wykorzystywanie. Ponadto dzi�ki temu, �e ka�da aplikacja internetowa posiadaw�asn� struktur� katalogów, sesje, kontekst ServletContext i modu� �adowania klas, u�ywanieaplikacji internetowej upraszcza nawet pocz�tkowe etapy rozwoju, poniewa� znaczniemniej uwagi trzeba po�wi�ca na koordynacj� poszczególnych elementów ca�ego opraco-wanego rozwi�zania.

Page 11: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

18 Core Java Servlets i JavaServer Pages

1.1. Cele aplikacji internetowychAplikacje internetowe maj� trzy g�ówne zalety — u�atwiaj� odpowiednie zorganizowaniezasobów, wdro�ona aplikacja charakteryzuje si� przeno�no�ci�, a ponadto �atwiej jest unikn�konfliktów mi�dzy ró�nymi aplikacjami internetowymi. Ka�da z tych zalet zostanie omówionanieco szerzej.

Organizacja

Pierwsza zaleta aplikacji internetowych wyp�ywa z faktu, �e wszystko ma w nich swoje miejsce— dla ka�dego rodzaju zawarto�ci przeznaczona jest standardowa lokalizacja. Poszczególnepliki klas Java zawsze znajduj� si� w katalogu o nazwie WEB-INF/classes, pliki JAR (zbioryplików klas Java) zawsze umieszczane s� w katalogu WEB-INF/lib, plik konfiguracyjnyweb.xml zawsze znajduje si� w katalogu WEB-INF i tak dalej. Pliki bezpo�rednio dost�pnedla klientów (na przyk�ad przegl�darek internetowych) umieszczane s� w g�ównym kataloguaplikacji internetowej lub dowolnym jego podkatalogu z wyj�tkiem WEB-INF.

Cz�sto zdarza si�, �e programista ko�czy prac� nad jednym projektem i przechodzi do innegozespo�u projektowego. Dzi�ki standardowej organizacji zasobów aplikacji nie trzeba na nowopoznawa struktury aplikacji za ka�dym razem, gdy rozpoczyna si� prac� nad nowym pro-jektem. Nowy programista rozpoczynaj�cy prac� nad aplikacj� nie musi równie� traci czasuna rozpoznanie sposobu organizowania poszczególnych rodzajów plików.

Przeno�no��

Poniewa� specyfikacja serwletów przewiduje okre�lon� organizacj� plików, na ka�dym serwe-rze zgodnym z t� specyfikacj� mo�na w�a�ciwie od razu wdra�a i uruchamia aplikacj�.Dzi�ki temu istnieje du�a swoboda w wyborze dostawcy docelowego serwera WWW. Je�litylko wybrany serwer jest zgodny ze specyfikacj�, ka�d� aplikacj� mo�na — w wi�kszo�ciprzypadków bez �adnych zmian — wdro�y i uruchomi na serwerze pochodz�cym od innegoproducenta. Mo�na na przyk�ad utworzy aplikacj� na darmowym serwerze WWW, a nast�p-nie jej wersj� przedprodukcyjn� uruchomi ju� na bardziej stabilnym serwerze, dla któregoproducent �wiadczy odpowiednie wsparcie techniczne.

Separacja

Poszczególne aplikacje internetowe wdro�one na tym serwerze nie wchodz� ze sob� w konflikt.Ka�da aplikacja ma w�asny adres URL, za pomoc� którego mo�na do niej uzyska dost�p,w�asny obiekt ServletContext i tak dalej. Dwie aplikacje wdro�one na tym samym serwerzedzia�aj� tak, jakby by�y uruchamiane na dwóch oddzielnych serwerach, �adna z tych aplikacjinie musi równie� mie dost�pu do drugiej.

Page 12: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 19

Fakt ten jeszcze bardziej upraszcza proces tworzenia i wdra�ania aplikacji internetowych.Programista nie musi bowiem w ogóle zastanawia si� nad tym, w jaki sposób powinno si�integrowa tworzon� aplikacj� z aplikacjami ju� dzia�aj�cymi na tym samym serwerze.Obecnie istnieje kilka sposobów, dzi�ki którym aplikacje mog� ze sob� wspó�pracowa— zostan� one opisane w dalszej cz��ci rozdzia�u. Jednak w znakomitej wi�kszo�ci przy-padków aplikacje wdra�a si� niezale�nie od siebie.

1.2. Struktura aplikacji internetowychJak ju� wcze�niej wspomniano, aplikacja internetowa ma standardowy format i jest przeno�nado wszystkich serwerów WWW lub serwerów aplikacji zgodnych ze specyfikacj�. G�ównykatalog aplikacji to zwyk�y katalog o dowolnej nazwie. Wewn�trz tego katalogu znajduj�si� lokalizacje przeznaczone dla poszczególnych elementów. W tym punkcie opisane zostan�rodzaje elementów, z jakich mo�e sk�ada si� aplikacja, oraz lokalizacje, w których elementypowinny si� znajdowa.

Lokalizacje poszczególnych rodzajów plików

Na rysunku 1.1 przedstawiono standardow� struktur� przyk�adowej aplikacji internetowej.Aby wykona kolejne kroki procesu tworzenia w�asnej aplikacji internetowej, nale�y pobraz serwera ftp://ftp.helion.pl/przyklady/jsp2w2.zip aplikacj� app-blank i wykona instrukcje opi-sane w punkcie 1.6 („Tworzenie prostej aplikacji internetowej”).

Rysunek 1.1.Strukturastandardowejaplikacjiinternetowej

Strony JSP

Strony JSP nale�y umieszcza w g�ównym katalogu aplikacji internetowej lub w jego pod-katalogu o dowolnej nazwie, innej ni� WEB-INF i META-INF. Serwery nigdy nie udost�p-niaj� klientom plików znajduj�cych si� w katalogach WEB-INF i META-INF. Gdy aplikacjainternetowa zostanie ju� zarejestrowana (wi�cej na ten temat w punkcie 1.3), nale�y wskazaserwerowi prefiks URL wskazuj�cy aplikacj� oraz zdefiniowa lokalizacj�, w której znaj-duje si� katalog aplikacji internetowej. Zazwyczaj — cho nie jest to obowi�zkowe — jako

Page 13: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

20 Core Java Servlets i JavaServer Pages

prefiks URL wskazuje si� po prostu nazw� g�ównego katalogu aplikacji. Po zarejestrowaniuprefiksu strony JSP stan� si� dost�pne za po�rednictwem adresów URL w postaci http://�komputer/prefiksAplikacji/nazwapliku.jsp (je�eli strony JSP znajduj� si� w g�ównym kata-logu aplikacji) albo http://komputer/prefiksAplikacji/podkatalog/nazwapliku.jsp (gdy stronyznajduj� si� w podkatalogu).

Od ustawie� serwera zale�y, czy plik domy�lny, taki jak index.jsp, b�dzie dost�pny po wpi-saniu adresu URL wskazuj�cego jedynie katalog (na przyk�ad http://komputer/prefiksAplikacji/)bez zapisania odpowiedniego ustawienia w pliku konfiguracyjnym WEB-INF/web.xml. Je�eliindex.jsp ma by domy�lnym plikiem aplikacji, zalecane jest dodanie w pliku web.xml tejaplikacji odpowiedniego elementu welcome-file-list. Na przyk�ad poni�szy fragment plikuweb.xml wskazuje, �e je�eli adres URL zawiera nazw� katalogu, a nie zawiera nazwy pliku,wówczas serwer powinien w pierwszej kolejno�ci zwróci plik index.jsp, a w drugiej kolej-no�ci plik index.html. Je�eli na serwerze nie ma �adnego z tych dwóch plików, odpowied�b�dzie zale�e od serwera (na przyk�ad wy�wietlona zostanie zawarto� katalogu).

<welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file></welcome-file-list>

Wi�cej informacji na temat sposobu u�ywania pliku web.xml znajduje si� w rozdziale 2.,„Kontrolowanie dzia�ania aplikacji przy u�yciu deskryptora web.xml”.

Dokumenty HTML, obrazki i inne standardowe elementy aplikacji internetowej

Modu� obs�ugi serwletów i stron JSP stosuje identyczne regu�y dla stron JSP oraz dla plikówHTML, obrazków GIF i JPEG, arkuszy stylów i innych dokumentów internetowych. Wszystkiewymienione elementy s� umieszczane dok�adnie w tych samych lokalizacjach i udost�pnianeza po�rednictwem adresów URL w identycznej formie.

Pojedyncze serwlety, komponenty JavaBeans i klasy pomocnicze

Serwlety oraz inne pliki z rozszerzeniem .class umieszcza si� w katalogu WEB-INF/classesalbo w podkatalogu katalogu WEB-INF/classes o nazwie odpowiadaj�cej nazwie pakietu.

Aby uzyska dost�p do jednego z serwletów trzeba wskaza dla niego odpowiedni adres URL.W tym celu w deskryptorze wdro�enia web.xml, znajduj�cym si� w katalogu WEB-INF,trzeba zdefiniowa element servlet-mapping. Wi�cej informacji na ten temat znajduje si�w punkcie 1.3, „Rejestrowanie aplikacji internetowych na serwerze”.

Dost�p do serwletów mo�na tak�e uzyskiwa w inny sposób, który nie wymaga definiowaniaodpowiedniego adresu URL. Do tego celu mo�na u�y adresu o postaci http://komputer/prefiks�Aplikacji/servlet/nazwaPakietu.NazwaSerwletu. U�ywanie adresu o takiej postaci przy-daje si� w trakcie testowania mo�liwo�ci aplikacji, natomiast nie zaleca si� jego u�ywaniaw aplikacjach produkcyjnych. Powodów jest kilka. Po pierwsze, je�eli dla tego samegoserwletu zostanie równie� zdefiniowany element servlet-mapping, b�dzie mo�na go wywo-�ywa na dwa ró�ne sposoby, a to z kolei szybko zacznie utrudnia utrzymywanie aplikacji.

Page 14: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 21

Po drugie, poniewa� deklaratywne zabezpieczenia aplikacji zale�� od adresu URL, przy u�yciuktórego zasób jest udost�pniany, mo�e w ten sposób powsta luka w zabezpieczeniach. Potrzecie, u�ytkownik jest zmuszony wpisa adres URL, w którym znajduje si� nazwa serwletuze wszystkimi jego kwalifikatorami, a takie adresy wygl�daj� ma�o elegancko i s� trudne dozapami�tania. Zatem w kategorii u�yteczno�ci aplikacji internetowej taki sposób wywo�ywaniaserwletów zyska�by bardzo niskie noty. Po czwarte, je�eli kiedykolwiek zajdzie potrzeba, byzmieni nazw� klasy albo umie�ci klasy w nowym pakiecie, zmieni trzeba b�dzie równie�sam adres URL. To z kolei poci�gnie za sob� wymóg zmiany wszystkich odwo�a� znajdu-j�cych si� w aplikacji, w których u�ywano dotychczasowego adresu URL. Oprócz tego, �esama ta czynno� b�dzie do� uci��liwa, to jej wynik spowoduje zamieszanie równie� w�ródsamych u�ytkowników, którzy przecie� mogli zapisa adres w�ród swoich ulubionychzak�adek, a po zmianie adresu serwletu adres ten przestanie dzia�a i u�yteczno� aplikacjiznowu ucierpi.

Zalecamy jawne blokowanie dost�pu do serwletów wchodz�cych w sk�ad aplikacji internetowejbez odpowiednio odwzorowanego adresu URL. Odwzorowanie takie mo�na zdefiniowa zapomoc� elementu servlet-mapping pliku web.xml. Przyk�adowe odwzorowanie znajdujesi� w pliku web.xml aplikacji app-blank, któr� mo�na pobra z witryny ftp://ftp.helion.pl/�przyklady/jsp2w2.zip.

Serwlety, komponenty JavaBeans i klasy pomocnicze znajduj�ce si� w pakietach JAR

Je�eli serwlety lub inne pliki z rozszerzeniem .class wchodz� w sk�ad pakietów JAR, wów-czas pliki JAR powinny si� znajdowa w katalogu WEB-INF/lib. Je�eli klasy znajduj� si�w pakietach, wówczas wewn�trz pliku JAR klasy te powinny znajdowa si� w kataloguo nazwie odpowiadaj�cej nazwie ich pakietu. Wi�kszo� serwerów umo�liwia wspó�u�yt-kowanie plików JAR przez ró�ne aplikacje internetowe. Funkcja ta nie jest jednak standardem,a konkretny sposób jej dzia�ania zale�y od rodzaju serwera. Na serwerze Tomcat wspó�u�yt-kowane pliki JAR umieszcza si� w katalogu katalog_tomcat/shared/lib.

Deskryptor wdro�enia

Deskryptor wdro�enia, czyli plik web.xml, powinien znajdowa si� w podkatalogu WEB-INFkatalogu g�ównego aplikacji internetowej. Szczegó�owe informacje na temat sposobu u�ywaniapliku web.xml znajduj� si� w rozdziale 2., „Kontrolowanie dzia�ania aplikacji przy u�yciupliku web.xml”. Warto zwróci uwag�, �e niektóre serwery mog� obs�ugiwa globalny plikweb.xml, dotycz�cy wszystkich aplikacji internetowych. Na przyk�ad serwer Tomcat wyko-rzystuje plik katalog_tomcat/conf/web.xml, w którym znajduj� si� globalne ustawieniakonfiguracyjne. Plik taki jest jednak cech� charakterystyczn� tylko tego serwera. Standardemjest wy��cznie plik web.xml definiowany dla ka�dej aplikacji oddzielnie i umieszczany w ka-talogu WEB-INF aplikacji internetowej.

Deskryptory bibliotek znaczników

Pliki b�d�ce deskryptorami bibliotek znaczników (ang. Tag Library Descriptor — TLD)umieszcza si� w katalogu WEB-INF lub jego dowolnym podkatalogu. Zaleca si� jednak, bydeskryptory te umieszcza w podkatalogu tlds katalogu WEB-INF. Grupowanie deskryptorów

Page 15: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

22 Core Java Servlets i JavaServer Pages

w jednym katalogu (na przyk�ad o nazwie tlds) upraszcza proces zarz�dzania nimi. StronyJSP uzyskuj� dost�p do plików TLD znajduj�cych si� w WEB-INF za pomoc� dyrektywytaglib o nast�puj�cej postaci:

<%@ taglib uri="/WEB-INF/tlds/mójPlikTaglib.tld" … %>

Poniewa� nie mamy do czynienia z klientem (takim jak choby przegl�darka internetowa),lecz z serwerem, który wykorzystuje plik TLD, blokada dost�pu do zawarto�ci znajduj�cejsi� w katalogu WEB-INF w tym przypadku nie obowi�zuje.

Gdy plik z rozszerzeniem .tld jest umieszczany wewn�trz pliku JAR, powinien si� on znaj-dowa w katalogu META-INF lub w którym� z jego podkatalogów. Konieczno� zmianylokalizacji z WEB-INF na META-INF wynika z tego, �e pliki JAR nie s� archiwami aplikacjiWWW, a wi�c nie zawieraj� katalogu WEB-INF. Wi�cej informacji na temat plików TLDznajduje si� w rozdziale 7., „Biblioteki znaczników. Zagadnienia podstawowe”.

Pliki znaczników

Pliki znaczników powinny znajdowa si� w katalogu WEB-INF/tags lub jego podkatalogu.Podobnie jak w przypadku plików TLD, pliki znaczników pozostaj� dost�pne dla stron JSPnawet wówczas, gdy znajduj� si� w katalogu WEB-INF. Pliki znaczników równie� deklarujesi� na stronie JSP przy u�yciu dyrektywy taglib. Jednak zamiast uri nale�y w ich przypadkuzdefiniowa atrybut tagdir. Je�eli na przyk�ad plik mójPlikZnaczników.tag umieszczonyzostanie w katalogu WEB-INF/tags aplikacji internetowej, dyrektywa taglib strony JSPpowinna mie nast�puj�c� posta:

<%@ taglib tagdir="/WEB-INF/tags" …%>

W takim przypadku serwer automatycznie wygeneruje plik TLD dla plików znaczników,zatem nie trzeba samodzielnie definiowa odpowiedniego odwzorowania.

Pliki znaczników mo�na tak�e do��cza do plików JAR. Sam plik JAR powinien zostaumieszczony w katalogu WEB-INF/lib, zgodnie z tym, co wspomniano ju� wcze�niej. Jednakwewn�trz pliku JAR pliki znaczników powinny znajdowa si� w katalogu META-INF/tags.W takim przypadku serwer nie wygeneruje automatycznie TLD, dlatego konieczne jest zadekla-rowanie plików znaczników i �cie�ki dost�pu w pliku z rozszerzeniem .tld. Warto zauwa�y, �eplik z rozszerzeniem .tld mo�e zawiera równie� deklaracje w�asnych znaczników innychtypów. Wi�cej informacji na temat plików znaczników znajduje si� w rozdziale 7., „Bibliotekiznaczników. Zagadnienia podstawowe”.

Plik manifestu WAR

Gdy tworzony jest plik WAR (wi�cej na ten temat w punkcie 1.5), plik MANIFEST.MF zostajeumieszczony w podkatalogu META-INF. Zazwyczaj narz�dzie jar automatycznie tworzyplik MANIFEST.MF i umieszcza go w katalogu META-INF, a w przypadku rozpakowywaniapliku WAR plik manifestu jest ignorowany. Czasami jednak trzeba jawnie zmodyfikowaplik MANIFEST.MF, dlatego warto wiedzie, gdzie si� on znajduje.

Page 16: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 23

1.3. Rejestrowanie aplikacji internetowychna serwerzeJak wspominano ju� wcze�niej, aplikacje internetowe s� przeno�ne. Bez wzgl�du na to, jakiserwer jest u�ywany, pliki aplikacji s� przechowywane w takiej samej strukturze katalogów, adost�p do nich uzyskuje si� za po�rednictwem adresów URL w takiej samej postaci. Na ry-sunku 1.2 przedstawiono struktur� adresów URL, których nale�a�oby u�y dla najprostszejaplikacji o nazwie myWebApp. W tym punkcie opisane zostan� sposoby instalowania i wyko-nywania prostej aplikacji internetowej na ró�nych platformach.

Rysunek 1.2.StrukturaaplikacjiinternetowejmyWebApp

Same aplikacje internetowe s� w pe�ni przeno�ne, natomiast ju� przebieg procesu rejestracjiaplikacji zale�y od serwera. Aby na przyk�ad przenie� aplikacj� myWebApp z jednego serwerana drugi, nie trzeba wprowadza �adnych zmian w strukturze katalogów widocznej na ry-sunku 1.2, natomiast umiejscowienie katalogu g�ównego aplikacji (w tym przypadku jest tomyWebApp) zale�y od rodzaju u�ywanego serwera. Podobnie od rodzaju serwera zale�y samsposób wskazywania serwerowi, �e aplikacja powinna by wywo�ywana przy u�yciu adresuURL w postaci http://komputer/myWebApp/.

W tym punkcie przyj�to za�o�enie, �e wszystkie kroki zmierzaj�ce do zainstalowania i skon-figurowania serwera zosta�y ju� wykonane. Wi�cej informacji na temat konfiguracji serwe-ra mo�na znale� w jego dokumentacji, w pierwszym rozdziale pierwszego tomu niniejszejksi��ki lub (w przypadku u�ytkowników serwera Tomcat) w uaktualnianym na bie��co prze-wodniku po instalacji i konfiguracji serwera, dost�pnym w witrynie http://www.coreservlets.�com. W tym miejscu zaprezentowany zostanie tylko krótki przyk�ad, a nast�pnie w jednymz kolejnych podpunktów opisana zostanie procedura rejestracji na serwerze Tomcat. Szcze-gó�owy opis procesu wdro�enia przyk�adowej aplikacji internetowej na serwerze Tomcatzostanie przedstawiony w punkcie 1.6, „Tworzenie prostej aplikacji internetowej”.

Zgodnie z informacjami zawartymi w punkcie 1.4, „Strategie rozwoju i wdra�ania aplikacjiinternetowych”, standardow� strategi� jest tworzenie aplikacji w �rodowisku programistycz-nym i regularne kopiowanie jej do poszczególnych katalogów wdro�eniowych w celu przete-stowania rozwi�zania na ró�nych serwerach. Odradza si� umieszczanie katalogu rozwojowego

Page 17: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

24 Core Java Servlets i JavaServer Pages

bezpo�rednio w katalogu wdro�eniowym serwera, poniewa� znacznie utrudni to wdro�enieaplikacji na kilku serwerach, trudno b�dzie pracowa nad aplikacj� w czasie jej dzia�ania,a tak�e utrudnione zostanie nadanie odpowiedniej organizacji plików. Lepszym rozwi�zaniemjest u�ycie oddzielnego katalogu rozwojowego i zastosowanie jednej ze strategii opisanychw punkcie 1.4, „Strategie rozwoju i wdra�ania aplikacji internetowych”. Najprostszym rozwi�-zaniem jest utworzenie skrótu (w systemie Windows) lub dowi�zania symbolicznego (w �ro-dowisku UNIX/Linux), prowadz�cego do katalogów wdro�eniowych poszczególnych serwe-rów, oraz kopiowanie ca�ego katalogu rozwojowego za ka�dym razem, gdy przyjdzie czas nawdro�enie aplikacji. Na przyk�ad w systemie Windows przy u�yciu prawego przycisku myszymo�na przeci�gn� folder rozwojowy do utworzonego skrótu, zwolni przycisk i wybrapolecenie Kopiuj.

Rejestrowanie aplikacji internetowych na serwerze Tomcat

Tworzenie aplikacji internetowej na serwerze Tomcat polega na utworzeniu odpowiedniejstruktury katalogów i skopiowanie jej do katalogu katalog_tomcat/webapps. Za ca�� reszt�odpowiada ju� sam serwer. Mo�liwo� wdra�ania aplikacji internetowych przez kopiowaniestruktury katalogów do jednego z katalogów serwera to tak zwane wdra�anie na gor�co(ang. hot-deployment) albo wdra�anie automatyczne (ang. auto-deployment). Katalogw strukturze katalogów serwera, który odpowiada za t� funkcj�, to tak zwany katalogwdra�ania na gor�co (ang. hot-deploy directory) albo katalog wdra�ania automatycznego(ang. auto-deploy directory). Wi�kszo� serwerów WWW, je�li nie wszystkie wspó�czesneserwery WWW, obs�uguje taki w�a�nie sposób wdra�ania aplikacji. Aby zwi�kszy kontrol�nad procesem wdro�enia, mo�na odpowiednio zmodyfikowa zawarto� pliku katalog_�tomcat/conf/server.xml (jest to plik charakterystyczny tylko dla serwera Tomcat), tak abyodwo�ywa� si� on do aplikacji.

Poni�ej przedstawiono kolejne czynno�ci, jakie trzeba wykona, aby utworzy aplikacj� inter-netow� dost�pn� za po�rednictwem adresu URL rozpoczynaj�cego si� od http://komputer/�myWebApp.

1. Utworzy� struktur� katalogów dla aplikacji internetowej, w której katalogg�ówny b�dzie nosi� nazw� myWebApp. Poniewa� jest to nasza w�asna strukturarozwojowa, mo�na j� umie�ci w dowolnie wybranej lokalizacji. Struktura katalogówpowinna by zgodna ze struktur� przedstawion� w punkcie 1.2, „Struktura aplikacjiinternetowych”. Aby zmniejszy liczb� czynno�ci, jakie nale�y wykona w ramachtego kroku, z ftp://ftp.helion.pl/przyklady/jsp2w2.zip mo�na pobra aplikacj� app-blank. Zawiera ona wszystkie niezb�dne katalogi oraz przyk�adowy deskryptorwdro�enia web.xml. Pozostaje wówczas tylko zmieni nazw� katalogu g�ównegoapp-blank na myWebApp.

Je�eli natomiast zapadnie decyzja o r�cznym utworzeniu wymaganych katalogów,nale�y post�powa zgodnie z dalszym opisem. Najpierw trzeba utworzy katalogo nazwie myWebApp — mo�e si� on znajdowa w dowolnej lokalizacji w systemiepoza katalogiem instalacyjnym serwera. W katalogu tym trzeba utworzy podkatalogo nazwie WEB-INF, w nim za� utworzy kolejny katalog classes. Nast�pnie nale�yutworzy deskryptor wdro�enia web.xml i umie�ci go w katalogu WEB-INF.Szczegó�owe informacje na temat deskryptora wdro�enia znajduj� si� w rozdziale 2.,„Kontrolowanie dzia�ania aplikacji przy u�yciu deskryptora web.xml”. Na razie

Page 18: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 25

wystarczy tylko skopiowa plik web.xml znajduj�cy si� w katalogu katalog_tomcat/�webapps/ROOT/WEB-INF albo u�y wersji deskryptora znajduj�cej si� w aplikacjiapp-blank.

Po utworzeniu odpowiedniej struktury katalogów nale�y w katalogu myWebAppumie�ci prost� stron� JSP, a do katalogu WEB-INF/classes skopiowa prostyserwlet o nazwie MyServlet.class.

2. Zadeklarowa� serwlet i skierowa� go na odpowiedni adres URL przezwprowadzenie odpowiednich zmian w pliku web.xml b�d�cym deskryptoremwdro�enia. W odró�nieniu od stron JSP serwlety musz� by deklarowane jawnie.Nale�y zatem poda pe�n� �cie�k� dost�pu do klasy serwletu, aby wskaza serwerowi,�e serwlet ten istnieje. Dodatkowo konieczne jest wskazanie serwerowi adresówURL, które po wpisaniu przez u�ytkownika powinny wywo�a serwlet MyServlet.class.Obydwie wspomniane czynno�ci mo�na zrealizowa przez wstawienie w plikuweb.xml poni�szego kodu:

<servlet> <servlet-name>MyName</servlet-name> <servlet-class>mypackage.MyServlet</servlet-class></servlet><servlet-mapping> <servlet-name>MyName</servlet-name> <url-pattern>/MyAddress</url-pattern></servlet-mapping>

Element servlet oraz jego podelementy wskazuj� serwerowi nazw�, za pomoc�której serwlet b�dzie deklarowany, a tak�e pe�n� �cie�k� dost�pu do klasy serwletu.Element servlet-mapping oraz jego podelementy wskazuj� serwerowi serwlet,który ma by wywo�ywany, gdy klient wywo�a adres URL odpowiadaj�cy wzorcowiwskazanemu jako warto� elementu url-pattern. Zatem serwlet zadeklarowanyjako MyName b�dzie wywo�ywany przez adres w postaci http://komputer/�myWebApp/MyAddress.

3. Skopiowa� katalog myWebApp do katalogu katalog_tomcat/webapps. Za�ó�my,�e serwer Tomcat zosta� zainstalowany w katalogu C:\katalog_tomcat. KatalogmyWebApp powinno si� zatem skopiowa do katalogu webapps i uzyska w tensposób nast�puj�ce �cie�ki dost�pu: C:\katalog_tomcat\webapps\myWebApp\�HelloWebApp.jsp, C:\katalog_tomcat\webapps\myWebApp\WEB-INF\classes\�HelloWebApp.class oraz C:\katalog_tomcat\webapps\myWebApp\WEB-INF\�web.xml. Katalog ten mo�na by nast�pnie zawrze w pliku WAR (wi�cej na tentemat w punkcie 1.5) i umie�ci go w katalogu C:\katalog_tomcat\webapps.

4. Opcjonalnie — w pliku server.xml dopisa� element Context. Domy�lnie Tomcatskonfiguruje aplikacj� internetow� w taki sposób, by prefiks jej adresu URL dok�adnieodpowiada� nazwie g�ównego katalogu tej aplikacji. Je�eli takie rozwi�zanie b�dziewystarczaj�ce, mo�na pomin� krok opisywany w tym punkcie. Je�eli natomiastkonieczne jest zmodyfikowanie tego etapu rejestracji aplikacji, w pliku katalog_tomcat/�conf/server.xml mo�na doda element Context. Przed rozpocz�ciem edycjizawarto�ci pliku server.xml nale�y utworzy jego kopi� bezpiecze�stwa, poniewa�nawet drobny b��d sk�adniowy uniemo�liwi prawid�owe uruchomienie serwera Tomcat.Natomiast w nowszych wersjach serwera Tomcat zaleca si�, by element Context(oraz jego podelementy) umieszcza w pliku context.xml. Plik context.xml trzebawówczas umie�ci obok pliku web.xml, w katalogu WEB-INF aplikacji internetowej.

Page 19: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

26 Core Java Servlets i JavaServer Pages

Element Context ma kilka atrybutów, które s� udokumentowane na stronie podadresem http://tomcat.apache.org/tomcat-5.5-doc/config/context.html. Za pomoc�tego elementu mo�na decydowa, czy nale�y u�ywa plików cookies albo czynale�y przepisywa adresy URL w celu �ledzenia sesji; mo�na tak�e w��czai wy��cza mo�liwo� prze�adowywania serwletów (to znaczy monitorowa klasypod k�tem zachodz�cych w nich zmian i prze�adowywa serwlety tych klas,których pliki na dysku uleg�y zmianie). Mo�na równie� ustawia poziomydebugowania. Jednak w przypadku prostych aplikacji internetowych wystarczyu�ycie tylko dwóch wymaganych atrybutów: path (prefiks adresu URL) orazdocBase (bazowy katalog instalacyjny dla aplikacji internetowych wzgl�demkatalogu katalog_tomcat/webapps). Definicja elementu Context powinna wygl�dapodobnie do poni�szej:

<Context path="/jaka�-aplikacja" docBase="myWebApp" />

Nale�y pami�ta, by jako prefiks adresu URL nie podawa prefiksu /examples,poniewa� jest on ju� u�ywany przez Tomcat jako prefiks dla przyk�adowych aplikacjiinternetowych.

Na serwerze Tomcat nie nale�y u�ywa� prefiksu /examples w roli prefiksu adresów URL aplikacji internetowych.

5. Wywo�a� stron� JSP i serwlet. Adres URL http://komputer/myWebApp/�myPage.jsp wywo�a stron� JSP, za� adres http://komputer/myWebApp/MyAddressspowoduje wywo�anie serwletu. W trakcie rozwoju aplikacji prawdopodobnie jakonazwa komputera u�ywana b�dzie nazwa localhost. W podawanych adresach URLza�o�ono, �e plik konfiguracyjny serwera Tomcat (katalog_tomcat/conf/server.xml)zmodyfikowano w taki sposób, by u�ywany by� port numer 80, zgodnie z zaleceniamiw instrukcji instalacji i konfiguracji serwera, znajduj�cej si� w witryniehttp://www.coreservlets.com/. Je�eli takiej zmiany nie wprowadzono,nale�y u�y adresów w postaci http://komputer:8080/myWebApp/myPage.jsporaz http://komputer:8080/myWebApp/MyAddress.

Rejestrowanie aplikacji internetowych na innych serwerach

Pierwsze dwie czynno�ci opisane w poprzednim podrozdziale dotycz� tworzenia przeno�nejcz��ci aplikacji internetowej i b�d� przebiega identycznie na ka�dym serwerze zgodnymze specyfikacj� serwletów. Natomiast czynno�ci dotycz�ce ju� samego procesu rejestracjis� charakterystyczne dla serwera Tomcat. Nie zmienia to jednak faktu, �e rejestrowanieaplikacji na innych serwerach przebiega bardzo podobnie. W kolejnych podpunktach krótkozostan� opisane sposoby rejestrowania aplikacji na kilku najbardziej popularnych obecnieserwerach.

Page 20: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 27

Serwer BEA WebLogic

Podobnie jak Tomcat, serwer WebLogic udost�pnia katalog automatycznego wdra�ania,s�u��cy do rejestrowania i wdra�ania aplikacji internetowych. Najpierw, je�eli jeszcze niezosta�o to zrobione, trzeba utworzy now� domen� o nazwie myDomain. Domen� mo�nautworzy przy u�yciu kreatora konfiguracji serwera WebLogic config.cmd w systemie Win-dows lub config.sh w �rodowiskach UNIX/Linux (obydwie wersje znajduj� si� w katalogubea/katalog_weblogic/common/bin). Gdy domena zostanie ju� utworzona, nale�y skopiowaca�� struktur� katalogów aplikacji internetowej (w tym równie� jej katalog g�ówny) lub plikWAR do katalogu bea/user_projects/domains/myDomain/applications. Do wdro�enia aplikacjimo�na tak�e u�y konsoli WWW serwera WebLogic. W tym celu nale�y zalogowa si� dokonsoli pod adresem http://localhost:7001/console/ (przy za�o�eniu, �e nie zmieniono domy�l-nych ustawie� portu oraz �e serwer jest uruchomiony na komputerze lokalnym). W panelukonsoli po lewej stronie nale�y rozwin� w�ze� Deployments i klikn� pozycj� Web ApplicationModules, po czym klikn� polecenie Deploy a New Web Application Module. W ten sposóburuchomiony zostanie kreator wdro�enia dzia�aj�cy w przegl�darce, w którym wystarczywykonywa kolejne wy�wietlane instrukcje. Po wdro�eniu aplikacji internetowej strona JSPb�dzie dost�pna pod adresem http://localhost:7001/myWebApp/myPage.jsp, za� serwlet b�dziedost�pny pod adresem http://localhost:7001/myWebApp/MyAddress.

JBoss

Zarejestrowanie aplikacji internetowej na serwerze JBoss jest niemal równie proste, jakw przypadku serwera Tomcat. Tak naprawd� JBoss domy�lnie u�ywa osadzonego serweraWWW Tomcat. Aby zarejestrowa aplikacj�, nale�y najpierw zmieni nazw� katalogug�ównego myWebApp na myWebApp.war. W istocie nie jest tworzony plik WAR, lecz jedynienazwa katalogu g�ównego jest zmieniana w taki sposób, by ko�czy�a si� s�owem .war. JBosswymaga, by s�owem .war ko�czy�y si� nie tylko nazwy plików WAR (co jest zreszt� wy-magane na mocy specyfikacji serwletów), lecz równie� nazwa g�ównego katalogu aplikacjiinternetowej. Po zmianie nazwy katalogu katalog myWebApp.war nale�y skopiowa dokatalogu katalog_jboss/server/default/deploy. Je�eli w trakcie instalacji serwera JBoss�adne domy�lne ustawienia nie uleg�y zmianie, strona JSP b�dzie dost�pna pod adresemhttp://localhost:8080/myWebApp/myPage.jsp, natomiast serwlet b�dzie wywo�ywany adresemhttp://localhost:8080/myWebApp/MyAddress. Je�eli aplikacja zosta�a spakowana w plikuWAR, w celu jej wdro�enia plik myWebApp.war trzeba umie�ci w tym samym kataloguserwera JBoss.

Caucho Resin

Aby skorzysta z funkcji automatycznego wdra�ania na serwerze Caucho Resin, nale�y skopio-wa ca�� struktur� katalogów aplikacji internetowej (w��cznie z jej katalogiem g�ównym)lub plik WAR do katalogu katalog_resin/webapps. Je�eli domy�lne ustawienia serwera niezosta�y zmienione, strona JSP stanie si� dost�pna pod adresem http://localhost:8080/myWebApp/�myPage.jsp, za� serwlet b�dzie dost�pny pod adresem http://localhost:8080/myWebApp/�MyAddress.

Page 21: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

28 Core Java Servlets i JavaServer Pages

1.4. Strategie rozwoju i wdra�aniaaplikacji internetowych

Gdy wszystko b�dzie ju� przygotowane do rozpocz�cia procesu tworzenia nowej aplikacjiinternetowej, nale�y wykona nast�puj�ce trzy czynno�ci:

1. Utworzy� struktur� katalogów aplikacji. W katalogu rozwojowym trzebautworzy now� struktur� katalogów, zgodn� ze struktur� aplikacji internetowej(w��czaj�c w to plik web.xml znajduj�cy si� w katalogu WEB-INF), opisan�we wcze�niejszej cz��ci tego rozdzia�u. Najprostszym sposobem wykonania tejczynno�ci jest skopiowanie i zmiana nazwy aplikacji app-blank. (Jak pami�tamy,aplikacj� app-blank oraz wszystkie inne przyk�adowe kody �ród�owe prezentowanew ksi��ce mo�na pobra z ftp://ftp.helion.pl/przyklady/jsp2w2.zip).

2. Napisa� kod �ród�owy aplikacji. Strony HTML i JSP trzeba umie�ci w katalogug�ównym lub jego podkatalogach, z wyj�tkiem podkatalogu WEB-INF i META-INF.Poszczególne pliki klas j�zyka Java nale�y umie�ci w katalogu WEB-INF/classes/�podkatalog_o_nazwie_zgodnej_z_nazw�_pakietu. Pliki JAR powinny trafido katalogu WEB-INF/lib, pliki z rozszerzeniami .tag i .tagx do kataloguWEB-INF/tags i tak dalej.

3. Wdro�y� aplikacj�. Ca�� struktur� katalogów aplikacji internetowej(w tym równie� jej katalog g�ówny) trzeba skopiowa do katalogu wdra�aniaautomatycznego serwera. Istnieje kilka rozwi�za� upraszczaj�cych to zadanie,a najcz��ciej stosowanymi s�:

� Skopiowanie struktury do skrótu lub dowi�zania symbolicznego.

� Wykorzystanie funkcji wdra�ania udost�pnianych przez zintegrowane �rodowiskoprogramistyczne (IDE).

� Wykorzystanie narz�dzia Ant lub podobnego.

� U�ycie �rodowiska IDE wraz z narz�dziem Ant.

U�ytkownicy dopiero poznaj�cy dzia�anie serwletów i stron JSP mog� pozosta przy pierwszejopcji, za� rozpoznawanie sposobu dzia�ania narz�dzia Ant lub konkretnego �rodowiska IDEmo�na rozpocz� po zaznajomieniu si� przynajmniej z podstawami serwletów i stron JSP.Trzeba jednak zaznaczy, �e nie wspomniano o opcji polegaj�cej na umieszczeniu kodubezpo�rednio w katalogu wdro�eniowym serwera. Wprawdzie to w�a�nie rozwi�zanie najcz�-�ciej wybieraj� pocz�tkuj�cy programi�ci, wachlarz jego zastosowa� w bardziej zaawansowa-nych zadaniach jest tak skromny, �e zaleca si�, by nie stosowa go ju� na samym pocz�tku.

W kolejnych podpunktach opisane zostan� wszystkie cztery wspomniane opcje.

Page 22: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 29

Kopiowanie struktury do skrótu lub dowi�zania symbolicznego

W systemie Windows nale�y przej� do katalogu nadrz�dnego wobec katalogu automatycz-nego wdro�enia serwera. W przypadku serwera Tomcat b�dzie to g�ówny katalog instalacyjnykatalog_tomcat. Katalog automatycznego wdro�enia nale�y klikn� prawym przyciskiemmyszy (na serwerze Tomcat b�dzie to katalog webapps) i wybra polecenie Kopiuj. Nast�pnietrzeba przej� do katalogu bezpo�rednio nadrz�dnego wobec g�ównego katalogu rozwojowego(czyli katalogu o jeden wy�szego w hierarchii ni� myWebApp), klikn� go prawym przyci-skiem myszy i wybra polecenie Wklej skrót (a nie zwyk�e polecenie Wklej). Od teraz za ka�-dym razem, gdy przyjdzie ju� czas na wdro�enie aplikacji internetowej, nale�y klikn� i przy-trzyma wci�ni�ty prawy przycisk myszy na katalogu rozwojowym (na przyk�ad myWebApp)i przeci�gn� go do skrótu do katalogu wdro�enia, po czym zwolni przycisk myszy. Pojawisi� wówczas menu podr�czne, w którym nale�y wybra polecenie Kopiuj tutaj. Na rysunku 1.3przedstawiono przyk�adow� konfiguracj�, która u�atwi wdra�anie i testowanie aplikacjiprezentowanych w tym rozdziale na serwerach Tomcat, WebLogic, JBoss i Resin. W systemieUNIX mo�na u�y dowi�za� symbolicznych (tworzonych poleceniem ln –s) w sposób po-dobny do sposobu u�ywania skrótów w systemie Windows.

Rysunek 1.3.Wykorzystanieskrótów w celuuproszczeniaprocesuwdra�aniaaplikacji

Zalet� tego rozwi�zania jest to, �e jest ono bardzo proste. Jest ono zatem dobre dla osóbpocz�tkuj�cych, które chc� si� skupi na poznawaniu dzia�ania serwletów i stron JSP, a niena narz�dziach do wdra�ania aplikacji czy �rodowiskach IDE.

Wad� przedstawionego rozwi�zania jest to, �e gdy u�ywanych jest kilka serwerów, koniecznejest powtarzanie operacji kopiowania. Za�ó�my na przyk�ad, �e w �rodowisku rozwojowymfunkcjonuje kilka ró�nych serwerów (Tomcat, Resin i tak dalej), na których regularnie trzebatestowa implementowany kod �ród�owy. Druga wada polega na tym, �e w takim rozwi�zaniuna serwer kopiowane s� zarówno pliki z kodem �ród�owym Javy, jak i pliki klas, cho taknaprawd� niezb�dne s� tylko te ostatnie. Na serwerze biurkowym nie ma to wi�kszego zna-czenia, lecz gdy przyjdzie do wdro�enia aplikacji na „prawdziwym” serwerze produkcyjnym,pliki z kodem �ród�owym nie powinny na niego trafi.

Page 23: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

30 Core Java Servlets i JavaServer Pages

Wykorzystanie funkcji wdra�ania udost�pnianych przez IDE

Wi�kszo� �rodowisk programistycznych do tworzenia serwletów i stron JSP (takich jak IBMWebSphere Studio Application Developer, Sun ONE Studio, NetBeans, Oracle JDeveloper,Borland JBuilder, Eclipse z MyEclipseIDE czy wtyczkami NitroX) pozwala na stosowanietakich konfiguracji, w których jednym klikni�ciem myszy mo�liwe jest wdro�enie aplikacjiinternetowej na serwerze testowym, rozwojowym lub produkcyjnym.

Mimo i� �rodowiska IDE maj� wiele niekwestionowanych zalet, nie s� one jednak wolne odwad. Wi�kszo� prawdziwych �rodowisk IDE trzeba najpierw pozna, co zajmuje troch�czasu. Nie mo�na si� wi�c skoncentrowa na zadaniach stricte programistycznych, przynajm-niej na pocz�tku. Ponadto cz�sto si� zdarza, �e programi�ci s� przerzucani z jednego projektu nadrugi, a programi�ci pracuj�cy wspólnie nad dan� aplikacj� musz� korzysta z takiego samego�rodowiska IDE. Gdy wi�c programista przejdzie do innego zespo�u projektowego, w którymkompilacja i wdra�anie aplikacji b�d� wykonywane w innym �rodowisku IDE ni� to, któregodot�d u�ywa� programista, konieczne b�dzie poznanie nowego narz�dzia i przyzwyczajeniesi� do pracy w nim. To z kolei b�dzie wymaga po�wi�cenia dodatkowego czasu.

U�ywanie narz�dzi ant, maven i im podobnych

Narz�dzie ant zaimplementowane przez Apache Foundation dzia�a podobnie jak make w �rodo-wisku UNIX. Jednak ant zosta� napisany w Javie (dzi�ki czemu jest przeno�ny) i powszech-nie uwa�a si�, �e w porównaniu z make jest prostszy w u�yciu i bardziej rozbudowany. Wieluprogramistów serwletów i stron JSP kompiluje i wdra�a aplikacje w�a�nie przy u�yciu ant.Sposób u�ywania narz�dzia ant zosta� opisany w dodatku „Tworzenie Aplikacji przy u�yciunarz�dzia Apache ant”.

Ogólne informacje o ant s� dost�pne na stronie pod adresem http://ant.apache.org/manual/,natomiast wskazówki dotycz�ce u�ywania ant z serwerem Tomcat znajduj� si� pod adresemhttp://tomcat.apache.org/tomcat-5.5-doc/appdev/processes.html.

G�ówn� zalet� takiego rozwi�zania jest elastyczno� — ant jest tak rozbudowany, �e obs�u-guje wszystkie etapy od kompilacji kodu �ród�owego Javy, przez kopiowanie plików a� pogenerowanie plików archiwum WAR (wi�cej na ten temat w punkcie 1.5).

Kolejnym narz�dziem, które przyci�ga uwag� programistów Javy, jest narz�dzie maven. Na-rz�dzie to rozszerza mo�liwo�ci ant, dlatego w niektórych przypadkach bardzo je przypomina,a w niektórych zasadniczo si� od niego ró�ni. Wprawdzie maven jest równie elastyczny jakant, lecz jego twórcy skupili si� przede wszystkim na prostocie jego u�ywania. Dlatego te�wa�n� rol� odgrywaj� w nim konwencje. maven mo�e na przyk�ad skompilowa kod �ród�owynawet wówczas, gdy programista nie wska�e go w folderze projektowym. Jest to mo�liwedzi�ki temu, �e w maven przyj�to, i� zgodnie z konwencj� kod �ród�owy j�zyka Java znajdujesi� w folderze src/main/java. Oczywi�cie, za�o�enie to mo�na zmienia, ale po co? Dzi�kizastosowaniu konwencji pliki konfiguracyjne programu maven s�, w odró�nieniu od ant, bardzokrótkie i zrozumia�e. Wi�cej informacji na temat tego narz�dzia mo�na znale� na stroniehttp://maven.apache.org.

Page 24: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 31

Wad� zarówno ant, jak i maven jest konieczno� po�wi�cenia okre�lonego czasu na nauk�pracy z nimi. Zasadniczo krzywa uczenia si� ant i maven jest bardziej stroma ni� w przypadkudwóch pierwszych technik prezentowanych w tym podrozdziale. Natomiast istotn� ró�nic�mi�dzy po�wi�caniem czasu na nauk� konkretnego �rodowiska IDE a poznawaniem narz�dziaant albo maven jest to, �e w coraz wi�kszej liczbie �rodowisk ant i maven s� u�ywane jakorozwi�zanie standardowe, zamiast narz�dzi charakterystycznych tylko dla tych �rodowisk.Mo�na si� wi�c spodziewa, �e wiadomo�ci na temat ant lub maven b�dzie mo�na wyko-rzystywa równie� w dalszej przysz�o�ci.

U�ywanie IDE wraz z narz�dziem Ant

rodowiska IDE zwi�kszaj� efektywno� pracy programistów, poniewa� pomagaj� tworzykod �ród�owy, natomiast ograniczaj� mo�liwo�ci jego przenoszenia. Narz�dzie ant z koleipozwala na tworzenie aplikacji przeno�nych, lecz w �adnej mierze nie pomaga pisa kodu�ród�owego. Co z tym zrobi?

Przepa� dziel�c� ant i IDE mo�na nieco zmniejszy przez u�ywanie �rodowiska IDE zinte-growanego z ant. Dzi�ki temu nadal mo�na pracowa z ulubionym �rodowiskiem programi-stycznym, które wspiera proces pisania kodu �ród�owego, a jednocze�nie jednym klikni�-ciem myszy wywo�uje skrypty ant odpowiadaj�ce za skompilowanie i wdro�enie aplikacji.Takiego rozwi�zania mo�na u�ywa nawet w �rodowiskach, które z ant nie s� zintegrowane(cho wi�kszo� wspó�czesnych �rodowisk tak� integracj� ju� posiada), lecz b�dzie to wyma-ga prze��czania si� mi�dzy wierszem polece� a �rodowiskiem programistycznym.

Takie podej�cie doskonale sprawdza si� w prawdziwych projektach. Programi�ci u�ywaj�ulubionych IDE, w których pisanie kodu jest bardziej efektywne, za� sam projekt nie jestnara�ony na powstawanie niespójno�ci w trakcie wdro�enia, poniewa� kompilacja i wdro-�enie s� przeprowadzane przez ten sam przeno�ny skrypt ant. Uczestniczyli�my w projektach,w których poszczególni programi�ci nale��cy do zespo�u projektowego tworz�cego jedn�aplikacj� internetow� korzystali z ró�nych IDE; niektórzy z nich pracowali nawet w odmien-nych systemach operacyjnych. Proces wdra�ania aplikacji natomiast pozostawa� spójny, a samiprogrami�ci byli zadowoleni z mo�liwo�ci u�ywania swoich ulubionych narz�dzi progra-mistycznych. A czy� zadowolenie programisty nie jest najwa�niejsze?

1.5. Umieszczanie aplikacji internetowychw plikach WARPliki archiwum WWW (ang. Web archive — WAR) doskonale nadaj� si� do ��czenia w poje-dynczym archiwum ca�ych aplikacji internetowych. Jeden du�y plik z aplikacj� zast�puj�cywiele ma�ych plików znacznie �atwiej jest przenosi z serwera na serwer.

Archiwum WAR jest tak naprawd� plikiem JAR z rozszerzeniem .war i tworzy si� go zwyk�ympoleceniem jar. Aby na przyk�ad umie�ci ca�� aplikacj� aplikacja_internetowa w plikuWAR o nazwie aplikacja_internetowa.war, nale�y przej� do katalogu aplikacja_internetowai wykona nast�puj�ce polecenie:

Page 25: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

32 Core Java Servlets i JavaServer Pages

jar cvf aplikacja_internetowa.war *

Pliku WAR nie ��czy z poleceniem jar �adna specjalna zale�no�. Polecenie jar jest taknaprawd� jednym z wielu narz�dzi, dzi�ki któremu mo�na tworzy archiwa plików. Takiesamo archiwum mo�na utworzy na przyk�ad przy u�yciu programu WinZip (albo tarw systemie UNIX). Wystarczy w tym celu wskaza nazw� pliku docelowego z rozszerzeniem.war zamiast rozszerzenia .zip.

Oczywi�cie, nic nie stoi na przeszkodzie, by w trakcie tworzenia archiwów WAR wykorzy-sta inne opcje narz�dzia jar (na przyk�ad cyfrowo podpisywa klasy), tak samo jak wobecstandardowych plików JAR. Wi�cej szczegó�owych informacji na ten temat mo�na znale�pod adresem http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/jar.html (dotyczy sys-temu Windows) oraz http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/jar.html (dotyczysystemów UNIX/Linux).

1.6. Tworzenie prostej aplikacji internetowejCzas ju� przej� od s�ów do czynów, czyli utworzy pierwsz� aplikacj� internetow�. Jakoserwer u�yty zostanie serwer Tomcat, lecz opisywane czynno�ci b�d� przebiega podobnierównie� w przypadku wykorzystania innych serwerów. Wi�cej informacji na ten temat przed-stawiono w punkcie 1.3, „Rejestrowanie aplikacji internetowych na serwerze”.

W celu utworzenia aplikacji nale�y wykona nast�puj�ce kroki:

1. Z ftp://ftp.helion.pl/przyklady/jsp2w2.zip pobra aplikacj� app-blank i zmieni jejnazw� na testApp.

2. Z tej samej witryny pobra pliki test.html, test.jsp oraz TestServlet.java.

3. Doda do tej aplikacji pliki test.html i test.jsp.

4. Umie�ci plik TestServlet.java w katalogu testApp/WEB-INF/classes/coreservlets.

5. Skompilowa plik TestServlet.java.

6. Zadeklarowa w pliku web.xml klas� TestServlet.class oraz adres URL,który b�dzie j� wywo�ywa.

7. Skopiowa aplikacj� testApp do katalogu katalog_tomcat/webapps.

8. Uruchomi serwer Tomcat.

9. Wywo�a aplikacj� testApp, wpisuj�c adres URL w postacihttp://localhost/testApp/nazwaZasobu.

Wymienione czynno�ci zostan� szczegó�owo opisane w kolejnych sekcjach.

Page 26: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 33

Pobranie aplikacji app-blank i zmiana jej nazwy na testApp

Ten krok jest bardzo prosty. Wystarczy z ftp://ftp.helion.pl/przyklady/jsp2w2.zip pobra plikapp-blank.zip. Zawiera on odpowiedni� struktur� katalogów dla ka�dej aplikacji internetowejzgodnej ze specyfikacj� J2EE. Archiwum to zawiera tak�e wyj�ciow� wersj� deskryptora wdro-�enia web.xml, w którym znajduje si� odwzorowanie wy��czaj�ce wywo�ywacz serwletu. Wi�-cej na temat odwzorowywania serwletów powiemy przy okazji odwzorowywania adresuURL na serwlet TestServlet. Na razie wystarczy rozpakowa archiwum app-blank.zip dowybranego katalogu i zmieni nazw� katalogu na testApp. Trzeba równie� pami�ta, by katalogtestApp trafi� do katalogu, który b�dzie si� znajdowa� poza struktur� katalogów serwera Tomcat.

Pobranie plików test.html, test.jsp oraz TestServlet.java

Podobnie jak w poprzednim kroku, wymagane pliki mo�na pobra z ftp://ftp.helion.pl/�przyklady/jsp2w2.zip. Pliki mo�na pobra oddzielnie jeden po drugim b�d� te� w postaci po-jedynczego archiwum testAppFiles.zip, a nast�pnie rozpakowa je w wybranym katalogu.

Dodanie plików test.html i test.jsp do aplikacji internetowej testApp

Pliki test.html i test.jsp nale�y umie�ci w katalogu testApp, a nast�pnie utworzy w nimkatalog someDirectory i wstawi w nim kopi� plików test.html i test.jsp. Plik test.html zawieratre� statyczn�, natomiast test.jsp zawiera skrypt zwracaj�cy adres URL, z którego wywo�anostron�. Na listingach 1.1 i 1.2 przedstawiono kompletne kody �ród�owe obydwóch plików.

Listing 1.1. test.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>Test HTML</TITLE></HEAD><BODY BGCOLOR="#FDF5E6"><H1>Test HTML</H1>Witaj.</BODY></HTML>

Listing 1.2. test.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>Test JSP</TITLE></HEAD><BODY BGCOLOR="#FDF5E6"><H1>Test JSP</H1>U�yto nast�puj�cego adresu URL:<%= request.getRequestURL() %></BODY></HTML>

Page 27: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

34 Core Java Servlets i JavaServer Pages

Umieszczenie pliku TestServlet.java w katalogutestApp/WEB-INF/classes/coreservlets

W pliku TestServlet.java znajduje si� deklaracja, wed�ug której serwlet nale�y do pakietucoreservlets. Zatem plik TestServlet.java musi znale� si� w tym pakiecie, zanim b�dziemo�na go skompilowa. Podobnie jak plik test.jsp, plik TestServlet.class zawiera kod zwra-caj�cy adres URL, za pomoc� którego nast�pi�o wywo�anie serwletu. Pe�ny kod �ród�owyserwletu TestServlet.java znajduje si� na listingu 1.3.

Listing 1.3. TestServlet.java

package coreservlets;

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class TestServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n"; out.println (docType + "<HTML>\n" + "<HEAD><TITLE>Test serwletu</TITLE></HEAD>\n" + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1>Test serwletu</H1>\n" + "U�yto nast�puj�cego adresu URL: " + request.getRequestURL() + "\n" + "</BODY></HTML>"); }}

Kompilacja pliku TestServlet.java

Nale�y pami�ta, by w zmiennej �rodowiskowej CLASSPATH wskaza interfejs programistyczny(API) serwletów. Serwer Tomcat udost�pnia interfejs w postaci pliku servlet-api.jar, znajdu-j�cym si� w katalogu katalog_tomcat/common/lib. W systemie Windows zmienn� CLASSPATHmo�na zdefiniowa w wierszu polece� systemu operacyjnego, przez wykonanie nast�puj�cegopolecenia:

set CLASSPATH=katalog_tomcat\common\lib\servlet-api.jar

Natomiast w �rodowiskach zgodnych z UNIX/Linux zmienn� CLASSPATH mo�na zdefiniowaprzy u�yciu konsoli, przez wykonanie polecenia o nast�puj�cej tre�ci:

CLASSPATH=katalog_tomcat/common/lib/servlet-api.jar

Page 28: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 35

Po odpowiednim zdefiniowaniu zmiennej CLASSPATH mo�na ju� skompilowa plik TestServlet.�java. W tym celu nale�y przej� do katalogu testApp/WEB-INF/classes/coreservlets i wpi-sa nast�puj�ce polecenie:

javac TestServlet.java

Gdy kompilacja dobiegnie ko�ca, w katalogu testApp/WEB-INF/classes/coreservlets powinnapojawi si� klasa TestServlet.class.

Zadeklarowanie w pliku web.xml klasy TestServlet.classoraz adresu URL, który j� wywo�uje

Nale�y przej� do katalogu testApp/WEB-INF i otworzy w ulubionym edytorze j�zyka XML(Extensible Markup Language) albo edytorze tekstu plik web.xml. Aby zadeklarowa klas�TestServlet.class nale�y bezpo�rednio za komentarzem <!-- Tutaj nale�y umie�ci� w�asnewpisy --> umie�ci poni�sze wiersze kodu:

<servlet> <servlet-name>Test</servlet-name> <servlet-class>coreservlets.TestServlet</servlet-class></servlet>

Przedstawiony fragment zawiera deklaracj� serwletu o nazwie Test, który reprezentuje kla-s� TestServlet.class. Warto zwróci uwag�, �e element <servlet-class> wskazuje w pe�n�nazw� klasy serwletu w postaci nazwaPakietu.nazwaKlasy (bez rozszerzenia .class).

W nast�pnym kroku trzeba wskaza serwerowi Tomcat adresy URL, które maj� wywo�ywaserwlet Test. W tym celu w pliku web.xml nale�y bezpo�rednio po zamkni�ciu elementu</servlet> umie�ci nast�puj�ce wiersze kodu:

<servlet-mapping> <servlet-name>Test</servlet-name> <url-pattern>/test</url-pattern></servlet-mapping>

Powy�sze wiersze wskazuj� serwerowi Tomcat, �e gdy klient wywo�a aplikacj� internetow�testApp przy u�yciu adresu URL w postaci http://komputer/testApp/test, powinien zostawywo�any wcze�niej zadeklarowany serwlet Test. Zawarto� pliku web.xml przedstawionona listingu 1.4.

Listing 1.4. web.xml

<?xml version="1.0" encoding="ISO-8859-1"?><!-- Plik web.xml z szablonu aplikacji WWW app-blank, z witryny http://courses.coreservlets.com/Course-Materials/. Zawiera dwa standardowe elementy: welcome-file-list oraz servlet-mapping, który wy��cza wywo�ywacz serwletu.--><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

Page 29: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

36 Core Java Servlets i JavaServer Pages

<!-- Tutaj nale�y umie�ci� w�asne wpisy --> <servlet> <servlet-name>Test</servlet-name> <servlet-class>coreservlets.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping>

<!-- Wy��czenie wywo�ywacza serwletu --> <servlet> <servlet-name>NoInvoker</servlet-name> <servlet-class>coreservlets.NoInvokerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>NoInvoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping>

<!-- Je�eli adres URL zawiera katalog bez nazwy pliku, nast�pi próba wywo�ania pliku index.jsp, a nast�pnie index.html. Je�eli �aden z tych plików nie zostanie znaleziony, efekt b�dzie zale�e� od serwera (np. mo�e zosta� wy�wietlona zawarto�� katalogu). --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> </welcome-file-list></web-app>

Wi�cej informacji na temat pliku web.xml znajduje si� w rozdziale 2., „Kontrolowanie dzia�aniaaplikacji przy u�yciu deskryptora web.xml”.

Skopiowanie aplikacji testApp do katalogu katalog_tomcat/webapps

W tym kroku nale�y skopiowa ca�� struktur� katalogów, pocz�wszy od katalogu g�ównegoaplikacji testApp, do katalogu automatycznego wdro�enia na serwerze Tomcat katalog_tomcat/�webapps. Alternatywnie mo�na spakowa aplikacj� testApp do pliku WAR (przy u�yciupolecenia jar, programu WinZip albo narz�dzia tar lub innego, podobnego programu),a nast�pnie skopiowa sam plik WAR do katalogu katalog_tomcat/webapps. Bez wzgl�duna to, czy do katalogu docelowego trafi aplikacja w swojej „rozdrobnionej” wersji, czy jakoplik WAR, ostateczny efekt b�dzie identyczny.

Uruchomienie serwera Tomcat

Serwer Tomcat mo�na uruchomi w systemie Windows przez wywo�anie pliku katalog_tomcat/�bin/startup.bat. W systemie UNIX/Linux nale�y w tym celu wywo�a plik katalog_tomcat/�bin/startup.sh. Tomcat odnajdzie nowy katalog w swym katalogu automatycznego wdra-�ania i automatycznie zarejestruje i wdro�y aplikacj� internetow� testApp.

Page 30: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 37

Wywo�anie aplikacji testApp przy u�yciu adresu URLw postaci http://localhost/testApp/zasób

Wywo�anie adresów URL w postaci http://localhost/testApp/test.html oraz http://localhost/�testApp/someDirectory/test.html spowoduje wy�wietlenie w przegl�darce pliku test.html.Wywo�anie adresów http://localhost/testApp/test.jsp oraz http://localhost/testApp/some�Directory/test.jsp spowoduje wywo�anie pliku test.jsp, natomiast adres URL w postacihttp://localhost/testApp/test wywo�a serwlet TestServlet.class.

Wszystkie przytoczone adresy zadzia�aj� przy za�o�eniu, �e zgodnie z zaleceniem przedsta-wionym w pierwszym tomie niniejszej ksi��ki w pliku konfiguracyjnym serwera Tomcat(katalog_tomcat/conf/server.xml) wskazany zostanie port numer 80. Je�eli zmiana ta nie zosta�awprowadzona, wystarczy we wszystkich adresach URL zast�pi s�owo localhost s�owemlocalhost:8080. Na rysunkach od 1.4 do 1.8 przedstawiono zrzuty ekranów b�d�cych wynikiemwywo�ania poszczególnych zasobów.

Rysunek 1.4.Wynik wywo�aniaadresuhttp://localhost/�testApp/test.html

Rysunek 1.5.Wynik wywo�aniaadresuhttp://localhost/�testApp/test.jsp

Page 31: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

38 Core Java Servlets i JavaServer Pages

Rysunek 1.6.Wynik wywo�aniaadresuhttp://localhost/�testApp/�someDirectory/�test.html

Rysunek 1.7.Wynik wywo�aniaadresuhttp://localhost/�testApp/�someDirectory/�test.jsp

Rysunek 1.8.Wynik wywo�aniaadresuhttp://localhost/�testApp/test

Page 32: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 39

1.7. Wspó�u�ytkowanie danychprzez aplikacje internetowe

Jednym z g�ównych celów aplikacji internetowych jest oddzielenie danych od udost�pnianychfunkcji. Ka�da aplikacja internetowa utrzymuje w�asn� tabel� sesji oraz w�asny kontekstserwletów. Ponadto ka�da aplikacja u�ywa w�asnego modu�u �adowania klas. Dzi�ki temuwyeliminowano problemy zwi�zane z konfliktami nazw, lecz z drugiej strony oznacza to, �edo wspó�u�ytkowania danych mi�dzy aplikacjami nie mo�na u�ywa metod i pól statycznych.Nadal jednak wspó�u�ytkowanie danych jest mo�liwe dzi�ki plikom cookies albo przy u�yciuobiektów ServletContext powi�zanych z konkretnymi adresami URL. Obydwa podej�ciaca�kiem dobrze sprawdzaj� si� wówczas, gdy ilo� danych wymienianych mi�dzy aplikacjamijest niewielka, lecz gdy wolumen wymienianych danych b�dzie du�y i wymiana b�dzie za-chodzi stosunkowo cz�sto, nale�y rozwa�y mo�liwo� po��czenia tych aplikacji w jedn�wi�ksz� aplikacj� internetow�. Poni�ej krótko opisano obydwie wymienione powy�ej metodywspó�u�ytkowania danych mi�dzy aplikacjami.

� Pliki cookies. Pliki cookies s� utrzymywane przez przegl�dark�, a nie przez serwer.Dzi�ki temu cookies mog� by wspó�u�ytkowane przez wiele aplikacji internetowych,je�li tylko ustawiono je w taki sposób, by dotyczy�y dowolnej �cie�ki na serwerze.Domy�lnie przegl�darka wysy�a pliki cookies jedynie do tych adresów URL,których prefiks jest taki sam, jak prefiks adresu URL, z którego one pochodz�.Na przyk�ad je�eli plik cookie zostanie przes�any ze strony o adresiehttp://komputer/�cie�ka1/Jaki�Plik.jsp, wówczas przegl�darka b�dzieprzesy�a cookie do stron o adresach http://komputer/�cie�ka1/Jaki�InnyPlik.jsporaz http://komputer/�cie�ka1/�cie�ka2/DowolnyAdres, natomiast do adresuhttp://komputer/�cie�ka3/DowolnyAdres cookie ju� nie zostanie wys�ane.Poniewa� aplikacje internetowe zawsze maj� unikatowe prefiksy adresu URL,takie zachowanie przegl�darek spowoduje, �e plik cookie nigdy nie b�dzieu�ytkowany przez dwie ró�ne aplikacje.

Jednak zgodnie z informacjami zawartymi w rozdziale 8. pierwszego tomu tejksi��ki to standardowe ustawienie mo�na zmieni za pomoc� metody setPathklasy Cookie. Wystarczy wywo�a t� metod� z argumentem "/", dzi�ki czemuprzegl�darka zacznie wysy�a pliki cookie do wszystkich adresów URLznajduj�cych si� na komputerze, z którego otrzymany zosta� oryginalny plik:

Cookie c = new Cookie("nazwa", "warto��");c.setMaxAge(…);c.setPath("/");response.addCookie(c);

� Obiekty ServletContext powi�zane z okre�lonym adresem URL. W ramach serwletukontekst serwletu aplikacji internetowej odczytuje si� przez wywo�anie jegometody getServletContext (dziedziczonej z klasy GenericServlet). Na stronie JSPu�ywa si� natomiast do tego celu predefiniowanej zmiennej application. W obydwóchprzypadkach zwracan� warto�ci� jest kontekst serwletu powi�zany z serwletemlub stron� JSP, z których pochodzi�o wywo�anie. Dodatkowo mo�na równie� u�ymetody getContext obiektu ServletContext, która zwróci kontekst serwletu

Page 33: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

40 Core Java Servlets i JavaServer Pages

— niekoniecznie w�asnego — powi�zanego ze wskazanym adresem URL.Podej�cie to przedstawiono w poni�szym fragmencie kodu:

ServletContext myContext = getServletContext();String url = "/prefiksAplikacjiWWW";ServletContext otherContext = myContext.getContext(url);Object someData = otherContext.getAttribute("jaki�Klucz");

Ani jedno, ani drugie przedstawione rozwi�zanie nie jest idealne.

Wad� plików cookie jest to, �e mo�na w nich przechowywa tylko ograniczon� ilo� danych.Ka�da warto� znajduj�ca si� w pliku cookie jest ci�giem znaków, a d�ugo� ka�dego ci�guznaków jest ograniczona do czterech kilobajtów. Zatem wspó�u�ytkowanie wi�kszych ilo�cidanych wymaga u�ycia bazy danych, a w plikach cookie przechowywane b�d� wówczasjedynie warto�ci pe�ni�ce rol� kluczy do tej bazy, a wi�c do danych rzeczywistych.

S�ab� stron� rozwi�zania bazuj�cego na kontekstach serwletów jest to, �e z góry trzebaw nich zna prefiksy adresów URL u�ywanych przez inne aplikacje internetowe. Zwykleoczekuje si� mo�liwo�ci dowolnego zmieniania prefiksu adresu aplikacji bez konieczno�ciwprowadzania jakichkolwiek zmian w kodzie aplikacji. U�ywanie metody getContext t�elastyczno� ogranicza. Drug� wad� jest to, �e ze wzgl�dów bezpiecze�stwa na serwerachmo�na blokowa dost�p do kontekstów serwletów ServletContext niektórych aplikacji inter-netowych. Gdy co� takiego nast�pi, metoda getContext b�dzie zwraca warto� null. Naprzyk�ad w niektórych wersjach serwera Tomcat mo�liwo� wspó�u�ytkowania kontekstówjest domy�lnie w��czona, natomiast w innych wersjach serwera mo�liwo� t� trzeba jawnieudost�pni. Choby na serwerze Tomcat w wersji 5.5.7 jako cz�� elementu Context w plikukatalog_tomcat/conf/context.xml mo�na doda atrybut crossContext="true", który w��czamo�liwo� wspó�u�ytkowania kontekstów i czyni j� rozwi�zaniem domy�lnym dla wszystkichwdro�onych aplikacji. Z kolei ca�kowite pomini�cie atrybutu crossContext powoduje, �eTomcat b�dzie si� zachowywa� w sposób domy�lny, to znaczy wspó�u�ytkowanie kontekstówServletContext mi�dzy aplikacjami b�dzie zabronione.

Obydwie metody wspó�u�ytkowania danych zaimplementowano w serwletach SetSharedInfooraz ShowSharedInfo, których kody �ród�owe przedstawiono odpowiednio na listingach1.5 i 1.6. Obydwa te serwlety zosta�y odwzorowane na adresy URL w deskryptorze wdro�eniawidocznym na listingu 1.7. Serwlet SetSharedInfo tworzy w�asne wpisy w obiekcie sesji,a tak�e kontekst serwletu. Ponadto serwlet ten tworzy dwa pliki cookie. Pierwszy z nichzawiera �cie�k� domy�ln� wskazuj�c�, �e cookie powinno by stosowane jedynie dla adresówURL z prefiksem identycznym jak URL, z którego nadesz�o pierwotne ��danie. Drugi plikcookie zawiera �cie�k� w postaci "/", co oznacza, �e cookie powinno by stosowane dowszystkich adresów URL na komputerze. Na ko�cu serwlet SetSharedInfo przekierowujeklienta do serwletu ShowSharedInfo, który z kolei wy�wietla nazwy wszystkich atrybutów sesji,wszystkich atrybutów w bie��cym kontek�cie serwletu, wszystkich atrybutów w kontek�cieserwletu dotycz�cego adresów URL z prefiksem /shareTest1 oraz nazwy wszystkich plikówcookie.

Listing 1.5. SetSharedInfo.java

package coreservlets;

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

Page 34: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 41

public class SetSharedInfo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(true); session.setAttribute("sessionTest", "Sesja - wpis pierwszy"); ServletContext context = getServletContext(); context.setAttribute("servletContextTest", "Kontekst serwletu - wpis pierwszy"); Cookie c1 = new Cookie("cookieTest1", "Cookie numer jeden"); c1.setMaxAge(3600); // jedna godzina response.addCookie(c1); // �cie�ka domy�lna Cookie c2 = new Cookie("cookieTest2", "Cookie numer dwa"); c2.setMaxAge(3600); // jedna godzina c2.setPath("/"); // bezpo�rednie wyznaczenie �cie�ki: wszystkie adresy URL response.addCookie(c2); String url = request.getContextPath() + "/showSharedInfo"; // na wypadek, gdyby �ledzenie sesji bazowa�o na przepisywaniu adresów URL url = response.encodeRedirectURL(url); response.sendRedirect(url); }}

Listing 1.6. ShowSharedInfo.java

package coreservlets;

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;

public class ShowSharedInfo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); String title = "Dane wspó�u�ytkowane"; out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">" + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" + "<UL>\n" + " <LI>Sesja:"); HttpSession session = request.getSession(true); Enumeration attributes = session.getAttributeNames(); out.println(getAttributeList(attributes)); out.println(" <LI>Bie��cy kontekst serwletu:"); ServletContext application = getServletContext(); attributes = application.getAttributeNames(); out.println(getAttributeList(attributes)); out.println(" <LI>Kontekst serwletu /shareTest1:");

Page 35: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

42 Core Java Servlets i JavaServer Pages

application = application.getContext("/shareTest1"); if (application == null) { out.println("Wspó�u�ytkowanie kontekstów wy��czone"); } else { attributes = application.getAttributeNames(); out.println(getAttributeList(attributes)); } out.println(" <LI>Pliki cookies:<UL>"); Cookie[] cookies = request.getCookies(); if ((cookies == null) || (cookies.length == 0)) { out.println(" <LI>Nie znaleziono plików cookie."); } else { Cookie cookie; for(int i=0; i<cookies.length; i++) { cookie = cookies[i]; out.println(" <LI>" + cookie.getName()); } } out.println(" </UL>\n" + "</UL>\n" + "</BODY></HTML>"); }

private String getAttributeList(Enumeration attributes) { StringBuffer list = new StringBuffer(" <UL>\n"); if (!attributes.hasMoreElements()) { list.append(" <LI>Nie znaleziono atrybutów."); } else { while(attributes.hasMoreElements()) { list.append(" <LI>"); list.append(attributes.nextElement()); list.append("\n"); } } list.append(" </UL>"); return(list.toString()); }}

Listing 1.7. web.xml

<?xml version="1.0" encoding="ISO-8859-1"?><!-- Plik web.xml z szablonu aplikacji WWW app-blank, z witryny http://courses.coreservlets.com/Course-Materials/. Zawiera dwa standardowe elementy: welcome-file-list oraz servlet-mapping, który wy��cza wywo�ywacz serwletu.--><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

<!-- Tutaj nale�y umie�ci� w�asne wpisy --> <servlet> <servlet-name>setSharedInfoServlet</servlet-name>

Page 36: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 43

<servlet-class>coreservlets.SetSharedInfo</servlet-class> </servlet> <servlet-mapping> <servlet-name>setSharedInfoServlet</servlet-name> <url-pattern>/setSharedInfo</url-pattern> </servlet-mapping> <servlet> <servlet-name>showSharedInfoServlet</servlet-name> <servlet-class>coreservlets.ShowSharedInfo</servlet-class> </servlet> <servlet-mapping> <servlet-name>showSharedInfoServlet</servlet-name> <url-pattern>/showSharedInfo</url-pattern> </servlet-mapping>

<!-- Wy��czenie wywo�ywacza serwletu --> <servlet> <servlet-name>NoInvoker</servlet-name> <servlet-class>coreservlets.NoInvokerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>NoInvoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping>

<!-- Je�eli URL zawiera katalog bez nazwy pliku, nast�pi próba wywo�ania pliku index.jsp, a nast�pnie index.html. Je�eli �aden z tych plików nie zostanie znaleziony, efekt b�dzie zale�e� od serwera (np. mo�e zosta� wy�wietlona zawarto�� katalogu). --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> </welcome-file-list></web-app>

W celu sprawdzenia dzia�ania przedstawionej aplikacji nale�y uruchomi tylko serwletSetSharedInfo z aplikacji shareTest1, a po nim wywo�a serwlet ShowSharedInfo aplikacjishareTest1 oraz shareTest2. Nie nale�y natomiast wywo�ywa serwletu ShowSharedInfoz aplikacji shareTest2, poniewa� nie zilustruje on mechanizmu wspó�u�ytkowania danychprzez te dwie aplikacje.

Na rysunku 1.9 przedstawiono wynik wywo�ania przez u�ytkownika serwletów SetSharedInfoi ShowSharedInfo z aplikacji internetowej, której przypisano prefiks adresu URL /shareTest1.Dla serwletu ShowSharedInfo dost�pne s�:

� W�asny atrybut sesji.

� Atrybuty znajduj�ce si� w domy�lnym kontek�cie serwletu — w�asny(utworzony jawnie przez serwlet ShowSharedInfo) oraz standardowy(utworzony automatycznie przez serwer).

� Atrybuty w�asny i standardowy, znajduj�ce si� w kontek�cie serwletu odczytanymprzez metod� getContext("/shareTest1"). W tym przypadku kontekst serwletu jestto�samy z domy�lnym kontekstem serwletu.

� Dwa jawnie utworzone pliki cookie oraz cookie utworzone przez system i u�ywaneprzez mechanizm �ledzenia sesji.

Page 37: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

44 Core Java Servlets i JavaServer Pages

Rysunek 1.9.Wynik wywo�aniaserwletówSetSharedInfoi ShowSharedInfoz tej samejaplikacjiinternetowej

Na rysunku 1.10 z kolei przedstawiono wynik pó�niejszego wywo�ania przez u�ytkownikaidentycznego serwletu ShowSharedInfo zainstalowanego w aplikacji internetowej, którejprzypisano prefiks adresu URL /shareTest2. Dla serwletu dost�pne s�:

� Standardowe atrybuty zawarte w domy�lnym kontek�cie serwletu.

� Atrybuty w�asny i standardowy znajduj�ce si� w kontek�cie serwletu odczytanymprzez metod� getContext("/shareTest1"); w tym przypadku jest to kontekst innyni� domy�lny kontekst serwletu.

� Dwa pliki cookie: jeden utworzony jawnie, którego �cie�k� jest "/",oraz drugi, utworzony przez system, u�ywany przez mechanizm �ledzenia sesji(w nim równie� u�ywana jest w�asna �cie�ka "/").

Z kolei nast�puj�ce elementy s� dla serwletu niewidoczne:

� Atrybuty znajduj�ce si� w obiekcie sesji.

� W�asne atrybuty znajduj�ce si� w domy�lnym kontek�cie serwletu.

� Jawnie utworzone pliki cookie, w których u�yto �cie�ki domy�lnej.

Page 38: Core Java Servlets i JavaServer Pages. Tom II. Wydanie II

Rozdzia� 1. � U�ywanie i wdra�anie aplikacji internetowych 45

Rysunek 1.10.Wynik wywo�aniaserwletuSetSharedInfow jednej aplikacjiinternetowejoraz serwletuShowSharedInfoz drugiej aplikacjiinternetowej