Core Java Servlets
i JavaServer Pages.
Tom II. Wydanie II
Autor: Marty Hall,
Larry Brown, Yaakov Chaikin
T³umaczenie: Daniel Kaczmarek
ISBN: 978-83-246-1726-5
and Javaserver Pages: Advanced
Technologies, Vol. 2 (2nd Edition)
Format: 172x245, stron: 632
• Jak wykorzystaæ strumienie?
• Jak stworzyæ efektowny interfejs u¿ytkownika?
• Jak zapewniæ bezpieczeñstwo w tworzonych aplikacjach?
Co spowodowa³o, ¿e jêzyk programowania Java zyska³ tak wielk¹ popularnoœæ?
Przyczyn jest kilka: mo¿liwoœæ przenoszenia kodu miêdzy programami, wydajnoœæ i to,
co 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êpny
i 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!
Spis treci
Wprowadzenie ................................................................................................................................................ 11
Podzikowania ............................................................................................................................................... 15
O autorach ...................................................................................................................................................... 16
Rozdzia 1. Uywanie i wdraanie aplikacji internetowych ......................................................................... 17
1.1. Cele aplikacji internetowych .................................................................................... 18
Organizacja ....................................................................................................... 18
Przenono ..................................................................................................... 18
Separacja ......................................................................................................... 18
1.2. Struktura aplikacji internetowych ............................................................................... 19
Lokalizacje poszczególnych rodzajów plików ......................................................... 19
1.3. Rejestrowanie aplikacji internetowych na serwerze ..................................................... 23
Rejestrowanie aplikacji internetowych na serwerze Tomcat ................................... 24
Rejestrowanie aplikacji internetowych na innych serwerach ................................... 26
1.4. Strategie rozwoju i wdraania aplikacji internetowych .................................................. 28
Kopiowanie struktury do skrótu lub dowizania symbolicznego .............................. 29
Wykorzystanie funkcji wdraania udostpnianych przez IDE ................................... 30
Uywanie narzdzi ant, maven i im podobnych ..................................................... 30
Uywanie IDE wraz z narzdziem Ant ................................................................... 31
1.5. Umieszczanie aplikacji internetowych w plikach WAR .................................................. 31
1.6. Tworzenie prostej aplikacji internetowej ..................................................................... 32
Pobranie aplikacji app-blank i zmiana jej nazwy na testApp ................................... 33
Pobranie plików test.html, test.jsp oraz TestServlet.java ....................................... 33
Dodanie plików test.html i test.jsp do aplikacji internetowej testApp ..................... 33
Umieszczenie pliku TestServlet.java w katalogu
testApp/WEB-INF/classes/coreservlets .......................................................... 34
Kompilacja pliku TestServlet.java ........................................................................ 34
Zadeklarowanie w pliku web.xml klasy TestServlet.class oraz adresu URL,
który j wywouje ........................................................................................... 35
Skopiowanie aplikacji testApp do katalogu katalog_tomcat/webapps .................... 36
4
Core Java Servlets i JavaServer Pages
Uruchomienie serwera Tomcat ............................................................................ 36
Wywoanie aplikacji testApp przy uyciu adresu URL
w postaci http://localhost/testApp/zasób ...................................................... 37
1.7. Wspóuytkowanie danych przez aplikacje internetowe ................................................ 39
Rozdzia 2. Kontrolowanie dziaania aplikacji przy uyciu deskryptora web.xml ....................................47
2.1. Przeznaczenie deskryptora wdroenia ........................................................................ 48
2.2. Definiowanie elementu gównego i elementu nagówka ............................................... 48
2.3. Elementy deskryptora web.xml .................................................................................. 50
Wersja 2.4 specyfikacji serwletów ....................................................................... 50
Wersja 2.3 specyfikacji serwletów ....................................................................... 53
2.4. Przypisywanie nazw i wasnych adresów URL .............................................................. 55
Przypisywanie nazw ............................................................................................ 56
Definiowanie wasnych adresów URL ................................................................... 57
Nazewnictwo stron JSP ...................................................................................... 62
2.5. Wyczanie serwletu wywoujcego ............................................................................ 64
Zmiana odwzorowania wzorca adresu URL /servlet/ ............................................. 65
Globalne wyczanie serwletu wywoujcego na serwerze Tomcat .......................... 66
2.6. Inicjalizowanie i wstpne adowanie serwletów i stron JSP .......................................... 68
Przypisywanie serwletom parametrów inicjalizacyjnych .......................................... 68
Przypisywanie parametrów inicjalizacyjnych JSP .................................................... 71
Parametry inicjalizacyjne na poziomie caej aplikacji ............................................. 74
adowanie serwletów w momencie uruchamiania serwera .................................... 74
2.7. Deklarowanie filtrów ................................................................................................ 78
2.8. Definiowanie stron powitalnych ................................................................................. 81
2.9. Wyznaczanie stron obsugujcych bdy ..................................................................... 81
Element error-code ............................................................................................ 82
Element exception-type ...................................................................................... 84
2.10. Definiowanie zabezpiecze ...................................................................................... 86
Definiowanie metody uwierzytelniania ................................................................. 86
Ograniczanie dostpu do zasobów sieciowych ...................................................... 88
Przypisywanie ról ............................................................................................... 91
2.11. Kontrolowanie czasu wygasania sesji ....................................................................... 92
2.12. Dokumentowanie aplikacji internetowych .................................................................. 92
2.13. Przypisywanie plikom typów MIME ............................................................................ 93
2.14. Konfigurowanie stron JSP ........................................................................................ 94
Lokalizacja deskryptorów bibliotek znaczników ..................................................... 94
Konfigurowanie waciwoci stron JSP ................................................................. 95
2.15. Kodowanie znaków ............................................................................................... 100
2.16. Tworzenie procesów nasuchujcych zdarze aplikacji .............................................. 100
2.17. Tworzenie rozwiza przeznaczonych dla rodowisk klastrowych ............................... 101
2.18. Elementy J2EE ..................................................................................................... 104
Rozdzia 3. Zabezpieczenia deklaratywne ................................................................................................. 109
3.1. Uwierzytelnianie przy uyciu formularza .................................................................... 111
Definiowanie nazw uytkowników, hase i ról ...................................................... 113
Wczanie na serwerze uwierzytelniania przy uyciu formularzy
i wskazywanie lokalizacji strony logowania oraz strony obsugi bdu logowania .... 114
Tworzenie strony logowania .............................................................................. 115
Tworzenie strony z informacj o bdzie logowania ............................................. 118
Wskazywanie adresów URL, które maj by zabezpieczone hasem ..................... 118
Zdefiniowanie listy wszystkich abstrakcyjnych ról ............................................... 122
Spis treci
5
Wskazywanie adresów URL dostpnych wycznie
za porednictwem protokou SSL .................................................................. 122
Wyczanie serwletu wywoujcego .................................................................... 124
3.2. Przykad. Uwierzytelnianie przy uyciu formularzy ..................................................... 125
Strona gówna ................................................................................................. 125
Deskryptor wdroenia ....................................................................................... 126
Plik z hasami .................................................................................................. 129
Strony logowania i obsugi bdu logowania ....................................................... 130
Katalog investing ............................................................................................. 131
Katalog ssl ..................................................................................................... 134
Katalog admin ................................................................................................. 137
Serwlet NoInvokerServlet ................................................................................. 140
Strony niezabezpieczone .................................................................................. 141
3.3. Uwierzytelnianie metod BASIC ............................................................................... 144
Definiowanie nazw uytkowników, hase i ról ...................................................... 146
Wczanie na serwerze uwierzytelniania metod BASIC
i definiowanie nazwy obszaru ....................................................................... 146
Wskazywanie adresów URL, które maj by zabezpieczone hasem ..................... 146
Zdefiniowanie listy wszystkich abstrakcyjnych ról ............................................... 147
Wskazywanie adresów URL dostpnych wycznie
za porednictwem protokou SSL .................................................................. 147
3.4. Przykad. Uwierzytelnianie metod BASIC ................................................................. 147
Strona gówna ................................................................................................. 148
Deskryptor wdroenia ....................................................................................... 149
Plik hase ........................................................................................................ 151
Plan finansowy ................................................................................................ 151
Biznesplan ...................................................................................................... 152
Serwlet NoInvokerServlet ................................................................................. 154
3.5. Konfigurowanie obsugi protokou SSL na serwerze Tomcat ....................................... 155
3.6. WebClient. Interaktywna komunikacja z serwerami WWW .......................................... 161
3.7. Podpisywanie certyfikatu serwera ............................................................................ 164
Eksport certyfikatu CA ...................................................................................... 166
Komunikacja klienta WebClient z serwerem Tomcat przy uyciu protokou SSL ..... 170
Rozdzia 4. Zabezpieczenia programistyczne ........................................................................................... 173
4.1. czenie zabezpiecze programistycznych i zabezpiecze
zarzdzanych przez kontener ..................................................................... 175
Odwoania do ról ............................................................................................. 176
4.2. Przykad. czenie zabezpiecze programistycznych i zabezpiecze
zarzdzanych przez kontener ..................................................................... 177
4.3. Zastosowanie wycznie zabezpiecze programistycznych ......................................... 180
4.4. Przykad. Zastosowanie wycznie zabezpiecze programistycznych ........................... 184
4.5. Zabezpieczenia programistyczne i protokó SSL ......................................................... 187
Ustalenie, czy uywany jest protokó SSL ........................................................... 188
Przekierowywanie wywoa, które nie dotycz protokou SSL ............................... 188
Odczytanie liczby bitów w kluczu ....................................................................... 189
Sprawdzenie algorytmu szyfrowania .................................................................. 189
Dostp do certyfikatu X.509 klienta .................................................................. 189
4.6. Przykad. Zabezpieczenia programistyczne i protokó SSL .......................................... 190
6
Core Java Servlets i JavaServer Pages
Rozdzia 5. Filtry serwletów i stron JSP ................................................................................................... 195
5.1. Tworzenie prostych filtrów ...................................................................................... 196
Tworzenie klasy implementujcej interfejs Filter ................................................. 197
Implementacja filtra w metodzie doFilter ............................................................ 198
Wywoanie metody doFilter obiektu FilterChain ................................................... 198
Rejestrowanie filtra dla serwletów lub stron JSP ................................................. 198
Wyczenie serwletu wywoujcego .................................................................... 200
5.2. Przykad. Filtr raportujcy ........................................................................................ 201
5.3. Dostp do kontekstu serwletu z poziomu filtra ......................................................... 207
5.4. Przykad. Filtr zapisujcy do dziennika ..................................................................... 208
5.5. Uywanie parametrów inicjalizujcych dla filtrów ...................................................... 210
5.6. Przykad. Filtr czasu udostpnienia .......................................................................... 212
5.7. Blokowanie odpowiedzi .......................................................................................... 215
5.8. Przykad. Filtr blokujcy stron ................................................................................ 215
5.9. Modyfikowanie odpowiedzi ..................................................................................... 221
Obiekt przechowujcy odpowied, gotowy do wielokrotnego wykorzystania ............ 222
5.10. Przykad. Filtr zastpujcy ..................................................................................... 224
Ogólny filtr modyfikujcy ................................................................................... 224
Konkretny filtr modyfikujcy .............................................................................. 225
5.11. Przykad. Filtr kompresujcy .................................................................................. 230
5.12. Konfigurowanie wspópracy filtra z obiektem RequestDispatcher ............................. 235
5.13. Przykad. atanie potencjalnej dziury w zabezpieczeniach ........................................ 237
5.14. Pena definicja deskryptora wdroenia ................................................................... 243
Rozdzia 6. Model zdarze aplikacji ........................................................................................................... 249
6.1. Monitorowanie zdarze polegajcych na utworzeniu i zniszczeniu kontekstu serwletu ..... 252
6.2. Przykad. Inicjalizowanie wspóuytkowanych danych ................................................. 253
6.3. Wykrywanie zmian wartoci atrybutów kontekstu serwletu ......................................... 258
6.4. Monitorowanie zmian we wspóuytkowanych danych ................................................ 259
6.5. Umieszczanie obiektów nasuchujcych w bibliotekach znaczników ............................ 267
6.6. Przykad. Pakiet zawierajcy obiekty ledzce nazw firmy ........................................ 269
6.7. Wykrywanie zdarze tworzenia i niszczenia sesji ....................................................... 275
6.8. Przykad. Obiekt nasuchujcy, który zlicza sesje ...................................................... 276
Wyczanie obsugi plików cookie ...................................................................... 282
6.9. Wykrywanie zmian w atrybutach sesji ...................................................................... 283
6.10. Przykad. Monitorowanie zamówie na jachty ......................................................... 283
6.11. Wykrywanie inicjalizacji i zniszczenia dania serwletu ............................................ 290
6.12. Przykad. Obliczanie obcienia serwera daniami ................................................. 291
6.13. Wykrywanie zmian atrybutów w daniach serwletów .............................................. 296
6.14. Przykad. Zatrzymywanie obiektu zbierania statystyk da ...................................... 297
6.15. Wykorzystanie wielu obiektów nasuchujcych wspópracujcych ze sob ................. 299
ledzenie zamówie na towary z oferty dnia ....................................................... 300
Resetowanie licznika zamówie na oferty dnia ................................................... 306
6.16. Pena definicja deskryptora wdroenia ................................................................... 311
Rozdzia 7. Podstawowe informacje na temat bibliotek znaczników ....................................................... 317
7.1. Komponenty biblioteki znaczników .......................................................................... 318
Klasa obsugi znacznika ................................................................................... 319
Plik deskryptora biblioteki znaczników ............................................................... 320
Plik JSP .......................................................................................................... 321
Spis treci
7
7.2. Przykad. Prosty znacznik liczby pierwszej ................................................................. 322
7.3. Przypisywanie znacznikom atrybutów ....................................................................... 326
Atrybuty znacznika a klasa obsugi znacznika ..................................................... 326
Atrybuty znacznika a deskryptor biblioteki znaczników ......................................... 327
Atrybuty znacznika a plik JSP ............................................................................ 328
7.4. Przykad. Znacznik liczby pierwszej o zmiennej dugoci ............................................ 328
7.5. Zamieszczanie treci znacznika w danych zwracanych przez znacznik ......................... 330
Tre znacznika a klasa obsugi znacznika ......................................................... 330
Tre znacznika a deskryptor biblioteki znaczników ............................................ 331
Tre znacznika a plik JSP ................................................................................ 331
7.6. Przykad. Znacznik nagówka ................................................................................... 332
7.7. Przykad. Znacznik debugowania ............................................................................. 335
7.8. Tworzenie plików znaczników .................................................................................. 337
7.9. Przykad. Prosty znacznik liczby pierwszej z uyciem pliku znacznika ........................... 339
7.10. Przykad. Znacznik liczby pierwszej o zmiennej dugoci z uyciem pliku znacznika ...... 340
7.11. Przykad. Znacznik nagówka z uyciem pliku znacznika ............................................ 341
Rozdzia 8. Biblioteki znaczników. Funkcje zaawansowane .................................................................... 345
8.1. Operacje na treci znacznika .................................................................................. 346
8.2. Przykad. Znacznik filtrujcy kod HTML ..................................................................... 347
8.3. Przypisywanie atrybutom znaczników wartoci dynamicznych ..................................... 350
Dynamiczne wartoci atrybutów a klasa obsugi znacznika .................................. 351
Dynamiczne wartoci atrybutów a deskryptor biblioteki znaczników ...................... 351
Dynamiczne wartoci atrybutów a plik JSP ......................................................... 351
8.4. Przykad. Prosty znacznik wykonujcy ptl .............................................................. 352
8.5. Przypisywanie atrybutom znaczników wartoci w postaci zoonych obiektów .............. 356
Dynamiczne, zoone wartoci atrybutów a klasa obsugi znacznika ..................... 356
Dynamiczne, zoone wartoci atrybutów a deskryptor biblioteki znaczników ......... 356
Dynamiczne, zoone wartoci atrybutów a plik JSP ............................................ 357
8.6. Przykad. Znacznik formatujcy tabele ..................................................................... 357
8.7. Tworzenie znaczników wykonujcych ptle ............................................................... 362
8.8. Przykad. Znacznik forEach ..................................................................................... 363
8.9. Tworzenie funkcji jzyka wyrae ............................................................................. 367
8.10. Przykad. Ulepszony znacznik debugowania ............................................................. 369
8.11. Obsuga zagniedonych znaczników niestandardowych ........................................... 372
8.12. Przykad. Znacznik If-Then-Else ............................................................................... 373
Rozdzia 9. Biblioteka standardowych znaczników JSP (JSTL) ............................................................... 379
9.1. Instalacja biblioteki JSTL ........................................................................................ 380
9.2. Znacznik c:out ....................................................................................................... 381
9.3. Znaczniki c:forEach i c:forTokens ............................................................................ 382
9.4. Znacznik c:if .......................................................................................................... 383
9.5. Znacznik c:choose ................................................................................................. 384
9.6. Znaczniki c:set i c:remove ...................................................................................... 386
9.7. Znacznik c:import .................................................................................................. 388
9.8. Znaczniki c:url i c:param ........................................................................................ 391
9.9. Znacznik c:redirect ................................................................................................ 392
9.10. Znacznik c:catch .................................................................................................... 394
8
Core Java Servlets i JavaServer Pages
Rozdzia 10. Podstawy platformy Struts ................................................................................................... 397
10.1. Podstawy Struts ................................................................................................... 398
Róne strony Struts ......................................................................................... 398
Zalety platformy Apache Struts w porównaniu z MVC
z obiektem RequestDispatcher i JSP EL ........................................................ 398
Wady platformy Apache Struts w porównaniu z MVC
z obiektem RequestDispatcher i EL .............................................................. 400
10.2. Instalacja i konfiguracja platformy Struts ................................................................ 402
Instalacja Struts .............................................................................................. 402
Testowanie platformy Struts ............................................................................. 404
Tworzenie wasnych aplikacji Struts ................................................................... 405
Dodawanie Struts do ju istniejcej aplikacji internetowej ................................... 405
10.3. Proces przetwarzania Struts i sze kroków do jego implementacji ........................... 406
Proces przetwarzania na platformie Struts ......................................................... 406
Sze podstawowych kroków w pracy ze Struts .................................................. 410
10.4. Przetwarzanie da przez obiekty Action ................................................................ 414
Dziaanie obiektów Action ................................................................................. 415
Przykad. Odwzorowanie jednego wyniku ............................................................ 418
Przykad. Odwzorowanie kilku wyników ............................................................... 424
czenie wspóuytkowanych odwzorowa warunków .......................................... 432
10.5. Obsuga parametrów da w komponentach bean formularzy .................................. 434
Proces przetwarzania na platformie Struts z uwzgldnieniem komponentów bean ..... 434
Sze podstawowych kroków w pracy ze Struts .................................................. 436
Dziaanie komponentów bean formularzy ........................................................... 438
Wywietlanie waciwoci komponentu bean ...................................................... 440
Przykad. Komponenty bean formularza i danych wynikowych ............................... 442
10.6. Wstpne wypenianie formularzy danymi i ich ponowne wywietlanie ......................... 453
Proces przetwarzania na platformie Struts ......................................................... 454
Sze podstawowych kroków w pracy ze Struts .................................................. 455
Wykorzystanie znaczników html: platformy Struts ............................................... 458
Wypenianie formularzy danymi pocztkowymi .................................................... 459
Przykad. Wypenianie formularzy danymi pocztkowymi ...................................... 460
Strategie tworzenia adresów URL dla obiektów Action ........................................ 469
Ponowne wywietlanie formularzy ..................................................................... 472
Przykad. Ponowne wywietlanie formularza ....................................................... 475
Rozdzia 11. Platforma Struts. Funkcje dodatkowe ................................................................................... 485
11.1. Wykorzystanie plików waciwoci .......................................................................... 486
Zalety plików waciwoci ................................................................................. 486
Dziaanie platformy Struts z uwzgldnieniem plików waciwoci .......................... 486
Sposób uywania plików waciwoci ................................................................ 487
Przykad. Proste komunikaty ............................................................................. 491
Klucze dynamiczne .......................................................................................... 496
Komunikaty parametryzowane .......................................................................... 497
11.2. Umidzynaradawianie aplikacji ............................................................................... 498
adowanie jzykowych wersji pliku waciwoci .................................................. 498
Definiowanie ustawie jzykowych w przegldarkach .......................................... 498
Przykad. Polska, hiszpaska i francuska wersja jzykowa ................................... 499
Wyniki ............................................................................................................ 500
Spis treci
9
11.3. Definiowanie ukadu stron przy uyciu moduu Tiles ............................................... 501
Powody, dla których warto uywa Tiles ............................................................. 501
Wymagania wstpne moduu Tiles .................................................................... 502
Cztery kroki w pracy z Tiles ............................................................................... 503
Prosta aplikacja wykorzystujca Tiles ................................................................ 506
Obsuga wzgldnych adresów URL .................................................................... 510
Przykad. Aplikacja e-boats ............................................................................... 511
11.4. Wykorzystanie Tiles Definitions .............................................................................. 519
Powody, dla których warto uywa Tiles Definitions ............................................ 521
Pi kroków w pracy z Tiles Definitions .............................................................. 522
Przykad. Aplikacja e-boats wykorzystujca modu Tiles Definitions ...................... 525
Rozdzia 12. Platforma Struts. Weryfikacja poprawnoci danych wpisanych przez uytkownika ...... 529
12.1. Weryfikacja poprawnoci danych w klasie Action ..................................................... 530
Proces przetwarzania Struts ............................................................................. 531
Przeprowadzenie weryfikacji danych w klasie Action ............................................ 531
Przykad. Wybór kolorów i rozmiarów czcionek wykorzystywanych w yciorysie ....... 534
12.2. Weryfikacja poprawnoci danych w komponencie bean formularza ............................ 541
Proces przetwarzania Struts ............................................................................. 542
Przeprowadzenie weryfikacji danych w komponencie ActionForm .......................... 542
Przykad. Wybór kolorów i rozmiarów czcionek
wykorzystywanych w yciorysie (wersja druga) ................................................ 546
Parametryzowane komunikaty o bdach ........................................................... 553
Przykad. Weryfikacja poprawnoci danych
z wykorzystaniem parametryzowanych komunikatów ....................................... 553
12.3. Wykorzystanie platformy automatycznej weryfikacji poprawnoci danych .................... 556
Weryfikacja rczna a weryfikacja automatyczna .................................................. 556
Weryfikacja na kliencie a weryfikacja na serwerze .............................................. 557
Proces przetwarzania Struts ............................................................................. 558
Konfiguracja mechanizmu automatycznej weryfikacji danych ................................ 559
Przykad. Automatyczna weryfikacja poprawnoci danych .................................... 565
Dodatek A Tworzenie aplikacji przy uyciu Apache Ant ........................................................................... 575
A.1. Najwaniejsze zalety Ant ......................................................................................... 576
A.2. Instalacja i konfiguracja Ant .................................................................................... 576
A.3. Tworzenie projektu Ant ........................................................................................... 577
Definiowanie projektu Ant ................................................................................. 578
Definiowanie celów .......................................................................................... 580
Przypisywanie zada do celów .......................................................................... 581
Uruchamianie celu Ant ..................................................................................... 581
A.4. Przegld najczciej uywanych zada Ant ............................................................... 582
Zadanie echo .................................................................................................. 582
Zadanie tstamp ............................................................................................... 583
Zadanie mkdir ................................................................................................. 584
Zadanie delete ................................................................................................ 584
Zadanie copy .................................................................................................. 586
Zadanie javac .................................................................................................. 588
A.5. Przykad. Prosty projekt Ant .................................................................................... 591
A.6. Tworzenie aplikacji internetowej przy uyciu Ant ...................................................... 596
Zalenoci midzy celami Ant ........................................................................... 597
10
Core Java Servlets i JavaServer Pages
A.7. Przykad. Wykonanie aplikacji internetowej ............................................................... 598
Cel prepare ..................................................................................................... 600
Cel copy ......................................................................................................... 601
Cel build ......................................................................................................... 602
A.8. Tworzenie pliku WAR przy uyciu Ant ........................................................................ 603
Zadanie jar ..................................................................................................... 603
Zadanie manifest ............................................................................................ 605
A.9. Przykad. Tworzenie pliku WAR aplikacji internetowej ................................................. 606
Cel war ........................................................................................................... 607
Skorowidz ..................................................................................................................................................... 611
1
Uywanie i wdraanie
aplikacji internetowych
W tym rozdziale:
Q
Cele aplikacji internetowych
Q
Struktura aplikacji internetowych
Q
Rejestrowanie aplikacji internetowych
Q
Strategie rozwoju i wdraania aplikacji internetowych
Q
Pliki WAR
Q
Wspóuytkowanie danych przez aplikacje internetowe
W ramach aplikacji internetowych mona tworzy zwarte kolekcje serwletów, stron Java
Server Pages (JSP), bibliotek znaczników, dokumentów HTML (Hypertext Markup Language),
obrazków, arkuszy stylów i innych treci przeznaczonych dla internetu. Z kolekcji tych mona
korzysta na dowolnym serwerze zgodnym ze specyfikacj serwletów. Prawidowo zaprojek-
towane aplikacje internetowe mona przenosi z jednego serwera na inny albo umieszcza
w innej lokalizacji na tym samym serwerze bez koniecznoci wprowadzania zmian do ser-
wletów, stron JSP czy plików HTML wchodzcych w skad aplikacji.
W ten sposób nawet zoone aplikacje mona przenosi bez wikszego wysiku, uatwiajc ich
wielokrotne wykorzystywanie. Ponadto dziki temu, e kada aplikacja internetowa posiada
wasn struktur katalogów, sesje, kontekst
ServletContext
i modu adowania klas, uywanie
aplikacji internetowej upraszcza nawet pocztkowe etapy rozwoju, poniewa znacznie
mniej uwagi trzeba powica na koordynacj poszczególnych elementów caego opraco-
wanego rozwizania.
18
Core Java Servlets i JavaServer Pages
1.1. Cele aplikacji internetowych
Aplikacje internetowe maj trzy gówne zalety — uatwiaj odpowiednie zorganizowanie
zasobów, wdroona aplikacja charakteryzuje si przenonoci, a ponadto atwiej jest unikn
konfliktów midzy rónymi aplikacjami internetowymi. Kada z tych zalet zostanie omówiona
nieco szerzej.
Organizacja
Pierwsza zaleta aplikacji internetowych wypywa z faktu, e wszystko ma w nich swoje miejsce
— dla kadego rodzaju zawartoci przeznaczona jest standardowa lokalizacja. Poszczególne
pliki klas Java zawsze znajduj si w katalogu o nazwie WEB-INF/classes, pliki JAR (zbiory
plików klas Java) zawsze umieszczane s w katalogu WEB-INF/lib, plik konfiguracyjny
web.xml zawsze znajduje si w katalogu WEB-INF i tak dalej. Pliki bezporednio dostpne
dla klientów (na przykad przegldarek internetowych) umieszczane s w gównym katalogu
aplikacji internetowej lub dowolnym jego podkatalogu z wyjtkiem WEB-INF.
Czsto zdarza si, e programista koczy prac nad jednym projektem i przechodzi do innego
zespou projektowego. Dziki standardowej organizacji zasobów aplikacji nie trzeba na nowo
poznawa struktury aplikacji za kadym razem, gdy rozpoczyna si prac nad nowym pro-
jektem. Nowy programista rozpoczynajcy prac nad aplikacj nie musi równie traci czasu
na rozpoznanie sposobu organizowania poszczególnych rodzajów plików.
Przenono
Poniewa specyfikacja serwletów przewiduje okrelon organizacj plików, na kadym serwe-
rze zgodnym z t specyfikacj mona waciwie od razu wdraa i uruchamia aplikacj.
Dziki temu istnieje dua swoboda w wyborze dostawcy docelowego serwera WWW. Jeli
tylko wybrany serwer jest zgodny ze specyfikacj, kad aplikacj mona — w wikszoci
przypadków bez adnych zmian — wdroy i uruchomi na serwerze pochodzcym od innego
producenta. Mona na przykad utworzy aplikacj na darmowym serwerze WWW, a nastp-
nie jej wersj przedprodukcyjn uruchomi ju na bardziej stabilnym serwerze, dla którego
producent wiadczy odpowiednie wsparcie techniczne.
Separacja
Poszczególne aplikacje internetowe wdroone na tym serwerze nie wchodz ze sob w konflikt.
Kada aplikacja ma wasny adres URL, za pomoc którego mona do niej uzyska dostp,
wasny obiekt
ServletContext
i tak dalej. Dwie aplikacje wdroone na tym samym serwerze
dziaaj tak, jakby byy uruchamiane na dwóch oddzielnych serwerach, adna z tych aplikacji
nie musi równie mie dostpu do drugiej.
Rozdzia 1.
Q
Uywanie i wdraanie aplikacji internetowych
19
Fakt ten jeszcze bardziej upraszcza proces tworzenia i wdraania 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 dziaajcymi na tym samym serwerze.
Obecnie istnieje kilka sposobów, dziki którym aplikacje mog ze sob wspópracowa
— zostan one opisane w dalszej czci rozdziau. Jednak w znakomitej wikszoci przy-
padków aplikacje wdraa si niezalenie od siebie.
1.2. Struktura aplikacji internetowych
Jak ju wczeniej wspomniano, aplikacja internetowa ma standardowy format i jest przenona
do wszystkich serwerów WWW lub serwerów aplikacji zgodnych ze specyfikacj. Gówny
katalog aplikacji to zwyky katalog o dowolnej nazwie. Wewntrz tego katalogu znajduj
si lokalizacje przeznaczone dla poszczególnych elementów. W tym punkcie opisane zostan
rodzaje elementów, z jakich moe skada si aplikacja, oraz lokalizacje, w których elementy
powinny si znajdowa.
Lokalizacje poszczególnych rodzajów plików
Na rysunku 1.1 przedstawiono standardow struktur przykadowej aplikacji internetowej.
Aby wykona kolejne kroki procesu tworzenia wasnej aplikacji internetowej, naley pobra
z 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.
Struktura
standardowej
aplikacji
internetowej
Strony JSP
Strony JSP naley 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 udostp-
niaj klientom plików znajdujcych si w katalogach WEB-INF i META-INF. Gdy aplikacja
internetowa zostanie ju zarejestrowana (wicej na ten temat w punkcie 1.3), naley wskaza
serwerowi prefiks URL wskazujcy aplikacj oraz zdefiniowa lokalizacj, w której znaj-
duje si katalog aplikacji internetowej. Zazwyczaj — cho nie jest to obowizkowe — jako
20
Core Java Servlets i JavaServer Pages
prefiks URL wskazuje si po prostu nazw gównego katalogu aplikacji. Po zarejestrowaniu
prefiksu strony JSP stan si dostpne za porednictwem adresów URL w postaci http://
´komputer/prefiksAplikacji/nazwapliku.jsp (jeeli strony JSP znajduj si w gównym kata-
logu aplikacji) albo http://komputer/prefiksAplikacji/podkatalog/nazwapliku.jsp (gdy strony
znajduj si w podkatalogu).
Od ustawie serwera zaley, czy plik domylny, taki jak index.jsp, bdzie dostpny po wpi-
saniu adresu URL wskazujcego jedynie katalog (na przykad http://komputer/prefiksAplikacji/)
bez zapisania odpowiedniego ustawienia w pliku konfiguracyjnym WEB-INF/web.xml. Jeeli
index.jsp ma by domylnym plikiem aplikacji, zalecane jest dodanie w pliku web.xml tej
aplikacji odpowiedniego elementu
welcome-file-list
. Na przykad poniszy fragment pliku
web.xml wskazuje, e jeeli adres URL zawiera nazw katalogu, a nie zawiera nazwy pliku,
wówczas serwer powinien w pierwszej kolejnoci zwróci plik index.jsp, a w drugiej kolej-
noci plik index.html. Jeeli na serwerze nie ma adnego z tych dwóch plików, odpowied
bdzie zalee od serwera (na przykad wywietlona zostanie zawarto katalogu).
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
Wicej informacji na temat sposobu uywania pliku web.xml znajduje si w rozdziale 2.,
„Kontrolowanie dziaania aplikacji przy uyciu deskryptora web.xml”.
Dokumenty HTML, obrazki i inne standardowe elementy aplikacji internetowej
Modu obsugi serwletów i stron JSP stosuje identyczne reguy dla stron JSP oraz dla plików
HTML, obrazków GIF i JPEG, arkuszy stylów i innych dokumentów internetowych. Wszystkie
wymienione elementy s umieszczane dokadnie w tych samych lokalizacjach i udostpniane
za porednictwem 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/classes
albo w podkatalogu katalogu WEB-INF/classes o nazwie odpowiadajcej nazwie pakietu.
Aby uzyska dostp do jednego z serwletów trzeba wskaza dla niego odpowiedni adres URL.
W tym celu w deskryptorze wdroenia web.xml, znajdujcym si w katalogu WEB-INF,
trzeba zdefiniowa element
servlet-mapping
. Wicej informacji na ten temat znajduje si
w punkcie 1.3, „Rejestrowanie aplikacji internetowych na serwerze”.
Dostp do serwletów mona take uzyskiwa w inny sposób, który nie wymaga definiowania
odpowiedniego adresu URL. Do tego celu mona uy adresu o postaci http://komputer/prefiks
´Aplikacji/servlet/nazwaPakietu.NazwaSerwletu. Uywanie adresu o takiej postaci przy-
daje si w trakcie testowania moliwoci aplikacji, natomiast nie zaleca si jego uywania
w aplikacjach produkcyjnych. Powodów jest kilka. Po pierwsze, jeeli dla tego samego
serwletu zostanie równie zdefiniowany element
servlet-mapping
, bdzie mona go wywo-
ywa na dwa róne sposoby, a to z kolei szybko zacznie utrudnia utrzymywanie aplikacji.
Rozdzia 1.
Q
Uywanie i wdraanie aplikacji internetowych
21
Po drugie, poniewa deklaratywne zabezpieczenia aplikacji zale od adresu URL, przy uyciu
którego zasób jest udostpniany, moe w ten sposób powsta luka w zabezpieczeniach. Po
trzecie, uytkownik jest zmuszony wpisa adres URL, w którym znajduje si nazwa serwletu
ze wszystkimi jego kwalifikatorami, a takie adresy wygldaj mao elegancko i s trudne do
zapamitania. Zatem w kategorii uytecznoci aplikacji internetowej taki sposób wywoywania
serwletów zyskaby bardzo niskie noty. Po czwarte, jeeli kiedykolwiek zajdzie potrzeba, by
zmieni nazw klasy albo umieci klasy w nowym pakiecie, zmieni trzeba bdzie równie
sam adres URL. To z kolei pocignie za sob wymóg zmiany wszystkich odwoa znajdu-
jcych si w aplikacji, w których uywano dotychczasowego adresu URL. Oprócz tego, e
sama ta czynno bdzie do uciliwa, to jej wynik spowoduje zamieszanie równie wród
samych uytkowników, którzy przecie mogli zapisa adres wród swoich ulubionych
zakadek, a po zmianie adresu serwletu adres ten przestanie dziaa i uyteczno aplikacji
znowu ucierpi.
Zalecamy jawne blokowanie dostpu do serwletów wchodzcych w skad aplikacji internetowej
bez odpowiednio odwzorowanego adresu URL. Odwzorowanie takie mona zdefiniowa za
pomoc elementu
servlet-mapping
pliku web.xml. Przykadowe odwzorowanie znajduje
si w pliku web.xml aplikacji app-blank, któr mona pobra z witryny
ftp://ftp.helion.pl/
´przyklady/jsp2w2.zip.
Serwlety, komponenty JavaBeans i klasy pomocnicze znajdujce si w pakietach JAR
Jeeli serwlety lub inne pliki z rozszerzeniem .class wchodz w skad pakietów JAR, wów-
czas pliki JAR powinny si znajdowa w katalogu WEB-INF/lib. Jeeli klasy znajduj si
w pakietach, wówczas wewntrz pliku JAR klasy te powinny znajdowa si w katalogu
o nazwie odpowiadajcej nazwie ich pakietu. Wikszo serwerów umoliwia wspóuyt-
kowanie plików JAR przez róne aplikacje internetowe. Funkcja ta nie jest jednak standardem,
a konkretny sposób jej dziaania zaley od rodzaju serwera. Na serwerze Tomcat wspóuyt-
kowane pliki JAR umieszcza si w katalogu katalog_tomcat/shared/lib.
Deskryptor wdroenia
Deskryptor wdroenia, czyli plik web.xml, powinien znajdowa si w podkatalogu WEB-INF
katalogu gównego aplikacji internetowej. Szczegóowe informacje na temat sposobu uywania
pliku web.xml znajduj si w rozdziale 2., „Kontrolowanie dziaania aplikacji przy uyciu
pliku web.xml”. Warto zwróci uwag, e niektóre serwery mog obsugiwa globalny plik
web.xml, dotyczcy wszystkich aplikacji internetowych. Na przykad serwer Tomcat wyko-
rzystuje plik katalog_tomcat/conf/web.xml, w którym znajduj si globalne ustawienia
konfiguracyjne. Plik taki jest jednak cech charakterystyczn tylko tego serwera. Standardem
jest wycznie plik web.xml definiowany dla kadej aplikacji oddzielnie i umieszczany w ka-
talogu WEB-INF aplikacji internetowej.
Deskryptory bibliotek znaczników
Pliki bdce deskryptorami bibliotek znaczników (ang. Tag Library Descriptor — TLD)
umieszcza si w katalogu WEB-INF lub jego dowolnym podkatalogu. Zaleca si jednak, by
deskryptory te umieszcza w podkatalogu tlds katalogu WEB-INF. Grupowanie deskryptorów
22
Core Java Servlets i JavaServer Pages
w jednym katalogu (na przykad o nazwie tlds) upraszcza proces zarzdzania nimi. Strony
JSP uzyskuj dostp do plików TLD znajdujcych si w WEB-INF za pomoc dyrektywy
taglib
o nastpujcej postaci:
<%@ taglib uri="/WEB-INF/tlds/mójPlikTaglib.tld" … %>
Poniewa nie mamy do czynienia z klientem (takim jak choby przegldarka internetowa),
lecz z serwerem, który wykorzystuje plik TLD, blokada dostpu do zawartoci znajdujcej
si w katalogu WEB-INF w tym przypadku nie obowizuje.
Gdy plik z rozszerzeniem .tld jest umieszczany wewntrz pliku JAR, powinien si on znaj-
dowa w katalogu META-INF lub w którym z jego podkatalogów. Konieczno zmiany
lokalizacji z WEB-INF na META-INF wynika z tego, e pliki JAR nie s archiwami aplikacji
WWW, a wic nie zawieraj katalogu WEB-INF. Wicej informacji na temat plików TLD
znajduje 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 dostpne dla stron JSP
nawet wówczas, gdy znajduj si w katalogu WEB-INF. Pliki znaczników równie deklaruje
si na stronie JSP przy uyciu dyrektywy
taglib
. Jednak zamiast
uri
naley w ich przypadku
zdefiniowa atrybut
tagdir
. Jeeli na przykad plik mójPlikZnaczników.tag umieszczony
zostanie w katalogu WEB-INF/tags aplikacji internetowej, dyrektywa
taglib
strony JSP
powinna mie nastpujc 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 mona take docza do plików JAR. Sam plik JAR powinien zosta
umieszczony w katalogu WEB-INF/lib, zgodnie z tym, co wspomniano ju wczeniej. Jednak
wewntrz 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 cieki dostpu w pliku z rozszerzeniem .tld. Warto zauway, e
plik z rozszerzeniem .tld moe zawiera równie deklaracje wasnych znaczników innych
typów. Wicej informacji na temat plików znaczników znajduje si w rozdziale 7., „Biblioteki
znaczników. Zagadnienia podstawowe”.
Plik manifestu WAR
Gdy tworzony jest plik WAR (wicej na ten temat w punkcie 1.5), plik MANIFEST.MF zostaje
umieszczony w podkatalogu META-INF. Zazwyczaj narzdzie jar automatycznie tworzy
plik MANIFEST.MF i umieszcza go w katalogu META-INF, a w przypadku rozpakowywania
pliku WAR plik manifestu jest ignorowany. Czasami jednak trzeba jawnie zmodyfikowa
plik MANIFEST.MF, dlatego warto wiedzie, gdzie si on znajduje.
Rozdzia 1.
Q
Uywanie i wdraanie aplikacji internetowych
23
1.3. Rejestrowanie aplikacji internetowych
na serwerze
Jak wspominano ju wczeniej, aplikacje internetowe s przenone. Bez wzgldu na to, jaki
serwer jest uywany, pliki aplikacji s przechowywane w takiej samej strukturze katalogów, a
dostp do nich uzyskuje si za porednictwem adresów URL w takiej samej postaci. Na ry-
sunku 1.2 przedstawiono struktur adresów URL, których naleaoby uy dla najprostszej
aplikacji o nazwie myWebApp. W tym punkcie opisane zostan sposoby instalowania i wyko-
nywania prostej aplikacji internetowej na rónych platformach.
Rysunek 1.2.
Struktura
aplikacji
internetowej
myWebApp
Same aplikacje internetowe s w peni przenone, natomiast ju przebieg procesu rejestracji
aplikacji zaley od serwera. Aby na przykad przenie aplikacj myWebApp z jednego serwera
na 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 to
myWebApp) zaley od rodzaju uywanego serwera. Podobnie od rodzaju serwera zaley sam
sposób wskazywania serwerowi, e aplikacja powinna by wywoywana przy uyciu adresu
URL w postaci http://komputer/myWebApp/.
W tym punkcie przyjto zaoenie, e wszystkie kroki zmierzajce do zainstalowania i skon-
figurowania serwera zostay ju wykonane. Wicej informacji na temat konfiguracji serwe-
ra mona znale w jego dokumentacji, w pierwszym rozdziale pierwszego tomu niniejszej
ksiki lub (w przypadku uytkowników serwera Tomcat) w uaktualnianym na bieco prze-
wodniku po instalacji i konfiguracji serwera, dostpnym w witrynie http://www.coreservlets.
´com. W tym miejscu zaprezentowany zostanie tylko krótki przykad, a nastpnie w jednym
z kolejnych podpunktów opisana zostanie procedura rejestracji na serwerze Tomcat. Szcze-
góowy opis procesu wdroenia przykadowej aplikacji internetowej na serwerze Tomcat
zostanie przedstawiony w punkcie 1.6, „Tworzenie prostej aplikacji internetowej”.
Zgodnie z informacjami zawartymi w punkcie 1.4, „Strategie rozwoju i wdraania aplikacji
internetowych”, standardow strategi jest tworzenie aplikacji w rodowisku programistycz-
nym i regularne kopiowanie jej do poszczególnych katalogów wdroeniowych w celu przete-
stowania rozwizania na rónych serwerach. Odradza si umieszczanie katalogu rozwojowego
24
Core Java Servlets i JavaServer Pages
bezporednio w katalogu wdroeniowym serwera, poniewa znacznie utrudni to wdroenie
aplikacji na kilku serwerach, trudno bdzie pracowa nad aplikacj w czasie jej dziaania,
a take utrudnione zostanie nadanie odpowiedniej organizacji plików. Lepszym rozwizaniem
jest uycie oddzielnego katalogu rozwojowego i zastosowanie jednej ze strategii opisanych
w punkcie 1.4, „Strategie rozwoju i wdraania aplikacji internetowych”. Najprostszym rozwi-
zaniem jest utworzenie skrótu (w systemie Windows) lub dowizania symbolicznego (w ro-
dowisku UNIX/Linux), prowadzcego do katalogów wdroeniowych poszczególnych serwe-
rów, oraz kopiowanie caego katalogu rozwojowego za kadym razem, gdy przyjdzie czas na
wdroenie aplikacji. Na przykad w systemie Windows przy uyciu prawego przycisku myszy
mona przecign folder rozwojowy do utworzonego skrótu, zwolni przycisk i wybra
polecenie Kopiuj.
Rejestrowanie aplikacji internetowych na serwerze Tomcat
Tworzenie aplikacji internetowej na serwerze Tomcat polega na utworzeniu odpowiedniej
struktury katalogów i skopiowanie jej do katalogu katalog_tomcat/webapps. Za ca reszt
odpowiada ju sam serwer. Moliwo wdraania aplikacji internetowych przez kopiowanie
struktury katalogów do jednego z katalogów serwera to tak zwane wdraanie na gorco
(ang. hot-deployment) albo wdraanie automatyczne (ang. auto-deployment). Katalog
w strukturze katalogów serwera, który odpowiada za t funkcj, to tak zwany katalog
wdraania na gorco (ang. hot-deploy directory) albo katalog wdraania automatycznego
(ang. auto-deploy directory). Wikszo serwerów WWW, jeli nie wszystkie wspóczesne
serwery WWW, obsuguje taki wanie sposób wdraania aplikacji. Aby zwikszy kontrol
nad procesem wdroenia, mona odpowiednio zmodyfikowa zawarto pliku katalog_
´tomcat/conf/server.xml (jest to plik charakterystyczny tylko dla serwera Tomcat), tak aby
odwoywa si on do aplikacji.
Poniej przedstawiono kolejne czynnoci, jakie trzeba wykona, aby utworzy aplikacj inter-
netow dostpn za porednictwem adresu URL rozpoczynajcego si od http://komputer/
´myWebApp.
1.
Utworzy struktur katalogów dla aplikacji internetowej, w której katalog
gówny bdzie nosi nazw myWebApp. Poniewa jest to nasza wasna struktura
rozwojowa, mona j umieci w dowolnie wybranej lokalizacji. Struktura katalogów
powinna by zgodna ze struktur przedstawion w punkcie 1.2, „Struktura aplikacji
internetowych”. Aby zmniejszy liczb czynnoci, jakie naley wykona w ramach
tego kroku, z ftp://ftp.helion.pl/przyklady/jsp2w2.zip mona pobra aplikacj app-
blank. Zawiera ona wszystkie niezbdne katalogi oraz przykadowy deskryptor
wdroenia web.xml. Pozostaje wówczas tylko zmieni nazw katalogu gównego
app-blank na myWebApp.
Jeeli natomiast zapadnie decyzja o rcznym utworzeniu wymaganych katalogów,
naley postpowa zgodnie z dalszym opisem. Najpierw trzeba utworzy katalog
o nazwie myWebApp — moe si on znajdowa w dowolnej lokalizacji w systemie
poza katalogiem instalacyjnym serwera. W katalogu tym trzeba utworzy podkatalog
o nazwie WEB-INF, w nim za utworzy kolejny katalog classes. Nastpnie naley
utworzy deskryptor wdroenia web.xml i umieci go w katalogu WEB-INF.
Szczegóowe informacje na temat deskryptora wdroenia znajduj si w rozdziale 2.,
„Kontrolowanie dziaania aplikacji przy uyciu deskryptora web.xml”. Na razie
Rozdzia 1.
Q
Uywanie i wdraanie aplikacji internetowych
25
wystarczy tylko skopiowa plik web.xml znajdujcy si w katalogu katalog_tomcat/
´webapps/ROOT/WEB-INF albo uy wersji deskryptora znajdujcej si w aplikacji
app-blank.
Po utworzeniu odpowiedniej struktury katalogów naley w katalogu myWebApp
umieci prost stron JSP, a do katalogu WEB-INF/classes skopiowa prosty
serwlet o nazwie MyServlet.class.
2.
Zadeklarowa serwlet i skierowa go na odpowiedni adres URL przez
wprowadzenie odpowiednich zmian w pliku web.xml bdcym deskryptorem
wdroenia. W odrónieniu od stron JSP serwlety musz by deklarowane jawnie.
Naley zatem poda pen ciek dostpu do klasy serwletu, aby wskaza serwerowi,
e serwlet ten istnieje. Dodatkowo konieczne jest wskazanie serwerowi adresów
URL, które po wpisaniu przez uytkownika powinny wywoa serwlet MyServlet.class.
Obydwie wspomniane czynnoci mona zrealizowa przez wstawienie w pliku
web.xml poniszego 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 bdzie deklarowany, a take pen ciek dostpu do klasy serwletu.
Element
servlet-mapping
oraz jego podelementy wskazuj serwerowi serwlet,
który ma by wywoywany, gdy klient wywoa adres URL odpowiadajcy wzorcowi
wskazanemu jako warto elementu
url-pattern
. Zatem serwlet zadeklarowany
jako MyName bdzie wywoywany 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. Katalog
myWebApp powinno si zatem skopiowa do katalogu webapps i uzyska w ten
sposób nastpujce cieki dostpu: 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 mona by nastpnie zawrze w pliku WAR (wicej na ten
temat w punkcie 1.5) i umieci go w katalogu C:\katalog_tomcat\webapps.
4.
Opcjonalnie — w pliku server.xml dopisa element
Context
. Domylnie Tomcat
skonfiguruje aplikacj internetow w taki sposób, by prefiks jej adresu URL dokadnie
odpowiada nazwie gównego katalogu tej aplikacji. Jeeli takie rozwizanie bdzie
wystarczajce, mona pomin krok opisywany w tym punkcie. Jeeli natomiast
konieczne jest zmodyfikowanie tego etapu rejestracji aplikacji, w pliku katalog_tomcat/
´conf/server.xml mona doda element
Context
. Przed rozpoczciem edycji
zawartoci pliku server.xml naley utworzy jego kopi bezpieczestwa, poniewa
nawet drobny bd skadniowy uniemoliwi prawidowe 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 trzeba
wówczas umieci obok pliku web.xml, w katalogu WEB-INF aplikacji internetowej.
26
Core Java Servlets i JavaServer Pages
Element
Context
ma kilka atrybutów, które s udokumentowane na stronie pod
adresem http://tomcat.apache.org/tomcat-5.5-doc/config/context.html. Za pomoc
tego elementu mona decydowa, czy naley uywa plików cookies albo czy
naley przepisywa adresy URL w celu ledzenia sesji; mona take wcza
i wycza moliwo przeadowywania serwletów (to znaczy monitorowa klasy
pod ktem zachodzcych w nich zmian i przeadowywa serwlety tych klas,
których pliki na dysku ulegy zmianie). Mona równie ustawia poziomy
debugowania. Jednak w przypadku prostych aplikacji internetowych wystarczy
uycie tylko dwóch wymaganych atrybutów:
path
(prefiks adresu URL) oraz
docBase
(bazowy katalog instalacyjny dla aplikacji internetowych wzgldem
katalogu katalog_tomcat/webapps). Definicja elementu
Context
powinna wyglda
podobnie do poniszej:
<Context path="/jaka-aplikacja" docBase="myWebApp" />
Naley pamita, by jako prefiks adresu URL nie podawa prefiksu /examples,
poniewa jest on ju uywany przez Tomcat jako prefiks dla przykadowych aplikacji
internetowych.
Na serwerze Tomcat nie naley uywa prefiksu /examples w roli prefiksu adresów
URL aplikacji internetowych.
5.
Wywoa stron JSP i serwlet. Adres URL http://komputer/myWebApp/
´myPage.jsp wywoa stron JSP, za adres http://komputer/myWebApp/MyAddress
spowoduje wywoanie serwletu. W trakcie rozwoju aplikacji prawdopodobnie jako
nazwa komputera uywana bdzie nazwa localhost. W podawanych adresach URL
zaoono, e plik konfiguracyjny serwera Tomcat (katalog_tomcat/conf/server.xml)
zmodyfikowano w taki sposób, by uywany by port numer 80, zgodnie z zaleceniami
w instrukcji instalacji i konfiguracji serwera, znajdujcej si w witrynie
http://www.coreservlets.com/. Jeeli takiej zmiany nie wprowadzono,
naley uy adresów w postaci http://komputer:8080/myWebApp/myPage.jsp
oraz http://komputer:8080/myWebApp/MyAddress.
Rejestrowanie aplikacji internetowych na innych serwerach
Pierwsze dwie czynnoci opisane w poprzednim podrozdziale dotycz tworzenia przenonej
czci aplikacji internetowej i bd przebiega identycznie na kadym serwerze zgodnym
ze specyfikacj serwletów. Natomiast czynnoci dotyczce ju samego procesu rejestracji
s charakterystyczne dla serwera Tomcat. Nie zmienia to jednak faktu, e rejestrowanie
aplikacji na innych serwerach przebiega bardzo podobnie. W kolejnych podpunktach krótko
zostan opisane sposoby rejestrowania aplikacji na kilku najbardziej popularnych obecnie
serwerach.
Rozdzia 1.
Q
Uywanie i wdraanie aplikacji internetowych
27
Serwer BEA WebLogic
Podobnie jak Tomcat, serwer WebLogic udostpnia katalog automatycznego wdraania,
sucy do rejestrowania i wdraania aplikacji internetowych. Najpierw, jeeli jeszcze nie
zostao to zrobione, trzeba utworzy now domen o nazwie myDomain. Domen mona
utworzy przy uyciu kreatora konfiguracji serwera WebLogic config.cmd w systemie Win-
dows lub config.sh w rodowiskach UNIX/Linux (obydwie wersje znajduj si w katalogu
bea/katalog_weblogic/common/bin). Gdy domena zostanie ju utworzona, naley skopiowa
ca struktur katalogów aplikacji internetowej (w tym równie jej katalog gówny) lub plik
WAR do katalogu bea/user_projects/domains/myDomain/applications. Do wdroenia aplikacji
mona take uy konsoli WWW serwera WebLogic. W tym celu naley zalogowa si do
konsoli pod adresem http://localhost:7001/console/ (przy zaoeniu, e nie zmieniono domyl-
nych ustawie portu oraz e serwer jest uruchomiony na komputerze lokalnym). W panelu
konsoli po lewej stronie naley rozwin wze Deployments i klikn pozycj Web Application
Modules, po czym klikn polecenie Deploy a New Web Application Module. W ten sposób
uruchomiony zostanie kreator wdroenia dziaajcy w przegldarce, w którym wystarczy
wykonywa kolejne wywietlane instrukcje. Po wdroeniu aplikacji internetowej strona JSP
bdzie dostpna pod adresem http://localhost:7001/myWebApp/myPage.jsp, za serwlet bdzie
dostpny pod adresem http://localhost:7001/myWebApp/MyAddress.
JBoss
Zarejestrowanie aplikacji internetowej na serwerze JBoss jest niemal równie proste, jak
w przypadku serwera Tomcat. Tak naprawd JBoss domylnie uywa osadzonego serwera
WWW Tomcat. Aby zarejestrowa aplikacj, naley najpierw zmieni nazw katalogu
gównego myWebApp na myWebApp.war. W istocie nie jest tworzony plik WAR, lecz jedynie
nazwa katalogu gównego jest zmieniana w taki sposób, by koczya si sowem .war. JBoss
wymaga, by sowem .war koczyy si nie tylko nazwy plików WAR (co jest zreszt wy-
magane na mocy specyfikacji serwletów), lecz równie nazwa gównego katalogu aplikacji
internetowej. Po zmianie nazwy katalogu katalog myWebApp.war naley skopiowa do
katalogu katalog_jboss/server/default/deploy. Jeeli w trakcie instalacji serwera JBoss
adne domylne ustawienia nie ulegy zmianie, strona JSP bdzie dostpna pod adresem
http://localhost:8080/myWebApp/myPage.jsp, natomiast serwlet bdzie wywoywany adresem
http://localhost:8080/myWebApp/MyAddress. Jeeli aplikacja zostaa spakowana w pliku
WAR, w celu jej wdroenia plik myWebApp.war trzeba umieci w tym samym katalogu
serwera JBoss.
Caucho Resin
Aby skorzysta z funkcji automatycznego wdraania na serwerze Caucho Resin, naley skopio-
wa ca struktur katalogów aplikacji internetowej (wcznie z jej katalogiem gównym)
lub plik WAR do katalogu katalog_resin/webapps. Jeeli domylne ustawienia serwera nie
zostay zmienione, strona JSP stanie si dostpna pod adresem http://localhost:8080/myWebApp/
´myPage.jsp, za serwlet bdzie dostpny pod adresem http://localhost:8080/myWebApp/
´MyAddress.
28
Core Java Servlets i JavaServer Pages
1.4. Strategie rozwoju i wdraania
aplikacji internetowych
Gdy wszystko bdzie ju przygotowane do rozpoczcia procesu tworzenia nowej aplikacji
internetowej, naley wykona nastpujce trzy czynnoci:
1.
Utworzy struktur katalogów aplikacji. W katalogu rozwojowym trzeba
utworzy now struktur katalogów, zgodn ze struktur aplikacji internetowej
(wczajc w to plik web.xml znajdujcy si w katalogu WEB-INF), opisan
we wczeniejszej czci tego rozdziau. Najprostszym sposobem wykonania tej
czynnoci jest skopiowanie i zmiana nazwy aplikacji app-blank. (Jak pamitamy,
aplikacj app-blank oraz wszystkie inne przykadowe kody ródowe prezentowane
w ksice mona pobra z ftp://ftp.helion.pl/przyklady/jsp2w2.zip).
2.
Napisa kod ródowy aplikacji. Strony HTML i JSP trzeba umieci w katalogu
gównym lub jego podkatalogach, z wyjtkiem podkatalogu WEB-INF i META-INF.
Poszczególne pliki klas jzyka Java naley umieci w katalogu WEB-INF/classes/
´podkatalog_o_nazwie_zgodnej_z_nazw_pakietu. Pliki JAR powinny trafi
do katalogu WEB-INF/lib, pliki z rozszerzeniami .tag i .tagx do katalogu
WEB-INF/tags i tak dalej.
3.
Wdroy aplikacj. Ca struktur katalogów aplikacji internetowej
(w tym równie jej katalog gówny) trzeba skopiowa do katalogu wdraania
automatycznego serwera. Istnieje kilka rozwiza upraszczajcych to zadanie,
a najczciej stosowanymi s:
Q
Skopiowanie struktury do skrótu lub dowizania symbolicznego.
Q
Wykorzystanie funkcji wdraania udostpnianych przez zintegrowane rodowisko
programistyczne (IDE).
Q
Wykorzystanie narzdzia Ant lub podobnego.
Q
Uycie rodowiska IDE wraz z narzdziem Ant.
Uytkownicy dopiero poznajcy dziaanie serwletów i stron JSP mog pozosta przy pierwszej
opcji, za rozpoznawanie sposobu dziaania narzdzia Ant lub konkretnego rodowiska IDE
mona rozpocz po zaznajomieniu si przynajmniej z podstawami serwletów i stron JSP.
Trzeba jednak zaznaczy, e nie wspomniano o opcji polegajcej na umieszczeniu kodu
bezporednio w katalogu wdroeniowym serwera. Wprawdzie to wanie rozwizanie najcz-
ciej wybieraj pocztkujcy programici, wachlarz jego zastosowa w bardziej zaawansowa-
nych zadaniach jest tak skromny, e zaleca si, by nie stosowa go ju na samym pocztku.
W kolejnych podpunktach opisane zostan wszystkie cztery wspomniane opcje.
Rozdzia 1.
Q
Uywanie i wdraanie aplikacji internetowych
29
Kopiowanie struktury do skrótu lub dowizania symbolicznego
W systemie Windows naley przej do katalogu nadrzdnego wobec katalogu automatycz-
nego wdroenia serwera. W przypadku serwera Tomcat bdzie to gówny katalog instalacyjny
katalog_tomcat. Katalog automatycznego wdroenia naley klikn prawym przyciskiem
myszy (na serwerze Tomcat bdzie to katalog webapps) i wybra polecenie Kopiuj. Nastpnie
trzeba przej do katalogu bezporednio nadrzdnego wobec gównego katalogu rozwojowego
(czyli katalogu o jeden wyszego w hierarchii ni myWebApp), klikn go prawym przyci-
skiem myszy i wybra polecenie Wklej skrót (a nie zwyke polecenie Wklej). Od teraz za ka-
dym razem, gdy przyjdzie ju czas na wdroenie aplikacji internetowej, naley klikn i przy-
trzyma wcinity prawy przycisk myszy na katalogu rozwojowym (na przykad myWebApp)
i przecign go do skrótu do katalogu wdroenia, po czym zwolni przycisk myszy. Pojawi
si wówczas menu podrczne, w którym naley wybra polecenie Kopiuj tutaj. Na rysunku 1.3
przedstawiono przykadow konfiguracj, która uatwi wdraanie i testowanie aplikacji
prezentowanych w tym rozdziale na serwerach Tomcat, WebLogic, JBoss i Resin. W systemie
UNIX mona uy dowiza symbolicznych (tworzonych poleceniem
ln –s
) w sposób po-
dobny do sposobu uywania skrótów w systemie Windows.
Rysunek 1.3.
Wykorzystanie
skrótów w celu
uproszczenia
procesu
wdraania
aplikacji
Zalet tego rozwizania jest to, e jest ono bardzo proste. Jest ono zatem dobre dla osób
pocztkujcych, które chc si skupi na poznawaniu dziaania serwletów i stron JSP, a nie
na narzdziach do wdraania aplikacji czy rodowiskach IDE.
Wad przedstawionego rozwizania jest to, e gdy uywanych jest kilka serwerów, konieczne
jest powtarzanie operacji kopiowania. Zaómy na przykad, e w rodowisku rozwojowym
funkcjonuje kilka rónych serwerów (Tomcat, Resin i tak dalej), na których regularnie trzeba
testowa implementowany kod ródowy. Druga wada polega na tym, e w takim rozwizaniu
na serwer kopiowane s zarówno pliki z kodem ródowym Javy, jak i pliki klas, cho tak
naprawd niezbdne s tylko te ostatnie. Na serwerze biurkowym nie ma to wikszego zna-
czenia, lecz gdy przyjdzie do wdroenia aplikacji na „prawdziwym” serwerze produkcyjnym,
pliki z kodem ródowym nie powinny na niego trafi.
30
Core Java Servlets i JavaServer Pages
Wykorzystanie funkcji wdraania udostpnianych przez IDE
Wikszo rodowisk programistycznych do tworzenia serwletów i stron JSP (takich jak IBM
WebSphere Studio Application Developer, Sun ONE Studio, NetBeans, Oracle JDeveloper,
Borland JBuilder, Eclipse z MyEclipseIDE czy wtyczkami NitroX) pozwala na stosowanie
takich konfiguracji, w których jednym klikniciem myszy moliwe jest wdroenie aplikacji
internetowej na serwerze testowym, rozwojowym lub produkcyjnym.
Mimo i rodowiska IDE maj wiele niekwestionowanych zalet, nie s one jednak wolne od
wad. Wikszo prawdziwych rodowisk IDE trzeba najpierw pozna, co zajmuje troch
czasu. Nie mona si wic skoncentrowa na zadaniach stricte programistycznych, przynajm-
niej na pocztku. Ponadto czsto si zdarza, e programici s przerzucani z jednego projektu na
drugi, a programici pracujcy wspólnie nad dan aplikacj musz korzysta z takiego samego
rodowiska IDE. Gdy wic programista przejdzie do innego zespou projektowego, w którym
kompilacja i wdraanie aplikacji bd wykonywane w innym rodowisku IDE ni to, którego
dotd uywa programista, konieczne bdzie poznanie nowego narzdzia i przyzwyczajenie
si do pracy w nim. To z kolei bdzie wymaga powicenia dodatkowego czasu.
Uywanie narzdzi ant, maven i im podobnych
Narzdzie
ant
zaimplementowane przez Apache Foundation dziaa podobnie jak
make
w rodo-
wisku UNIX. Jednak
ant
zosta napisany w Javie (dziki czemu jest przenony) i powszech-
nie uwaa si, e w porównaniu z
make
jest prostszy w uyciu i bardziej rozbudowany. Wielu
programistów serwletów i stron JSP kompiluje i wdraa aplikacje wanie przy uyciu
ant
.
Sposób uywania narzdzia
ant
zosta opisany w dodatku „Tworzenie Aplikacji przy uyciu
narzdzia Apache ant”.
Ogólne informacje o
ant
s dostpne na stronie pod adresem http://ant.apache.org/manual/,
natomiast wskazówki dotyczce uywania
ant
z serwerem Tomcat znajduj si pod adresem
http://tomcat.apache.org/tomcat-5.5-doc/appdev/processes.html.
Gówn zalet takiego rozwizania jest elastyczno —
ant
jest tak rozbudowany, e obsu-
guje wszystkie etapy od kompilacji kodu ródowego Javy, przez kopiowanie plików a po
generowanie plików archiwum WAR (wicej na ten temat w punkcie 1.5).
Kolejnym narzdziem, które przyciga uwag programistów Javy, jest narzdzie
maven
. Na-
rzdzie to rozszerza moliwoci
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 jak
ant
, lecz jego twórcy skupili si przede wszystkim na prostocie jego uywania. Dlatego te
wan rol odgrywaj w nim konwencje.
maven
moe na przykad skompilowa kod ródowy
nawet wówczas, gdy programista nie wskae go w folderze projektowym. Jest to moliwe
dziki temu, e w
maven
przyjto, i zgodnie z konwencj kod ródowy jzyka Java znajduje
si w folderze src/main/java. Oczywicie, zaoenie to mona zmienia, ale po co? Dziki
zastosowaniu konwencji pliki konfiguracyjne programu
maven
s, w odrónieniu od
ant
, bardzo
krótkie i zrozumiae. Wicej informacji na temat tego narzdzia mona znale na stronie
http://maven.apache.org.
Rozdzia 1.
Q
Uywanie i wdraanie aplikacji internetowych
31
Wad zarówno
ant
, jak i
maven
jest konieczno powicenia okrelonego czasu na nauk
pracy z nimi. Zasadniczo krzywa uczenia si
ant
i
maven
jest bardziej stroma ni w przypadku
dwóch pierwszych technik prezentowanych w tym podrozdziale. Natomiast istotn rónic
midzy powicaniem czasu na nauk konkretnego rodowiska IDE a poznawaniem narzdzia
ant
albo
maven
jest to, e w coraz wikszej liczbie rodowisk
ant
i
maven
s uywane jako
rozwizanie standardowe, zamiast narzdzi charakterystycznych tylko dla tych rodowisk.
Mona si wic spodziewa, e wiadomoci na temat
ant
lub
maven
bdzie mona wyko-
rzystywa równie w dalszej przyszoci.
Uywanie IDE wraz z narzdziem Ant
rodowiska IDE zwikszaj efektywno pracy programistów, poniewa pomagaj tworzy
kod ródowy, natomiast ograniczaj moliwoci jego przenoszenia. Narzdzie
ant
z kolei
pozwala na tworzenie aplikacji przenonych, lecz w adnej mierze nie pomaga pisa kodu
ródowego. Co z tym zrobi?
Przepa dzielc
ant
i IDE mona nieco zmniejszy przez uywanie rodowiska IDE zinte-
growanego z
ant
. Dziki temu nadal mona pracowa z ulubionym rodowiskiem programi-
stycznym, które wspiera proces pisania kodu ródowego, a jednoczenie jednym klikni-
ciem myszy wywouje skrypty
ant
odpowiadajce za skompilowanie i wdroenie aplikacji.
Takiego rozwizania mona uywa nawet w rodowiskach, które z
ant
nie s zintegrowane
(cho wikszo wspóczesnych rodowisk tak integracj ju posiada), lecz bdzie to wyma-
ga przeczania si midzy wierszem polece a rodowiskiem programistycznym.
Takie podejcie doskonale sprawdza si w prawdziwych projektach. Programici uywaj
ulubionych IDE, w których pisanie kodu jest bardziej efektywne, za sam projekt nie jest
naraony na powstawanie niespójnoci w trakcie wdroenia, poniewa kompilacja i wdro-
enie s przeprowadzane przez ten sam przenony skrypt
ant
. Uczestniczylimy w projektach,
w których poszczególni programici nalecy do zespou projektowego tworzcego jedn
aplikacj internetow korzystali z rónych IDE; niektórzy z nich pracowali nawet w odmien-
nych systemach operacyjnych. Proces wdraania aplikacji natomiast pozostawa spójny, a sami
programici byli zadowoleni z moliwoci uywania swoich ulubionych narzdzi progra-
mistycznych. A czy zadowolenie programisty nie jest najwaniejsze?
1.5. Umieszczanie aplikacji internetowych
w plikach WAR
Pliki archiwum WWW (ang. Web archive — WAR) doskonale nadaj si do czenia w poje-
dynczym archiwum caych aplikacji internetowych. Jeden duy plik z aplikacj zastpujcy
wiele maych plików znacznie atwiej jest przenosi z serwera na serwer.
Archiwum WAR jest tak naprawd plikiem JAR z rozszerzeniem .war i tworzy si go zwykym
poleceniem
jar
. Aby na przykad umieci ca aplikacj aplikacja_internetowa w pliku
WAR o nazwie aplikacja_internetowa.war, naley przej do katalogu aplikacja_internetowa
i wykona nastpujce polecenie:
32
Core Java Servlets i JavaServer Pages
jar cvf aplikacja_internetowa.war *
Pliku WAR nie czy z poleceniem
jar
adna specjalna zaleno. Polecenie
jar
jest tak
naprawd jednym z wielu narzdzi, dziki któremu mona tworzy archiwa plików. Takie
samo archiwum mona utworzy na przykad przy uyciu programu WinZip (albo
tar
w systemie UNIX). Wystarczy w tym celu wskaza nazw pliku docelowego z rozszerzeniem
.war zamiast rozszerzenia .zip.
Oczywicie, nic nie stoi na przeszkodzie, by w trakcie tworzenia archiwów WAR wykorzy-
sta inne opcje narzdzia
jar
(na przykad cyfrowo podpisywa klasy), tak samo jak wobec
standardowych plików JAR. Wicej szczegóowych informacji na ten temat mona 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 (dotyczy
systemów UNIX/Linux).
1.6. Tworzenie prostej aplikacji internetowej
Czas ju przej od sów do czynów, czyli utworzy pierwsz aplikacj internetow. Jako
serwer uyty zostanie serwer Tomcat, lecz opisywane czynnoci bd przebiega podobnie
równie w przypadku wykorzystania innych serwerów. Wicej informacji na ten temat przed-
stawiono w punkcie 1.3, „Rejestrowanie aplikacji internetowych na serwerze”.
W celu utworzenia aplikacji naley wykona nastpujce kroki:
1.
Z ftp://ftp.helion.pl/przyklady/jsp2w2.zip pobra aplikacj app-blank i zmieni jej
nazw 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.
Umieci 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 bdzie j wywoywa.
7.
Skopiowa aplikacj testApp do katalogu katalog_tomcat/webapps.
8.
Uruchomi serwer Tomcat.
9.
Wywoa aplikacj testApp, wpisujc adres URL w postaci
http://localhost/testApp/nazwaZasobu.
Wymienione czynnoci zostan szczegóowo opisane w kolejnych sekcjach.
Rozdzia 1.
Q
Uywanie i wdraanie 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 plik
app-blank.zip. Zawiera on odpowiedni struktur katalogów dla kadej aplikacji internetowej
zgodnej ze specyfikacj J2EE. Archiwum to zawiera take wyjciow wersj deskryptora wdro-
enia web.xml, w którym znajduje si odwzorowanie wyczajce wywoywacz serwletu. Wi-
cej na temat odwzorowywania serwletów powiemy przy okazji odwzorowywania adresu
URL na serwlet
TestServlet
. Na razie wystarczy rozpakowa archiwum app-blank.zip do
wybranego katalogu i zmieni nazw katalogu na testApp. Trzeba równie pamita, by katalog
testApp trafi do katalogu, który bdzie 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 mona pobra z ftp://ftp.helion.pl/
´przyklady/jsp2w2.zip. Pliki mona pobra oddzielnie jeden po drugim bd te w postaci po-
jedynczego archiwum testAppFiles.zip, a nastpnie rozpakowa je w wybranym katalogu.
Dodanie plików test.html i test.jsp do aplikacji internetowej testApp
Pliki test.html i test.jsp naley umieci w katalogu testApp, a nastpnie utworzy w nim
katalog someDirectory i wstawi w nim kopi plików test.html i test.jsp. Plik test.html zawiera
tre statyczn, natomiast test.jsp zawiera skrypt zwracajcy adres URL, z którego wywoano
stron. Na listingach 1.1 i 1.2 przedstawiono kompletne kody ródowe 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>
Uyto nastpujcego adresu URL:
<%= request.getRequestURL() %>
</BODY></HTML>
34
Core Java Servlets i JavaServer Pages
Umieszczenie pliku TestServlet.java w katalogu
testApp/WEB-INF/classes/coreservlets
W pliku TestServlet.java znajduje si deklaracja, wedug której serwlet naley do pakietu
coreservlets
. Zatem plik TestServlet.java musi znale si w tym pakiecie, zanim bdzie
mona go skompilowa. Podobnie jak plik test.jsp, plik TestServlet.class zawiera kod zwra-
cajcy adres URL, za pomoc którego nastpio wywoanie serwletu. Peny kod ródowy
serwletu 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" +
"Uyto nastpujcego adresu URL: " + request.getRequestURL() + "\n" +
"</BODY></HTML>");
}
}
Kompilacja pliku TestServlet.java
Naley pamita, by w zmiennej rodowiskowej
CLASSPATH
wskaza interfejs programistyczny
(API) serwletów. Serwer Tomcat udostpnia interfejs w postaci pliku servlet-api.jar, znajdu-
jcym si w katalogu katalog_tomcat/common/lib. W systemie Windows zmienn
CLASSPATH
mona zdefiniowa w wierszu polece systemu operacyjnego, przez wykonanie nastpujcego
polecenia:
set CLASSPATH=katalog_tomcat\common\lib\servlet-api.jar
Natomiast w rodowiskach zgodnych z UNIX/Linux zmienn
CLASSPATH
mona zdefiniowa
przy uyciu konsoli, przez wykonanie polecenia o nastpujcej treci:
CLASSPATH=katalog_tomcat/common/lib/servlet-api.jar
Rozdzia 1.
Q
Uywanie i wdraanie aplikacji internetowych
35
Po odpowiednim zdefiniowaniu zmiennej
CLASSPATH
mona ju skompilowa plik TestServlet.
´java. W tym celu naley przej do katalogu testApp/WEB-INF/classes/coreservlets i wpi-
sa nastpujce polecenie:
javac TestServlet.java
Gdy kompilacja dobiegnie koca, w katalogu testApp/WEB-INF/classes/coreservlets powinna
pojawi si klasa TestServlet.class.
Zadeklarowanie w pliku web.xml klasy TestServlet.class
oraz adresu URL, który j wywouje
Naley przej do katalogu testApp/WEB-INF i otworzy w ulubionym edytorze jzyka XML
(Extensible Markup Language) albo edytorze tekstu plik web.xml. Aby zadeklarowa klas
TestServlet.class naley bezporednio za komentarzem
<!-- Tutaj naley umieci wasne
wpisy -->
umieci ponisze 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 pen
nazw klasy serwletu w postaci
nazwaPakietu.nazwaKlasy
(bez rozszerzenia .class).
W nastpnym kroku trzeba wskaza serwerowi Tomcat adresy URL, które maj wywoywa
serwlet
Test
. W tym celu w pliku web.xml naley bezporednio po zamkniciu elementu
</servlet>
umieci nastpujce wiersze kodu:
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
Powysze wiersze wskazuj serwerowi Tomcat, e gdy klient wywoa aplikacj internetow
testApp przy uyciu adresu URL w postaci http://komputer/testApp/test, powinien zosta
wywoany wczeniej zadeklarowany serwlet Test. Zawarto pliku web.xml przedstawiono
na 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 wycza wywoywacz 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">
36
Core Java Servlets i JavaServer Pages
<!-- Tutaj naley umieci wasne 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>
<!-- Wyczenie wywoywacza 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>
<!-- Jeeli adres URL zawiera katalog bez nazwy pliku, nastpi próba wywoania pliku index.jsp,
a nastpnie index.html. Jeeli aden z tych plików nie zostanie znaleziony,
efekt bdzie zalee od serwera (np. moe zosta wywietlona zawarto katalogu).
-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
Wicej informacji na temat pliku web.xml znajduje si w rozdziale 2., „Kontrolowanie dziaania
aplikacji przy uyciu deskryptora web.xml”.
Skopiowanie aplikacji testApp do katalogu katalog_tomcat/webapps
W tym kroku naley skopiowa ca struktur katalogów, poczwszy od katalogu gównego
aplikacji testApp, do katalogu automatycznego wdroenia na serwerze Tomcat katalog_tomcat/
´webapps. Alternatywnie mona spakowa aplikacj testApp do pliku WAR (przy uyciu
polecenia
jar
, programu WinZip albo narzdzia
tar
lub innego, podobnego programu),
a nastpnie skopiowa sam plik WAR do katalogu katalog_tomcat/webapps. Bez wzgldu
na to, czy do katalogu docelowego trafi aplikacja w swojej „rozdrobnionej” wersji, czy jako
plik WAR, ostateczny efekt bdzie identyczny.
Uruchomienie serwera Tomcat
Serwer Tomcat mona uruchomi w systemie Windows przez wywoanie pliku katalog_tomcat/
´bin/startup.bat. W systemie UNIX/Linux naley w tym celu wywoa plik katalog_tomcat/
´bin/startup.sh. Tomcat odnajdzie nowy katalog w swym katalogu automatycznego wdra-
ania i automatycznie zarejestruje i wdroy aplikacj internetow testApp.
Rozdzia 1.
Q
Uywanie i wdraanie aplikacji internetowych
37
Wywoanie aplikacji testApp przy uyciu adresu URL
w postaci http://localhost/testApp/zasób
Wywoanie adresów URL w postaci http://localhost/testApp/test.html oraz http://localhost/
´testApp/someDirectory/test.html spowoduje wywietlenie w przegldarce pliku test.html.
Wywoanie adresów http://localhost/testApp/test.jsp oraz http://localhost/testApp/some
´Directory/test.jsp spowoduje wywoanie pliku test.jsp, natomiast adres URL w postaci
http://localhost/testApp/test wywoa serwlet TestServlet.class.
Wszystkie przytoczone adresy zadziaaj przy zaoeniu, e zgodnie z zaleceniem przedsta-
wionym w pierwszym tomie niniejszej ksiki w pliku konfiguracyjnym serwera Tomcat
(katalog_tomcat/conf/server.xml) wskazany zostanie port numer 80. Jeeli zmiana ta nie zostaa
wprowadzona, wystarczy we wszystkich adresach URL zastpi sowo localhost sowem
localhost:8080. Na rysunkach od 1.4 do 1.8 przedstawiono zrzuty ekranów bdcych wynikiem
wywoania poszczególnych zasobów.
Rysunek 1.4.
Wynik wywoania
adresu
http://localhost/
´
testApp/test.html
Rysunek 1.5.
Wynik wywoania
adresu
http://localhost/
´
testApp/test.jsp
38
Core Java Servlets i JavaServer Pages
Rysunek 1.6.
Wynik wywoania
adresu
http://localhost/
´
testApp/
´
someDirectory/
´
test.html
Rysunek 1.7.
Wynik wywoania
adresu
http://localhost/
´
testApp/
´
someDirectory/
´
test.jsp
Rysunek 1.8.
Wynik wywoania
adresu
http://localhost/
´
testApp/test
Rozdzia 1.
Q
Uywanie i wdraanie aplikacji internetowych
39
1.7. Wspóuytkowanie danych
przez aplikacje internetowe
Jednym z gównych celów aplikacji internetowych jest oddzielenie danych od udostpnianych
funkcji. Kada aplikacja internetowa utrzymuje wasn tabel sesji oraz wasny kontekst
serwletów. Ponadto kada aplikacja uywa wasnego moduu adowania klas. Dziki temu
wyeliminowano problemy zwizane z konfliktami nazw, lecz z drugiej strony oznacza to, e
do wspóuytkowania danych midzy aplikacjami nie mona uywa metod i pól statycznych.
Nadal jednak wspóuytkowanie danych jest moliwe dziki plikom cookies albo przy uyciu
obiektów
ServletContext
powizanych z konkretnymi adresami URL. Obydwa podejcia
cakiem dobrze sprawdzaj si wówczas, gdy ilo danych wymienianych midzy aplikacjami
jest niewielka, lecz gdy wolumen wymienianych danych bdzie duy i wymiana bdzie za-
chodzi stosunkowo czsto, naley rozway moliwo poczenia tych aplikacji w jedn
wiksz aplikacj internetow. Poniej krótko opisano obydwie wymienione powyej metody
wspóuytkowania danych midzy aplikacjami.
Q
Pliki cookies. Pliki cookies s utrzymywane przez przegldark, a nie przez serwer.
Dziki temu cookies mog by wspóuytkowane przez wiele aplikacji internetowych,
jeli tylko ustawiono je w taki sposób, by dotyczyy dowolnej cieki na serwerze.
Domylnie przegldarka wysya pliki cookies jedynie do tych adresów URL,
których prefiks jest taki sam, jak prefiks adresu URL, z którego one pochodz.
Na przykad jeeli plik cookie zostanie przesany ze strony o adresie
http://komputer/cieka1/JakiPlik.jsp, wówczas przegldarka bdzie
przesya cookie do stron o adresach http://komputer/cieka1/JakiInnyPlik.jsp
oraz http://komputer/cieka1/cieka2/DowolnyAdres, natomiast do adresu
http://komputer/cieka3/DowolnyAdres cookie ju nie zostanie wysane.
Poniewa aplikacje internetowe zawsze maj unikatowe prefiksy adresu URL,
takie zachowanie przegldarek spowoduje, e plik cookie nigdy nie bdzie
uytkowany przez dwie róne aplikacje.
Jednak zgodnie z informacjami zawartymi w rozdziale 8. pierwszego tomu tej
ksiki to standardowe ustawienie mona zmieni za pomoc metody
setPath
klasy
Cookie
. Wystarczy wywoa t metod z argumentem
"/"
, dziki czemu
przegldarka zacznie wysya pliki cookie do wszystkich adresów URL
znajdujcych si na komputerze, z którego otrzymany zosta oryginalny plik:
Cookie c = new Cookie("nazwa", "warto");
c.setMaxAge(…);
c.setPath("/");
response.addCookie(c);
Q
Obiekty
ServletContext
powizane z okrelonym adresem URL. W ramach serwletu
kontekst serwletu aplikacji internetowej odczytuje si przez wywoanie jego
metody
getServletContext
(dziedziczonej z klasy
GenericServlet
). Na stronie JSP
uywa si natomiast do tego celu predefiniowanej zmiennej
application
. W obydwóch
przypadkach zwracan wartoci jest kontekst serwletu powizany z serwletem
lub stron JSP, z których pochodzio wywoanie. Dodatkowo mona równie uy
metody
getContext
obiektu
ServletContext
, która zwróci kontekst serwletu
40
Core Java Servlets i JavaServer Pages
— niekoniecznie wasnego — powizanego ze wskazanym adresem URL.
Podejcie to przedstawiono w poniszym fragmencie kodu:
ServletContext myContext = getServletContext();
String url = "/prefiksAplikacjiWWW";
ServletContext otherContext = myContext.getContext(url);
Object someData = otherContext.getAttribute("jakiKlucz");
Ani jedno, ani drugie przedstawione rozwizanie nie jest idealne.
Wad plików cookie jest to, e mona w nich przechowywa tylko ograniczon ilo danych.
Kada warto znajdujca si w pliku cookie jest cigiem znaków, a dugo kadego cigu
znaków jest ograniczona do czterech kilobajtów. Zatem wspóuytkowanie wikszych iloci
danych wymaga uycia bazy danych, a w plikach cookie przechowywane bd wówczas
jedynie wartoci penice rol kluczy do tej bazy, a wic do danych rzeczywistych.
Sab stron rozwizania bazujcego na kontekstach serwletów jest to, e z góry trzeba
w nich zna prefiksy adresów URL uywanych przez inne aplikacje internetowe. Zwykle
oczekuje si moliwoci dowolnego zmieniania prefiksu adresu aplikacji bez koniecznoci
wprowadzania jakichkolwiek zmian w kodzie aplikacji. Uywanie metody
getContext
t
elastyczno ogranicza. Drug wad jest to, e ze wzgldów bezpieczestwa na serwerach
mona blokowa dostp do kontekstów serwletów
ServletContext
niektórych aplikacji inter-
netowych. Gdy co takiego nastpi, metoda
getContext
bdzie zwraca warto
null
. Na
przykad w niektórych wersjach serwera Tomcat moliwo wspóuytkowania kontekstów
jest domylnie wczona, natomiast w innych wersjach serwera moliwo t trzeba jawnie
udostpni. Choby na serwerze Tomcat w wersji 5.5.7 jako cz elementu
Context
w pliku
katalog_tomcat/conf/context.xml mona doda atrybut
crossContext="true"
, który wcza
moliwo wspóuytkowania kontekstów i czyni j rozwizaniem domylnym dla wszystkich
wdroonych aplikacji. Z kolei cakowite pominicie atrybutu
crossContext
powoduje, e
Tomcat bdzie si zachowywa w sposób domylny, to znaczy wspóuytkowanie kontekstów
ServletContext
midzy aplikacjami bdzie zabronione.
Obydwie metody wspóuytkowania danych zaimplementowano w serwletach
SetSharedInfo
oraz
ShowSharedInfo
, których kody ródowe przedstawiono odpowiednio na listingach
1.5 i 1.6. Obydwa te serwlety zostay odwzorowane na adresy URL w deskryptorze wdroenia
widocznym na listingu 1.7. Serwlet
SetSharedInfo
tworzy wasne wpisy w obiekcie sesji,
a take kontekst serwletu. Ponadto serwlet ten tworzy dwa pliki cookie. Pierwszy z nich
zawiera ciek domyln wskazujc, e cookie powinno by stosowane jedynie dla adresów
URL z prefiksem identycznym jak URL, z którego nadeszo pierwotne danie. Drugi plik
cookie zawiera ciek w postaci
"/"
, co oznacza, e cookie powinno by stosowane do
wszystkich adresów URL na komputerze. Na kocu serwlet
SetSharedInfo
przekierowuje
klienta do serwletu
ShowSharedInfo
, który z kolei wywietla nazwy wszystkich atrybutów sesji,
wszystkich atrybutów w biecym kontekcie serwletu, wszystkich atrybutów w kontekcie
serwletu dotyczcego adresów URL z prefiksem /shareTest1 oraz nazwy wszystkich plików
cookie.
Listing 1.5. SetSharedInfo.java
package coreservlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
Rozdzia 1.
Q
Uywanie i wdraanie 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); // cieka domylna
Cookie c2 = new Cookie("cookieTest2", "Cookie numer dwa");
c2.setMaxAge(3600); // jedna godzina
c2.setPath("/"); // bezporednie wyznaczenie cieki: wszystkie adresy URL
response.addCookie(c2);
String url = request.getContextPath() +
"/showSharedInfo";
// na wypadek, gdyby ledzenie sesji bazowao 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óuytkowane";
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>Biecy kontekst serwletu:");
ServletContext application = getServletContext();
attributes = application.getAttributeNames();
out.println(getAttributeList(attributes));
out.println(" <LI>Kontekst serwletu /shareTest1:");
42
Core Java Servlets i JavaServer Pages
application = application.getContext("/shareTest1");
if (application == null) {
out.println("Wspóuytkowanie kontekstów wyczone");
} 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 wycza wywoywacz 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 naley umieci wasne wpisy -->
<servlet>
<servlet-name>setSharedInfoServlet</servlet-name>
Rozdzia 1.
Q
Uywanie i wdraanie 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>
<!-- Wyczenie wywoywacza 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>
<!-- Jeeli URL zawiera katalog bez nazwy pliku, nastpi próba wywoania pliku index.jsp,
a nastpnie index.html. Jeeli aden z tych plików nie zostanie znaleziony,
efekt bdzie zalee od serwera (np. moe zosta wywietlona 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 dziaania przedstawionej aplikacji naley uruchomi tylko serwlet
SetSharedInfo
z aplikacji shareTest1, a po nim wywoa serwlet
ShowSharedInfo
aplikacji
shareTest1 oraz shareTest2. Nie naley natomiast wywoywa serwletu
ShowSharedInfo
z aplikacji shareTest2, poniewa nie zilustruje on mechanizmu wspóuytkowania danych
przez te dwie aplikacje.
Na rysunku 1.9 przedstawiono wynik wywoania przez uytkownika serwletów
SetSharedInfo
i
ShowSharedInfo
z aplikacji internetowej, której przypisano prefiks adresu URL /shareTest1.
Dla serwletu
ShowSharedInfo
dostpne s:
Q
Wasny atrybut sesji.
Q
Atrybuty znajdujce si w domylnym kontekcie serwletu — wasny
(utworzony jawnie przez serwlet
ShowSharedInfo
) oraz standardowy
(utworzony automatycznie przez serwer).
Q
Atrybuty wasny i standardowy, znajdujce si w kontekcie serwletu odczytanym
przez metod
getContext("/shareTest1")
. W tym przypadku kontekst serwletu jest
tosamy z domylnym kontekstem serwletu.
Q
Dwa jawnie utworzone pliki cookie oraz cookie utworzone przez system i uywane
przez mechanizm ledzenia sesji.
44
Core Java Servlets i JavaServer Pages
Rysunek 1.9.
Wynik wywoania
serwletów
SetSharedInfo
i ShowSharedInfo
z tej samej
aplikacji
internetowej
Na rysunku 1.10 z kolei przedstawiono wynik póniejszego wywoania przez uytkownika
identycznego serwletu
ShowSharedInfo
zainstalowanego w aplikacji internetowej, której
przypisano prefiks adresu URL
/shareTest2
. Dla serwletu dostpne s:
Q
Standardowe atrybuty zawarte w domylnym kontekcie serwletu.
Q
Atrybuty wasny i standardowy znajdujce si w kontekcie serwletu odczytanym
przez metod
getContext("/shareTest1")
; w tym przypadku jest to kontekst inny
ni domylny kontekst serwletu.
Q
Dwa pliki cookie: jeden utworzony jawnie, którego ciek jest
"/"
,
oraz drugi, utworzony przez system, uywany przez mechanizm ledzenia sesji
(w nim równie uywana jest wasna cieka
"/"
).
Z kolei nastpujce elementy s dla serwletu niewidoczne:
Q
Atrybuty znajdujce si w obiekcie sesji.
Q
Wasne atrybuty znajdujce si w domylnym kontekcie serwletu.
Q
Jawnie utworzone pliki cookie, w których uyto cieki domylnej.
Rozdzia 1.
Q
Uywanie i wdraanie aplikacji internetowych
45
Rysunek 1.10.
Wynik wywoania
serwletu
SetSharedInfo
w jednej aplikacji
internetowej
oraz serwletu
ShowSharedInfo
z drugiej aplikacji
internetowej