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

Transcript
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