Core Java Servletsi JavaServer Pages.Tom II. Wydanie IIAutor: Marty Hall,Larry Brown, Yaakov ChaikinT³umaczenie: Daniel Ka...
Spis treÊciWprowadzenie .....................................................................................................
4         Core Java Servlets i JavaServer Pages               Uruchomienie serwera Tomcat ...................................
Spis treÊci            5                Wskazywanie adresów URL dostöpnych wyäñcznie                   za poĈrednictwem pr...
6         Core Java Servlets i JavaServer PagesRozdziaÄ 5. Filtry serwletów i stron JSP .....................................
Spis treÊci           7      7.2. Przykäad. Prosty znacznik liczby pierwszej ................................................
8         Core Java Servlets i JavaServer PagesRozdziaÄ 10. Podstawy platformy Struts .......................................
Spis treÊci           9      11.3. Definiowanie ukäadu stron przy uĔyciu moduäu Tiles .......................................
10         Core Java Servlets i JavaServer Pages        A.7. Przykäad. Wykonanie aplikacji internetowej .....................
1            UÑywanie i wdraÑanie           aplikacji internetowychW tym rozdziale:  Q   Cele aplikacji internetowych  Q  ...
18   Core Java Servlets i JavaServer Pages1.1. Cele aplikacji internetowych     Aplikacje internetowe mają trzy gáówne zal...
RozdziaÄ 1.   Q   UÑywanie i wdraÑanie aplikacji internetowych   19      Fakt ten jeszcze bardziej upraszcza proces tworze...
20   Core Java Servlets i JavaServer Pages     prefiks URL wskazuje siĊ po prostu nazwĊ gáównego katalogu aplikacji. Po za...
RozdziaÄ 1.   Q   UÑywanie i wdraÑanie aplikacji internetowych   21     Po drugie, poniewaĪ deklaratywne zabezpieczenia ap...
22   Core Java Servlets i JavaServer Pages     w jednym katalogu (na przykáad o nazwie tlds) upraszcza proces zarządzania ...
RozdziaÄ 1.   Q   UÑywanie i wdraÑanie aplikacji internetowych   231.3. Rejestrowanie aplikacji internetowych     na serwe...
24   Core Java Servlets i JavaServer Pages     bezpoĞrednio w katalogu wdroĪeniowym serwera, poniewaĪ znacznie utrudni to ...
RozdziaÄ 1.   Q   UÑywanie i wdraÑanie aplikacji internetowych     25  wystarczy tylko skopiowaü plik web.xml znajdujący s...
26   Core Java Servlets i JavaServer Pages          Element Context ma kilka atrybutów, które są udokumentowane na stronie...
RozdziaÄ 1.   Q   UÑywanie i wdraÑanie aplikacji internetowych   27Serwer BEA WebLogic        Podobnie jak Tomcat, serwer ...
28   Core Java Servlets i JavaServer Pages1.4. Strategie rozwoju i wdraÑania     aplikacji internetowych     Gdy wszystko ...
RozdziaÄ 1.   Q   UÑywanie i wdraÑanie aplikacji internetowych   29Kopiowanie struktury do skrótu lub dowi¾zania symbolicz...
30   Core Java Servlets i JavaServer PagesWykorzystanie funkcji wdraÑania udostÂpnianych przez IDE     WiĊkszoĞü Ğrodowisk...
RozdziaÄ 1.   Q   UÑywanie i wdraÑanie aplikacji internetowych   31    Wadą zarówno ant, jak i maven jest koniecznoĞü poĞw...
32   Core Java Servlets i JavaServer Pages       jar cvf aplikacja_internetowa.war *     Pliku WAR nie áączy z poleceniem ...
RozdziaÄ 1.   Q   UÑywanie i wdraÑanie aplikacji internetowych   33Pobranie aplikacji app-blank i zmiana jej nazwy na test...
34      Core Java Servlets i JavaServer PagesUmieszczenie pliku TestServlet.java w katalogutestApp/WEB-INF/classes/coreser...
RozdziaÄ 1.   Q   UÑywanie i wdraÑanie aplikacji internetowych   35        Po odpowiednim zdefiniowaniu zmiennej CLASSPATH...
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Upcoming SlideShare
Loading in...5
×

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

1,160
-1

Published on

Kompletny przewodnik po zaawansowanych mechanizmach oraz funkcjach serwletów i JSP.


* Jak kontrolować działanie aplikacji za pośrednictwem pliku deskryptora?
* Jakie są możliwości rozbudowy systemu zabezpieczeń?
* Jak można wykorzystać obsługę zdarzeń?



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


* Deskryptor wdrożenia
* Zabezpieczenia programistyczne i deklaratywne
* Filtry serwletów i stron JSP
* Model i obsługa zdarzeń
* Własne biblioteki znaczników
* Platforma Apache Struts

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,160
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Core Java Servletsi JavaServer Pages.Tom II. Wydanie IIAutor: Marty Hall,Larry Brown, Yaakov ChaikinT³umaczenie: Daniel KaczmarekISBN: 978-83-246-1726-5Tytu³ orygina³u: Core Servletsand Javaserver Pages: AdvancedTechnologies, Vol. 2 (2nd Edition)Format: 172x245, stron: 632 • Jak wykorzystaæ strumienie? • Jak stworzyæ efektowny interfejs u¿ytkownika? • Jak zapewniæ bezpieczeñstwo w tworzonych aplikacjach?Co spowodowa³o, ¿e jêzyk programowania Java zyska³ tak wielk¹ popularnoœæ?Przyczyn jest kilka: mo¿liwoœæ przenoszenia kodu miêdzy programami, wydajnoœæ i to,co programiœci lubi¹ najbardziej – mechanizm automatycznego oczyszczania pamiêci.Nie bez znaczenia jest równie¿ to, ¿e Java jest jêzykiem zorientowanym obiektowo,udostêpnia obs³ugê programowania rozproszonego oraz œwietn¹ dokumentacjê.Ponadto liczne publikacje oraz pomocna spo³ecznoœæ sprawiaj¹, ¿e Java zajmujepoczesne miejsce wœród innych jêzyków programowania.Kolejne wydanie ksi¹¿ki zosta³o zaktualizowane o wszystkie te elementy, które pojawi³ysiê 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 jakisposób tworzyæ aplikacje sieciowe. Poznasz interfejs JDBC, sposób wykorzystaniatransakcji oraz wykonywania zapytañ SQL. Autorzy w szczegó³owy sposób poka¿¹ Ci,jak tworzyæ aplikacje z wykorzystaniem biblioteki Swing. Dodatkowo przedstawi¹,w jaki sposób zapewniæ bezpieczeñstwo w tworzonych przez Ciebie aplikacjach.Wszystkie te - oraz wiele innych – zagadnienia zostan¹ przedstawione w przystêpnyi sprawdzony sposób! • Wykorzystanie strumieni • Dokumenty XML i ich wykorzystanie w jêzyku Java • Programowanie aplikacji sieciowych • Wykorzystanie interfejsu JDBC • Tworzenie aplikacji wielojêzycznych • Mo¿liwoœci pakietu Swing • Wykorzystanie biblioteki AWT • Bezpieczeñstwo w aplikacjach • Zastosowanie podpisu cyfrowego • Sposoby wykorzystania obiektów rozproszonych (RMI) Wykorzystaj zaawansowane mo¿liwoœci jêzyka Java w swoich projektach!
  2. 2. Spis treÊciWprowadzenie ................................................................................................................................................ 11PodziÂkowania ............................................................................................................................................... 15O autorach ...................................................................................................................................................... 16RozdziaÄ 1. UÑywanie i wdraÑanie aplikacji internetowych ......................................................................... 17 1.1. Cele aplikacji internetowych .................................................................................... 18 Organizacja ....................................................................................................... 18 PrzenoĈnoĈè ..................................................................................................... 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 wdraĔania aplikacji internetowych .................................................. 28 Kopiowanie struktury do skrótu lub dowiñzania symbolicznego .............................. 29 Wykorzystanie funkcji wdraĔania udostöpnianych przez IDE ................................... 30 UĔywanie narzödzi ant, maven i im podobnych ..................................................... 30 UĔywanie IDE wraz z narzödziem 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ñ wywoäuje ........................................................................................... 35 Skopiowanie aplikacji testApp do katalogu katalog_tomcat/webapps .................... 36
  3. 3. 4 Core Java Servlets i JavaServer Pages Uruchomienie serwera Tomcat ............................................................................ 36 Wywoäanie aplikacji testApp przy uĔyciu adresu URL w postaci http://localhost/testApp/zasób ...................................................... 37 1.7. WspóäuĔytkowanie danych przez aplikacje internetowe ................................................ 39RozdziaÄ 2. Kontrolowanie dziaÄania aplikacji przy uÑyciu deskryptora web.xml ....................................47 2.1. Przeznaczenie deskryptora wdroĔenia ........................................................................ 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 wäasnych adresów URL .............................................................. 55 Przypisywanie nazw ............................................................................................ 56 Definiowanie wäasnych adresów URL ................................................................... 57 Nazewnictwo stron JSP ...................................................................................... 62 2.5. Wyäñczanie serwletu wywoäujñcego ............................................................................ 64 Zmiana odwzorowania wzorca adresu URL /servlet/ ............................................. 65 Globalne wyäñczanie serwletu wywoäujñcego na serwerze Tomcat .......................... 66 2.6. Inicjalizowanie i wstöpne äadowanie serwletów i stron JSP .......................................... 68 Przypisywanie serwletom parametrów inicjalizacyjnych .......................................... 68 Przypisywanie parametrów inicjalizacyjnych JSP .................................................... 71 Parametry inicjalizacyjne na poziomie caäej 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 obsäugujñcych bäödy ..................................................................... 81 Element error-code ............................................................................................ 82 Element exception-type ...................................................................................... 84 2.10. Definiowanie zabezpieczeþ ...................................................................................... 86 Definiowanie metody uwierzytelniania ................................................................. 86 Ograniczanie dostöpu 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 wäaĈciwoĈci stron JSP ................................................................. 95 2.15. Kodowanie znaków ............................................................................................... 100 2.16. Tworzenie procesów nasäuchujñcych zdarzeþ aplikacji .............................................. 100 2.17. Tworzenie rozwiñzaþ przeznaczonych dla Ĉrodowisk klastrowych ............................... 101 2.18. Elementy J2EE ..................................................................................................... 104RozdziaÄ 3. Zabezpieczenia deklaratywne ................................................................................................. 109 3.1. Uwierzytelnianie przy uĔyciu formularza .................................................................... 111 Definiowanie nazw uĔytkowników, haseä i ról ...................................................... 113 Wäñczanie na serwerze uwierzytelniania przy uĔyciu formularzy i wskazywanie lokalizacji strony logowania oraz strony obsäugi bäödu logowania .... 114 Tworzenie strony logowania .............................................................................. 115 Tworzenie strony z informacjñ o bäödzie logowania ............................................. 118 Wskazywanie adresów URL, które majñ byè zabezpieczone hasäem ..................... 118 Zdefiniowanie listy wszystkich abstrakcyjnych ról ............................................... 122
  4. 4. Spis treÊci 5 Wskazywanie adresów URL dostöpnych wyäñcznie za poĈrednictwem protokoäu SSL .................................................................. 122 Wyäñczanie serwletu wywoäujñcego .................................................................... 124 3.2. Przykäad. Uwierzytelnianie przy uĔyciu formularzy ..................................................... 125 Strona gäówna ................................................................................................. 125 Deskryptor wdroĔenia ....................................................................................... 126 Plik z hasäami .................................................................................................. 129 Strony logowania i obsäugi bäödu 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 uĔytkowników, haseä i ról ...................................................... 146 Wäñczanie na serwerze uwierzytelniania metodñ BASIC i definiowanie nazwy obszaru ....................................................................... 146 Wskazywanie adresów URL, które majñ byè zabezpieczone hasäem ..................... 146 Zdefiniowanie listy wszystkich abstrakcyjnych ról ............................................... 147 Wskazywanie adresów URL dostöpnych wyäñcznie za poĈrednictwem protokoäu SSL .................................................................. 147 3.4. Przykäad. Uwierzytelnianie metodñ BASIC ................................................................. 147 Strona gäówna ................................................................................................. 148 Deskryptor wdroĔenia ....................................................................................... 149 Plik haseä ........................................................................................................ 151 Plan finansowy ................................................................................................ 151 Biznesplan ...................................................................................................... 152 Serwlet NoInvokerServlet ................................................................................. 154 3.5. Konfigurowanie obsäugi protokoäu 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 uĔyciu protokoäu SSL ..... 170RozdziaÄ 4. Zabezpieczenia programistyczne ........................................................................................... 173 4.1. ãñczenie zabezpieczeþ programistycznych i zabezpieczeþ zarzñdzanych przez kontener ..................................................................... 175 Odwoäania do ról ............................................................................................. 176 4.2. Przykäad. ãñczenie zabezpieczeþ programistycznych i zabezpieczeþ zarzñdzanych przez kontener ..................................................................... 177 4.3. Zastosowanie wyäñcznie zabezpieczeþ programistycznych ......................................... 180 4.4. Przykäad. Zastosowanie wyäñcznie zabezpieczeþ programistycznych ........................... 184 4.5. Zabezpieczenia programistyczne i protokóä SSL ......................................................... 187 Ustalenie, czy uĔywany jest protokóä SSL ........................................................... 188 Przekierowywanie wywoäaþ, które nie dotyczñ protokoäu SSL ............................... 188 Odczytanie liczby bitów w kluczu ....................................................................... 189 Sprawdzenie algorytmu szyfrowania .................................................................. 189 Dostöp do certyfikatu X.509 klienta .................................................................. 189 4.6. Przykäad. Zabezpieczenia programistyczne i protokóä SSL .......................................... 190
  5. 5. 6 Core Java Servlets i JavaServer PagesRozdziaÄ 5. Filtry serwletów i stron JSP ................................................................................................... 195 5.1. Tworzenie prostych filtrów ...................................................................................... 196 Tworzenie klasy implementujñcej interfejs Filter ................................................. 197 Implementacja filtra w metodzie doFilter ............................................................ 198 Wywoäanie metody doFilter obiektu FilterChain ................................................... 198 Rejestrowanie filtra dla serwletów lub stron JSP ................................................. 198 Wyäñczenie serwletu wywoäujñcego .................................................................... 200 5.2. Przykäad. Filtr raportujñcy ........................................................................................ 201 5.3. Dostöp do kontekstu serwletu z poziomu filtra ......................................................... 207 5.4. Przykäad. Filtr zapisujñcy do dziennika ..................................................................... 208 5.5. UĔywanie parametrów inicjalizujñcych dla filtrów ...................................................... 210 5.6. Przykäad. Filtr czasu udostöpnienia .......................................................................... 212 5.7. Blokowanie odpowiedzi .......................................................................................... 215 5.8. Przykäad. Filtr blokujñcy stronö ................................................................................ 215 5.9. Modyfikowanie odpowiedzi ..................................................................................... 221 Obiekt przechowujñcy odpowiedĒ, gotowy do wielokrotnego wykorzystania ............ 222 5.10. Przykäad. Filtr zastöpujñcy ..................................................................................... 224 Ogólny filtr modyfikujñcy ................................................................................... 224 Konkretny filtr modyfikujñcy .............................................................................. 225 5.11. Przykäad. Filtr kompresujñcy .................................................................................. 230 5.12. Konfigurowanie wspóäpracy filtra z obiektem RequestDispatcher ............................. 235 5.13. Przykäad. ãatanie potencjalnej dziury w zabezpieczeniach ........................................ 237 5.14. Peäna definicja deskryptora wdroĔenia ................................................................... 243RozdziaÄ 6. Model zdarzeÆ aplikacji ........................................................................................................... 249 6.1. Monitorowanie zdarzeþ polegajñcych na utworzeniu i zniszczeniu kontekstu serwletu ..... 252 6.2. Przykäad. Inicjalizowanie wspóäuĔytkowanych danych ................................................. 253 6.3. Wykrywanie zmian wartoĈci atrybutów kontekstu serwletu ......................................... 258 6.4. Monitorowanie zmian we wspóäuĔytkowanych danych ................................................ 259 6.5. Umieszczanie obiektów nasäuchujñcych w bibliotekach znaczników ............................ 267 6.6. Przykäad. Pakiet zawierajñcy obiekty Ĉledzñce nazwö firmy ........................................ 269 6.7. Wykrywanie zdarzeþ tworzenia i niszczenia sesji ....................................................... 275 6.8. Przykäad. Obiekt nasäuchujñcy, który zlicza sesje ...................................................... 276 Wyäñczanie obsäugi plików cookie ...................................................................... 282 6.9. Wykrywanie zmian w atrybutach sesji ...................................................................... 283 6.10. Przykäad. Monitorowanie zamówieþ na jachty ......................................................... 283 6.11. Wykrywanie inicjalizacji i zniszczenia Ĕñdania serwletu ............................................ 290 6.12. Przykäad. Obliczanie obciñĔenia serwera Ĕñdaniami ................................................. 291 6.13. Wykrywanie zmian atrybutów w Ĕñdaniach serwletów .............................................. 296 6.14. Przykäad. Zatrzymywanie obiektu zbierania statystyk Ĕñdaþ ...................................... 297 6.15. Wykorzystanie wielu obiektów nasäuchujñcych wspóäpracujñcych ze sobñ ................. 299 ćledzenie zamówieþ na towary z oferty dnia ....................................................... 300 Resetowanie licznika zamówieþ na oferty dnia ................................................... 306 6.16. Peäna definicja deskryptora wdroĔenia ................................................................... 311RozdziaÄ 7. Podstawowe informacje na temat bibliotek znaczników ....................................................... 317 7.1. Komponenty biblioteki znaczników .......................................................................... 318 Klasa obsäugi znacznika ................................................................................... 319 Plik deskryptora biblioteki znaczników ............................................................... 320 Plik JSP .......................................................................................................... 321
  6. 6. Spis treÊci 7 7.2. Przykäad. Prosty znacznik liczby pierwszej ................................................................. 322 7.3. Przypisywanie znacznikom atrybutów ....................................................................... 326 Atrybuty znacznika a klasa obsäugi znacznika ..................................................... 326 Atrybuty znacznika a deskryptor biblioteki znaczników ......................................... 327 Atrybuty znacznika a plik JSP ............................................................................ 328 7.4. Przykäad. Znacznik liczby pierwszej o zmiennej däugoĈci ............................................ 328 7.5. Zamieszczanie treĈci znacznika w danych zwracanych przez znacznik ......................... 330 TreĈè znacznika a klasa obsäugi znacznika ......................................................... 330 TreĈè znacznika a deskryptor biblioteki znaczników ............................................ 331 TreĈè znacznika a plik JSP ................................................................................ 331 7.6. Przykäad. Znacznik nagäówka ................................................................................... 332 7.7. Przykäad. Znacznik debugowania ............................................................................. 335 7.8. Tworzenie plików znaczników .................................................................................. 337 7.9. Przykäad. Prosty znacznik liczby pierwszej z uĔyciem pliku znacznika ........................... 339 7.10. Przykäad. Znacznik liczby pierwszej o zmiennej däugoĈci z uĔyciem pliku znacznika ...... 340 7.11. Przykäad. Znacznik nagäówka z uĔyciem pliku znacznika ............................................ 341RozdziaÄ 8. Biblioteki znaczników. Funkcje zaawansowane .................................................................... 345 8.1. Operacje na treĈci znacznika .................................................................................. 346 8.2. Przykäad. Znacznik filtrujñcy kod HTML ..................................................................... 347 8.3. Przypisywanie atrybutom znaczników wartoĈci dynamicznych ..................................... 350 Dynamiczne wartoĈci atrybutów a klasa obsäugi znacznika .................................. 351 Dynamiczne wartoĈci atrybutów a deskryptor biblioteki znaczników ...................... 351 Dynamiczne wartoĈci atrybutów a plik JSP ......................................................... 351 8.4. Przykäad. Prosty znacznik wykonujñcy pötlö .............................................................. 352 8.5. Przypisywanie atrybutom znaczników wartoĈci w postaci zäoĔonych obiektów .............. 356 Dynamiczne, zäoĔone wartoĈci atrybutów a klasa obsäugi znacznika ..................... 356 Dynamiczne, zäoĔone wartoĈci atrybutów a deskryptor biblioteki znaczników ......... 356 Dynamiczne, zäoĔone wartoĈci atrybutów a plik JSP ............................................ 357 8.6. Przykäad. Znacznik formatujñcy tabele ..................................................................... 357 8.7. Tworzenie znaczników wykonujñcych pötle ............................................................... 362 8.8. Przykäad. Znacznik forEach ..................................................................................... 363 8.9. Tworzenie funkcji jözyka wyraĔeþ ............................................................................. 367 8.10. Przykäad. Ulepszony znacznik debugowania ............................................................. 369 8.11. Obsäuga zagnieĔdĔonych znaczników niestandardowych ........................................... 372 8.12. Przykäad. Znacznik If-Then-Else ............................................................................... 373RozdziaÄ 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
  7. 7. 8 Core Java Servlets i JavaServer PagesRozdziaÄ 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 wäasnych aplikacji Struts ................................................................... 405 Dodawanie Struts do juĔ istniejñcej 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 Dziaäanie obiektów Action ................................................................................. 415 Przykäad. Odwzorowanie jednego wyniku ............................................................ 418 Przykäad. Odwzorowanie kilku wyników ............................................................... 424 ãñczenie wspóäuĔytkowanych odwzorowaþ warunków .......................................... 432 10.5. Obsäuga parametrów Ĕñdaþ w komponentach bean formularzy .................................. 434 Proces przetwarzania na platformie Struts z uwzglödnieniem komponentów bean ..... 434 SzeĈè podstawowych kroków w pracy ze Struts .................................................. 436 Dziaäanie komponentów bean formularzy ........................................................... 438 WyĈwietlanie wäaĈciwoĈci komponentu bean ...................................................... 440 Przykäad. Komponenty bean formularza i danych wynikowych ............................... 442 10.6. Wstöpne wypeänianie formularzy danymi i ich ponowne wyĈwietlanie ......................... 453 Proces przetwarzania na platformie Struts ......................................................... 454 SzeĈè podstawowych kroków w pracy ze Struts .................................................. 455 Wykorzystanie znaczników html: platformy Struts ............................................... 458 Wypeänianie formularzy danymi poczñtkowymi .................................................... 459 Przykäad. Wypeänianie formularzy danymi poczñtkowymi ...................................... 460 Strategie tworzenia adresów URL dla obiektów Action ........................................ 469 Ponowne wyĈwietlanie formularzy ..................................................................... 472 Przykäad. Ponowne wyĈwietlanie formularza ....................................................... 475RozdziaÄ 11. Platforma Struts. Funkcje dodatkowe ................................................................................... 485 11.1. Wykorzystanie plików wäaĈciwoĈci .......................................................................... 486 Zalety plików wäaĈciwoĈci ................................................................................. 486 Dziaäanie platformy Struts z uwzglödnieniem plików wäaĈciwoĈci .......................... 486 Sposób uĔywania plików wäaĈciwoĈci ................................................................ 487 Przykäad. Proste komunikaty ............................................................................. 491 Klucze dynamiczne .......................................................................................... 496 Komunikaty parametryzowane .......................................................................... 497 11.2. Umiödzynaradawianie aplikacji ............................................................................... 498 ãadowanie jözykowych wersji pliku wäaĈciwoĈci .................................................. 498 Definiowanie ustawieþ jözykowych w przeglñdarkach .......................................... 498 Przykäad. Polska, hiszpaþska i francuska wersja jözykowa ................................... 499 Wyniki ............................................................................................................ 500
  8. 8. Spis treÊci 9 11.3. Definiowanie ukäadu stron przy uĔyciu moduäu Tiles ............................................... 501 Powody, dla których warto uĔywaè Tiles ............................................................. 501 Wymagania wstöpne moduäu Tiles .................................................................... 502 Cztery kroki w pracy z Tiles ............................................................................... 503 Prosta aplikacja wykorzystujñca Tiles ................................................................ 506 Obsäuga wzglödnych adresów URL .................................................................... 510 Przykäad. Aplikacja e-boats ............................................................................... 511 11.4. Wykorzystanie Tiles Definitions .............................................................................. 519 Powody, dla których warto uĔywaè Tiles Definitions ............................................ 521 Piöè kroków w pracy z Tiles Definitions .............................................................. 522 Przykäad. Aplikacja e-boats wykorzystujñca moduä Tiles Definitions ...................... 525RozdziaÄ 12. Platforma Struts. Weryfikacja poprawnoÊci danych wpisanych przez uÑytkownika ...... 529 12.1. Weryfikacja poprawnoĈci danych w klasie Action ..................................................... 530 Proces przetwarzania Struts ............................................................................. 531 Przeprowadzenie weryfikacji danych w klasie Action ............................................ 531 Przykäad. Wybór kolorów i rozmiarów czcionek wykorzystywanych w Ĕyciorysie ....... 534 12.2. Weryfikacja poprawnoĈci danych w komponencie bean formularza ............................ 541 Proces przetwarzania Struts ............................................................................. 542 Przeprowadzenie weryfikacji danych w komponencie ActionForm .......................... 542 Przykäad. Wybór kolorów i rozmiarów czcionek wykorzystywanych w Ĕyciorysie (wersja druga) ................................................ 546 Parametryzowane komunikaty o bäödach ........................................................... 553 Przykäad. Weryfikacja poprawnoĈci danych z wykorzystaniem parametryzowanych komunikatów ....................................... 553 12.3. Wykorzystanie platformy automatycznej weryfikacji poprawnoĈci danych .................... 556 Weryfikacja röczna a weryfikacja automatyczna .................................................. 556 Weryfikacja na kliencie a weryfikacja na serwerze .............................................. 557 Proces przetwarzania Struts ............................................................................. 558 Konfiguracja mechanizmu automatycznej weryfikacji danych ................................ 559 Przykäad. Automatyczna weryfikacja poprawnoĈci danych .................................... 565Dodatek A Tworzenie aplikacji przy uÑyciu Apache Ant ........................................................................... 575 A.1. NajwaĔniejsze 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. Przeglñd najczöĈciej uĔywanych zadaþ Ant ............................................................... 582 Zadanie echo .................................................................................................. 582 Zadanie tstamp ............................................................................................... 583 Zadanie mkdir ................................................................................................. 584 Zadanie delete ................................................................................................ 584 Zadanie copy .................................................................................................. 586 Zadanie javac .................................................................................................. 588 A.5. Przykäad. Prosty projekt Ant .................................................................................... 591 A.6. Tworzenie aplikacji internetowej przy uĔyciu Ant ...................................................... 596 ZaleĔnoĈci miödzy celami Ant ........................................................................... 597
  9. 9. 10 Core Java Servlets i JavaServer Pages A.7. Przykäad. Wykonanie aplikacji internetowej ............................................................... 598 Cel prepare ..................................................................................................... 600 Cel copy ......................................................................................................... 601 Cel build ......................................................................................................... 602 A.8. Tworzenie pliku WAR przy uĔyciu Ant ........................................................................ 603 Zadanie jar ..................................................................................................... 603 Zadanie manifest ............................................................................................ 605 A.9. Przykäad. Tworzenie pliku WAR aplikacji internetowej ................................................. 606 Cel war ........................................................................................................... 607Skorowidz ..................................................................................................................................................... 611
  10. 10. 1 UÑywanie i wdraÑanie aplikacji internetowychW tym rozdziale: Q Cele aplikacji internetowych Q Struktura aplikacji internetowych Q Rejestrowanie aplikacji internetowych Q Strategie rozwoju i wdraĪania aplikacji internetowych Q Pliki WAR Q WspóáuĪytkowanie danych przez aplikacje internetoweW ramach aplikacji internetowych moĪna tworzyü zwarte kolekcje serwletów, stron JavaServer Pages (JSP), bibliotek znaczników, dokumentów HTML (Hypertext Markup Language),obrazków, arkuszy stylów i innych treĞci przeznaczonych dla internetu. Z kolekcji tych moĪnakorzystaü na dowolnym serwerze zgodnym ze specyfikacją serwletów. Prawidáowo zaprojek-towane aplikacje internetowe moĪna przenosiü z jednego serwera na inny albo umieszczaüw innej lokalizacji na tym samym serwerze bez koniecznoĞci wprowadzania zmian do ser-wletów, stron JSP czy plików HTML wchodzących w skáad aplikacji.W ten sposób nawet záoĪone aplikacje moĪna przenosiü bez wiĊkszego wysiáku, uáatwiając ichwielokrotne wykorzystywanie. Ponadto dziĊki temu, Īe kaĪda aplikacja internetowa posiadawáasną strukturĊ katalogów, sesje, kontekst ServletContext i moduá áadowania klas, uĪywanieaplikacji internetowej upraszcza nawet początkowe etapy rozwoju, poniewaĪ znaczniemniej uwagi trzeba poĞwiĊcaü na koordynacjĊ poszczególnych elementów caáego opraco-wanego rozwiązania.
  11. 11. 18 Core Java Servlets i JavaServer Pages1.1. Cele aplikacji internetowych Aplikacje internetowe mają trzy gáówne zalety — uáatwiają odpowiednie zorganizowanie zasobów, wdroĪona aplikacja charakteryzuje siĊ przenoĞnoĞcią, a ponadto áatwiej jest uniknąü konfliktów miĊdzy róĪnymi aplikacjami internetowymi. KaĪda z tych zalet zostanie omówiona nieco szerzej.Organizacja Pierwsza zaleta aplikacji internetowych wypáywa z faktu, Īe wszystko ma w nich swoje miejsce — dla kaĪdego rodzaju zawartoĞci przeznaczona jest standardowa lokalizacja. Poszczegó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 bezpoĞrednio dostĊpne dla klientów (na przykáad przeglądarek internetowych) umieszczane są w gáównym katalogu aplikacji internetowej lub dowolnym jego podkatalogu z wyjątkiem WEB-INF. CzĊsto zdarza siĊ, Īe programista koĔczy pracĊ nad jednym projektem i przechodzi do innego zespoáu projektowego. DziĊki standardowej organizacji zasobów aplikacji nie trzeba na nowo poznawaü struktury aplikacji za kaĪdym razem, gdy rozpoczyna siĊ pracĊ nad nowym pro- jektem. Nowy programista rozpoczynający pracĊ nad aplikacją nie musi równieĪ traciü czasu na rozpoznanie sposobu organizowania poszczególnych rodzajów plików.PrzenoÊnoÊÀ PoniewaĪ specyfikacja serwletów przewiduje okreĞloną organizacjĊ plików, na kaĪdym serwe- rze zgodnym z tą specyfikacją moĪna wáaĞciwie od razu wdraĪaü i uruchamiaü aplikacjĊ. DziĊki temu istnieje duĪa swoboda w wyborze dostawcy docelowego serwera WWW. JeĞli tylko wybrany serwer jest zgodny ze specyfikacją, kaĪdą aplikacjĊ moĪna — w wiĊkszoĞci przypadków bez Īadnych zmian — wdroĪyü i uruchomiü na serwerze pochodzącym od innego producenta. MoĪna na przykáad utworzyü aplikacjĊ na darmowym serwerze WWW, a nastĊp- nie jej wersjĊ przedprodukcyjną uruchomiü juĪ na bardziej stabilnym serwerze, dla którego producent Ğwiadczy odpowiednie wsparcie techniczne.Separacja Poszczególne aplikacje internetowe wdroĪone na tym serwerze nie wchodzą ze sobą w konflikt. KaĪda aplikacja ma wáasny adres URL, za pomocą którego moĪna do niej uzyskaü dostĊp, wáasny obiekt ServletContext i tak dalej. Dwie aplikacje wdroĪone na tym samym serwerze dziaáają tak, jakby byáy uruchamiane na dwóch oddzielnych serwerach, Īadna z tych aplikacji nie musi równieĪ mieü dostĊpu do drugiej.
  12. 12. RozdziaÄ 1. Q UÑywanie i wdraÑanie aplikacji internetowych 19 Fakt ten jeszcze bardziej upraszcza proces tworzenia i wdraĪania aplikacji internetowych. Programista nie musi bowiem w ogóle zastanawiaü siĊ nad tym, w jaki sposób powinno siĊ integrowaü tworzoną aplikacjĊ z aplikacjami juĪ dziaáającymi na tym samym serwerze. Obecnie istnieje kilka sposobów, dziĊki którym aplikacje mogą ze sobą wspóápracowaü — zostaną one opisane w dalszej czĊĞci rozdziaáu. Jednak w znakomitej wiĊkszoĞci przy- padków aplikacje wdraĪa siĊ niezaleĪnie od siebie.1.2. Struktura aplikacji internetowych Jak juĪ wczeĞniej wspomniano, aplikacja internetowa ma standardowy format i jest przenoĞna do wszystkich serwerów WWW lub serwerów aplikacji zgodnych ze specyfikacją. Gáówny katalog aplikacji to zwykáy katalog o dowolnej nazwie. Wewnątrz tego katalogu znajdują siĊ lokalizacje przeznaczone dla poszczególnych elementów. W tym punkcie opisane zostaną rodzaje elementów, z jakich moĪe skáadaü siĊ aplikacja, oraz lokalizacje, w których elementy powinny siĊ znajdowaü.Lokalizacje poszczególnych rodzajów plików Na rysunku 1.1 przedstawiono standardową strukturĊ przykáadowej aplikacji internetowej. Aby wykonaü kolejne kroki procesu tworzenia wáasnej aplikacji internetowej, naleĪy 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.StrukturastandardowejaplikacjiinternetowejStrony JSP Strony JSP naleĪy umieszczaü w gáównym katalogu aplikacji internetowej lub w jego pod- katalogu o dowolnej nazwie, innej niĪ WEB-INF i META-INF. Serwery nigdy nie udostĊp- niają klientom plików znajdujących siĊ w katalogach WEB-INF i META-INF. Gdy aplikacja internetowa zostanie juĪ zarejestrowana (wiĊcej na ten temat w punkcie 1.3), naleĪy wskazaü serwerowi prefiks URL wskazujący aplikacjĊ oraz zdefiniowaü lokalizacjĊ, w której znaj- duje siĊ katalog aplikacji internetowej. Zazwyczaj — choü nie jest to obowiązkowe — jako
  13. 13. 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Ċ dostĊpne za poĞrednictwem adresów URL w postaci http:// ´komputer/prefiksAplikacji/nazwapliku.jsp (jeĪeli strony JSP znajdują siĊ w gáównym kata- logu aplikacji) albo http://komputer/prefiksAplikacji/podkatalog/nazwapliku.jsp (gdy strony znajdują siĊ w podkatalogu). Od ustawieĔ serwera zaleĪy, czy plik domyĞlny, taki jak index.jsp, bĊdzie dostĊpny po wpi- saniu adresu URL wskazującego jedynie katalog (na przykáad http://komputer/prefiksAplikacji/) bez zapisania odpowiedniego ustawienia w pliku konfiguracyjnym WEB-INF/web.xml. JeĪeli index.jsp ma byü domyĞlnym plikiem aplikacji, zalecane jest dodanie w pliku web.xml tej aplikacji odpowiedniego elementu welcome-file-list. Na przykáad poniĪszy fragment pliku web.xml wskazuje, Īe jeĪeli adres URL zawiera nazwĊ katalogu, a nie zawiera nazwy pliku, wówczas serwer powinien w pierwszej kolejnoĞci zwróciü plik index.jsp, a w drugiej kolej- noĞci plik index.html. JeĪeli na serwerze nie ma Īadnego z tych dwóch plików, odpowiedĨ bĊdzie zaleĪeü od serwera (na przykáad wyĞwietlona zostanie zawartoĞü katalogu). <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> </welcome-file-list> WiĊcej informacji na temat sposobu uĪywania pliku web.xml znajduje siĊ w rozdziale 2., „Kontrolowanie dziaáania aplikacji przy uĪyciu deskryptora web.xml”.Dokumenty HTML, obrazki i inne standardowe elementy aplikacji internetowej Moduá obsáugi serwletów i stron JSP stosuje identyczne reguáy dla stron JSP oraz dla plików HTML, obrazków GIF i JPEG, arkuszy stylów i innych dokumentów internetowych. Wszystkie wymienione elementy są umieszczane dokáadnie w tych samych lokalizacjach i udostĊpniane za poĞrednictwem adresów URL w identycznej formie.Pojedyncze serwlety, komponenty JavaBeans i klasy pomocnicze Serwlety oraz inne pliki z rozszerzeniem .class umieszcza siĊ w katalogu WEB-INF/classes albo w podkatalogu katalogu WEB-INF/classes o nazwie odpowiadającej nazwie pakietu. Aby uzyskaü dostĊp do jednego z serwletów trzeba wskazaü dla niego odpowiedni adres URL. W tym celu w deskryptorze wdroĪenia web.xml, znajdującym siĊ w katalogu WEB-INF, trzeba zdefiniowaü element servlet-mapping. WiĊcej informacji na ten temat znajduje siĊ w punkcie 1.3, „Rejestrowanie aplikacji internetowych na serwerze”. DostĊp do serwletów moĪna takĪe uzyskiwaü w inny sposób, który nie wymaga definiowania odpowiedniego adresu URL. Do tego celu moĪna uĪyü adresu o postaci http://komputer/prefiks ´Aplikacji/servlet/nazwaPakietu.NazwaSerwletu. UĪywanie adresu o takiej postaci przy- daje siĊ w trakcie testowania moĪliwoĞci aplikacji, natomiast nie zaleca siĊ jego uĪywania w aplikacjach produkcyjnych. Powodów jest kilka. Po pierwsze, jeĪeli dla tego samego serwletu zostanie równieĪ zdefiniowany element servlet-mapping, bĊdzie moĪna go wywo- áywaü na dwa róĪne sposoby, a to z kolei szybko zacznie utrudniaü utrzymywanie aplikacji.
  14. 14. RozdziaÄ 1. Q UÑywanie i wdraÑanie aplikacji internetowych 21 Po drugie, poniewaĪ deklaratywne zabezpieczenia aplikacji zaleĪą od adresu URL, przy uĪyciu którego zasób jest udostĊpniany, moĪe w ten sposób powstaü luka w zabezpieczeniach. Po trzecie, uĪytkownik jest zmuszony wpisaü adres URL, w którym znajduje siĊ nazwa serwletu ze wszystkimi jego kwalifikatorami, a takie adresy wyglądają maáo elegancko i są trudne do zapamiĊtania. Zatem w kategorii uĪytecznoĞci aplikacji internetowej taki sposób wywoáywania serwletów zyskaáby bardzo niskie noty. Po czwarte, jeĪeli kiedykolwiek zajdzie potrzeba, by zmieniü nazwĊ klasy albo umieĞciü klasy w nowym pakiecie, zmieniü trzeba bĊdzie równieĪ sam adres URL. To z kolei pociągnie za sobą wymóg zmiany wszystkich odwoáaĔ znajdu- jących siĊ w aplikacji, w których uĪywano dotychczasowego adresu URL. Oprócz tego, Īe sama ta czynnoĞü bĊdzie doĞü uciąĪliwa, to jej wynik spowoduje zamieszanie równieĪ wĞród samych uĪytkowników, którzy przecieĪ mogli zapisaü adres wĞród swoich ulubionych zakáadek, a po zmianie adresu serwletu adres ten przestanie dziaáaü i uĪytecznoĞü aplikacji znowu ucierpi. Zalecamy jawne blokowanie dostĊpu do serwletów wchodzących w skáad aplikacji internetowej bez odpowiednio odwzorowanego adresu URL. Odwzorowanie takie moĪna zdefiniowaü za pomocą elementu servlet-mapping pliku web.xml. Przykáadowe odwzorowanie znajduje siĊ w pliku web.xml aplikacji app-blank, którą moĪna pobraü z witryny ftp://ftp.helion.pl/ ´przyklady/jsp2w2.zip.Serwlety, komponenty JavaBeans i klasy pomocnicze znajduj¾ce si w pakietach JAR JeĪeli serwlety lub inne pliki z rozszerzeniem .class wchodzą w skáad pakietów JAR, wów- czas pliki JAR powinny siĊ znajdowaü w katalogu WEB-INF/lib. JeĪeli klasy znajdują siĊ w pakietach, wówczas wewnątrz pliku JAR klasy te powinny znajdowaü siĊ w katalogu o nazwie odpowiadającej nazwie ich pakietu. WiĊkszoĞü serwerów umoĪliwia wspóáuĪyt- kowanie plików JAR przez róĪne aplikacje internetowe. Funkcja ta nie jest jednak standardem, a konkretny sposób jej dziaáania zaleĪy od rodzaju serwera. Na serwerze Tomcat wspóáuĪyt- kowane pliki JAR umieszcza siĊ w katalogu katalog_tomcat/shared/lib.Deskryptor wdroÑenia Deskryptor wdroĪenia, czyli plik web.xml, powinien znajdowaü siĊ w podkatalogu WEB-INF katalogu gáównego aplikacji internetowej. Szczegóáowe informacje na temat sposobu uĪywania pliku web.xml znajdują siĊ w rozdziale 2., „Kontrolowanie dziaáania aplikacji przy uĪyciu pliku web.xml”. Warto zwróciü uwagĊ, Īe niektóre serwery mogą obsáugiwaü globalny plik web.xml, dotyczący wszystkich aplikacji internetowych. Na przykáad serwer Tomcat wyko- rzystuje plik katalog_tomcat/conf/web.xml, w którym znajdują siĊ globalne ustawienia konfiguracyjne. Plik taki jest jednak cechą charakterystyczną tylko tego serwera. Standardem jest wyáącznie plik web.xml definiowany dla kaĪdej aplikacji oddzielnie i umieszczany w ka- talogu WEB-INF aplikacji internetowej.Deskryptory bibliotek znaczników Pliki bĊdące deskryptorami bibliotek znaczników (ang. Tag Library Descriptor — TLD) umieszcza siĊ w katalogu WEB-INF lub jego dowolnym podkatalogu. Zaleca siĊ jednak, by deskryptory te umieszczaü w podkatalogu tlds katalogu WEB-INF. Grupowanie deskryptorów
  15. 15. 22 Core Java Servlets i JavaServer Pages w jednym katalogu (na przykáad o nazwie tlds) upraszcza proces zarządzania nimi. Strony JSP uzyskują dostĊp do plików TLD znajdujących siĊ w WEB-INF za pomocą dyrektywy taglib o nastĊpującej postaci: <%@ taglib uri="/WEB-INF/tlds/mójPlikTaglib.tld" … %> PoniewaĪ nie mamy do czynienia z klientem (takim jak choüby przeglądarka internetowa), lecz z serwerem, który wykorzystuje plik TLD, blokada dostĊpu do zawartoĞci znajdującej siĊ w katalogu WEB-INF w tym przypadku nie obowiązuje. Gdy plik z rozszerzeniem .tld jest umieszczany wewnątrz pliku JAR, powinien siĊ on znaj- dowaü w katalogu META-INF lub w którymĞ z jego podkatalogów. KoniecznoĞü zmiany lokalizacji z WEB-INF na META-INF wynika z tego, Īe pliki JAR nie są archiwami aplikacji WWW, a wiĊc nie zawierają katalogu WEB-INF. WiĊcej 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ą dostĊpne dla stron JSP nawet wówczas, gdy znajdują siĊ w katalogu WEB-INF. Pliki znaczników równieĪ deklaruje siĊ na stronie JSP przy uĪyciu dyrektywy taglib. Jednak zamiast uri naleĪy w ich przypadku zdefiniowaü atrybut tagdir. JeĪeli na przykáad plik mójPlikZnaczników.tag umieszczony zostanie w katalogu WEB-INF/tags aplikacji internetowej, dyrektywa taglib strony JSP powinna mieü nastĊpującą postaü: <%@ taglib tagdir="/WEB-INF/tags" …%> W takim przypadku serwer automatycznie wygeneruje plik TLD dla plików znaczników, zatem nie trzeba samodzielnie definiowaü odpowiedniego odwzorowania. Pliki znaczników moĪna takĪe doáączaü do plików JAR. Sam plik JAR powinien zostaü umieszczony w katalogu WEB-INF/lib, zgodnie z tym, co wspomniano juĪ wczeĞniej. Jednak wewnątrz pliku JAR pliki znaczników powinny znajdowaü siĊ w katalogu META-INF/tags. W takim przypadku serwer nie wygeneruje automatycznie TLD, dlatego konieczne jest zadekla- rowanie plików znaczników i ĞcieĪki dostĊpu w pliku z rozszerzeniem .tld. Warto zauwaĪyü, Īe plik z rozszerzeniem .tld moĪe zawieraü równieĪ deklaracje wáasnych znaczników innych typów. WiĊcej 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 (wiĊcej na ten temat w punkcie 1.5), plik MANIFEST.MF zostaje umieszczony w podkatalogu META-INF. Zazwyczaj narzĊdzie 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.
  16. 16. RozdziaÄ 1. Q UÑywanie i wdraÑanie aplikacji internetowych 231.3. Rejestrowanie aplikacji internetowych na serwerze Jak wspominano juĪ wczeĞniej, aplikacje internetowe są przenoĞne. Bez wzglĊdu na to, jaki serwer jest uĪywany, pliki aplikacji są przechowywane w takiej samej strukturze katalogów, a dostĊp do nich uzyskuje siĊ za poĞrednictwem adresów URL w takiej samej postaci. Na ry- sunku 1.2 przedstawiono strukturĊ adresów URL, których naleĪaáoby uĪyü dla 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.StrukturaaplikacjiinternetowejmyWebApp Same aplikacje internetowe są w peáni przenoĞne, natomiast juĪ przebieg procesu rejestracji aplikacji zaleĪy od serwera. Aby na przykáad 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) zaleĪy od rodzaju uĪywanego serwera. Podobnie od rodzaju serwera zaleĪy sam sposób wskazywania serwerowi, Īe aplikacja powinna byü wywoáywana przy uĪyciu adresu URL w postaci http://komputer/myWebApp/. W tym punkcie przyjĊto zaáoĪenie, Īe wszystkie kroki zmierzające do zainstalowania i skon- figurowania serwera zostaáy juĪ wykonane. WiĊcej informacji na temat konfiguracji serwe- ra moĪna znaleĨü w jego dokumentacji, w pierwszym rozdziale pierwszego tomu niniejszej ksiąĪki lub (w przypadku uĪytkowników serwera Tomcat) w uaktualnianym na bieĪąco prze- wodniku po instalacji i konfiguracji serwera, dostĊpnym w witrynie http://www.coreservlets. ´com. W tym miejscu zaprezentowany zostanie tylko krótki przykáad, a nastĊpnie w jednym z kolejnych podpunktów opisana zostanie procedura rejestracji na serwerze Tomcat. Szcze- góáowy opis procesu wdroĪenia przykáadowej 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 wdraĪania aplikacji internetowych”, standardową strategią jest tworzenie aplikacji w Ğrodowisku programistycz- nym i regularne kopiowanie jej do poszczególnych katalogów wdroĪeniowych w celu przete- stowania rozwiązania na róĪnych serwerach. Odradza siĊ umieszczanie katalogu rozwojowego
  17. 17. 24 Core Java Servlets i JavaServer Pages bezpoĞrednio w katalogu wdroĪeniowym serwera, poniewaĪ znacznie utrudni to wdroĪenie aplikacji na kilku serwerach, trudno bĊdzie pracowaü nad aplikacją w czasie jej dziaáania, a takĪe utrudnione zostanie nadanie odpowiedniej organizacji plików. Lepszym rozwiązaniem jest uĪycie oddzielnego katalogu rozwojowego i zastosowanie jednej ze strategii opisanych w punkcie 1.4, „Strategie rozwoju i wdraĪania aplikacji internetowych”. Najprostszym rozwią- zaniem jest utworzenie skrótu (w systemie Windows) lub dowiązania symbolicznego (w Ğro- dowisku UNIX/Linux), prowadzącego do katalogów wdroĪeniowych poszczególnych serwe- rów, oraz kopiowanie caáego katalogu rozwojowego za kaĪdym razem, gdy przyjdzie czas na wdroĪenie aplikacji. Na przykáad w systemie Windows przy uĪyciu prawego przycisku myszy moĪna przeciągnąü 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. MoĪliwoĞü wdraĪania aplikacji internetowych przez kopiowanie struktury katalogów do jednego z katalogów serwera to tak zwane wdraĪanie na gorąco (ang. hot-deployment) albo wdraĪanie automatyczne (ang. auto-deployment). Katalog w strukturze katalogów serwera, który odpowiada za tĊ funkcjĊ, to tak zwany katalog wdraĪania na gorąco (ang. hot-deploy directory) albo katalog wdraĪania automatycznego (ang. auto-deploy directory). WiĊkszoĞü serwerów WWW, jeĞli nie wszystkie wspóáczesne serwery WWW, obsáuguje taki wáaĞnie sposób wdraĪania aplikacji. Aby zwiĊkszyü kontrolĊ nad procesem wdroĪenia, moĪna odpowiednio zmodyfikowaü zawartoĞü pliku katalog_ ´tomcat/conf/server.xml (jest to plik charakterystyczny tylko dla serwera Tomcat), tak aby odwoáywaá siĊ on do aplikacji. PoniĪej przedstawiono kolejne czynnoĞci, jakie trzeba wykonaü, aby utworzyü aplikacjĊ inter- netową dostĊpną za poĞrednictwem adresu URL rozpoczynającego siĊ od http://komputer/ ´myWebApp. 1. Utworzyü strukturĊ katalogów dla aplikacji internetowej, w której katalog gáówny bĊdzie nosiü nazwĊ myWebApp. PoniewaĪ jest to nasza wáasna struktura rozwojowa, moĪna ją umieĞciü w dowolnie wybranej lokalizacji. Struktura katalogów powinna byü zgodna ze strukturą przedstawioną w punkcie 1.2, „Struktura aplikacji internetowych”. Aby zmniejszyü liczbĊ czynnoĞci, jakie naleĪy wykonaü w ramach tego kroku, z ftp://ftp.helion.pl/przyklady/jsp2w2.zip moĪna pobraü aplikacjĊ app- blank. Zawiera ona wszystkie niezbĊdne katalogi oraz przykáadowy deskryptor wdroĪenia web.xml. Pozostaje wówczas tylko zmieniü nazwĊ katalogu gáównego app-blank na myWebApp. JeĪeli natomiast zapadnie decyzja o rĊcznym utworzeniu wymaganych katalogów, naleĪy postĊpowaü zgodnie z dalszym opisem. Najpierw trzeba utworzyü katalog o nazwie myWebApp — moĪe 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. NastĊpnie naleĪy utworzyü deskryptor wdroĪenia web.xml i umieĞciü go w katalogu WEB-INF. Szczegóáowe informacje na temat deskryptora wdroĪenia znajdują siĊ w rozdziale 2., „Kontrolowanie dziaáania aplikacji przy uĪyciu deskryptora web.xml”. Na razie
  18. 18. RozdziaÄ 1. Q UÑywanie i wdraÑanie aplikacji internetowych 25 wystarczy tylko skopiowaü plik web.xml znajdujący siĊ w katalogu katalog_tomcat/ ´webapps/ROOT/WEB-INF albo uĪyü wersji deskryptora znajdującej siĊ w aplikacji app-blank. Po utworzeniu odpowiedniej struktury katalogów naleĪy w katalogu myWebApp umieĞciü 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 bĊdącym deskryptorem wdroĪenia. W odróĪnieniu od stron JSP serwlety muszą byü deklarowane jawnie. NaleĪy zatem podaü peáną ĞcieĪkĊ dostĊpu do klasy serwletu, aby wskazaü serwerowi, Īe serwlet ten istnieje. Dodatkowo konieczne jest wskazanie serwerowi adresów URL, które po wpisaniu przez uĪytkownika powinny wywoáaü serwlet MyServlet.class. Obydwie wspomniane czynnoĞci moĪna zrealizowaü przez wstawienie w pliku web.xml poniĪszego kodu: <servlet> <servlet-name>MyName</servlet-name> <servlet-class>mypackage.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyName</servlet-name> <url-pattern>/MyAddress</url-pattern> </servlet-mapping> Element servlet oraz jego podelementy wskazują serwerowi nazwĊ, za pomocą której serwlet bĊdzie deklarowany, a takĪe peáną ĞcieĪkĊ dostĊpu do klasy serwletu. Element servlet-mapping oraz jego podelementy wskazują serwerowi serwlet, który ma byü wywoáywany, gdy klient wywoáa adres URL odpowiadający wzorcowi wskazanemu jako wartoĞü elementu url-pattern. Zatem serwlet zadeklarowany jako MyName bĊdzie wywoáywany przez adres w postaci http://komputer/ ´myWebApp/MyAddress.3. Skopiowaü katalog myWebApp do katalogu katalog_tomcat/webapps. ZaáóĪmy, Īe serwer Tomcat zostaá zainstalowany w katalogu C:katalog_tomcat. Katalog myWebApp powinno siĊ zatem skopiowaü do katalogu webapps i uzyskaü w ten sposób nastĊpujące ĞcieĪki dostĊpu: C:katalog_tomcatwebappsmyWebApp ´HelloWebApp.jsp, C:katalog_tomcatwebappsmyWebAppWEB-INFclasses ´HelloWebApp.class oraz C:katalog_tomcatwebappsmyWebAppWEB-INF ´web.xml. Katalog ten moĪna by nastĊpnie zawrzeü w pliku WAR (wiĊcej na ten temat w punkcie 1.5) i umieĞciü go w katalogu C:katalog_tomcatwebapps.4. Opcjonalnie — w pliku server.xml dopisaü element Context. DomyĞlnie Tomcat skonfiguruje aplikacjĊ internetową w taki sposób, by prefiks jej adresu URL dokáadnie odpowiadaá nazwie gáównego katalogu tej aplikacji. JeĪeli takie rozwiązanie bĊdzie wystarczające, moĪna pominąü krok opisywany w tym punkcie. JeĪeli natomiast konieczne jest zmodyfikowanie tego etapu rejestracji aplikacji, w pliku katalog_tomcat/ ´conf/server.xml moĪna dodaü element Context. Przed rozpoczĊciem edycji zawartoĞci pliku server.xml naleĪy utworzyü jego kopiĊ bezpieczeĔstwa, poniewaĪ nawet drobny báąd skáadniowy uniemoĪliwi prawidáowe uruchomienie serwera Tomcat. Natomiast w nowszych wersjach serwera Tomcat zaleca siĊ, by element Context (oraz jego podelementy) umieszczaü w pliku context.xml. Plik context.xml trzeba wówczas umieĞciü obok pliku web.xml, w katalogu WEB-INF aplikacji internetowej.
  19. 19. 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 moĪna decydowaü, czy naleĪy uĪywaü plików cookies albo czy naleĪy przepisywaü adresy URL w celu Ğledzenia sesji; moĪna takĪe wáączaü i wyáączaü moĪliwoĞü przeáadowywania serwletów (to znaczy monitorowaü klasy pod kątem zachodzących w nich zmian i przeáadowywaü serwlety tych klas, których pliki na dysku ulegáy zmianie). MoĪna równieĪ ustawiaü poziomy debugowania. Jednak w przypadku prostych aplikacji internetowych wystarczy uĪycie tylko dwóch wymaganych atrybutów: path (prefiks adresu URL) oraz docBase (bazowy katalog instalacyjny dla aplikacji internetowych wzglĊdem katalogu katalog_tomcat/webapps). Definicja elementu Context powinna wyglądaü podobnie do poniĪszej: <Context path="/jakaħ-aplikacja" docBase="myWebApp" /> NaleĪy pamiĊtaü, by jako prefiks adresu URL nie podawaü prefiksu /examples, poniewaĪ jest on juĪ uĪywany przez Tomcat jako prefiks dla przykáadowych aplikacji internetowych. Na serwerze Tomcat nie naleĔy uĔywaè prefiksu /examples w roli prefiksu adresów URL aplikacji internetowych. 5. Wywoáaü stronĊ JSP i serwlet. Adres URL http://komputer/myWebApp/ ´myPage.jsp wywoáa stronĊ JSP, zaĞ adres http://komputer/myWebApp/MyAddress spowoduje wywoáanie serwletu. W trakcie rozwoju aplikacji prawdopodobnie jako nazwa komputera uĪywana bĊdzie nazwa localhost. W podawanych adresach URL zaáoĪono, Īe plik konfiguracyjny serwera Tomcat (katalog_tomcat/conf/server.xml) zmodyfikowano w taki sposób, by uĪywany byá port numer 80, zgodnie z zaleceniami w instrukcji instalacji i konfiguracji serwera, znajdującej siĊ w witrynie http://www.coreservlets.com/. JeĪeli takiej zmiany nie wprowadzono, naleĪy uĪyü adresów w postaci http://komputer:8080/myWebApp/myPage.jsp oraz http://komputer:8080/myWebApp/MyAddress.Rejestrowanie aplikacji internetowych na innych serwerach Pierwsze dwie czynnoĞci opisane w poprzednim podrozdziale dotyczą tworzenia przenoĞnej czĊĞci aplikacji internetowej i bĊdą przebiegaü identycznie na kaĪdym serwerze zgodnym ze specyfikacją serwletów. Natomiast czynnoĞci dotyczące 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.
  20. 20. RozdziaÄ 1. Q UÑywanie i wdraÑanie aplikacji internetowych 27Serwer BEA WebLogic Podobnie jak Tomcat, serwer WebLogic udostĊpnia katalog automatycznego wdraĪania, sáuĪący do rejestrowania i wdraĪania aplikacji internetowych. Najpierw, jeĪeli jeszcze nie zostaáo to zrobione, trzeba utworzyü nową domenĊ o nazwie myDomain. DomenĊ moĪna utworzyü przy uĪyciu kreatora konfiguracji serwera WebLogic config.cmd w systemie Win- dows lub config.sh w Ğrodowiskach UNIX/Linux (obydwie wersje znajdują siĊ w katalogu bea/katalog_weblogic/common/bin). Gdy domena zostanie juĪ utworzona, naleĪy 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 wdroĪenia aplikacji moĪna takĪe uĪyü konsoli WWW serwera WebLogic. W tym celu naleĪy zalogowaü siĊ do konsoli pod adresem http://localhost:7001/console/ (przy zaáoĪeniu, Īe nie zmieniono domyĞl- nych ustawieĔ portu oraz Īe serwer jest uruchomiony na komputerze lokalnym). W panelu konsoli po lewej stronie naleĪy rozwinąü wĊzeá Deployments i kliknąü pozycjĊ Web Application Modules, po czym kliknąü polecenie Deploy a New Web Application Module. W ten sposób uruchomiony zostanie kreator wdroĪenia dziaáający w przeglądarce, w którym wystarczy wykonywaü kolejne wyĞwietlane instrukcje. Po wdroĪeniu aplikacji internetowej strona JSP bĊdzie dostĊpna pod adresem http://localhost:7001/myWebApp/myPage.jsp, zaĞ serwlet bĊdzie dostĊpny 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 domyĞlnie uĪywa osadzonego serwera WWW Tomcat. Aby zarejestrowaü aplikacjĊ, naleĪy 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 koĔczyáa siĊ sáowem .war. JBoss wymaga, by sáowem .war koĔczyáy siĊ nie tylko nazwy plików WAR (co jest zresztą wy- magane na mocy specyfikacji serwletów), lecz równieĪ nazwa gáównego katalogu aplikacji internetowej. Po zmianie nazwy katalogu katalog myWebApp.war naleĪy skopiowaü do katalogu katalog_jboss/server/default/deploy. JeĪeli w trakcie instalacji serwera JBoss Īadne domyĞlne ustawienia nie ulegáy zmianie, strona JSP bĊdzie dostĊpna pod adresem http://localhost:8080/myWebApp/myPage.jsp, natomiast serwlet bĊdzie wywoáywany adresem http://localhost:8080/myWebApp/MyAddress. JeĪeli aplikacja zostaáa spakowana w pliku WAR, w celu jej wdroĪenia plik myWebApp.war trzeba umieĞciü w tym samym katalogu serwera JBoss.Caucho Resin Aby skorzystaü z funkcji automatycznego wdraĪania na serwerze Caucho Resin, naleĪy skopio- waü caáą strukturĊ katalogów aplikacji internetowej (wáącznie z jej katalogiem gáównym) lub plik WAR do katalogu katalog_resin/webapps. JeĪeli domyĞlne ustawienia serwera nie zostaáy zmienione, strona JSP stanie siĊ dostĊpna pod adresem http://localhost:8080/myWebApp/ ´myPage.jsp, zaĞ serwlet bĊdzie dostĊpny pod adresem http://localhost:8080/myWebApp/ ´MyAddress.
  21. 21. 28 Core Java Servlets i JavaServer Pages1.4. Strategie rozwoju i wdraÑania aplikacji internetowych Gdy wszystko bĊdzie juĪ przygotowane do rozpoczĊcia procesu tworzenia nowej aplikacji internetowej, naleĪy wykonaü nastĊpujące trzy czynnoĞci: 1. Utworzyü strukturĊ katalogów aplikacji. W katalogu rozwojowym trzeba utworzyü nową strukturĊ katalogów, zgodną ze strukturą aplikacji internetowej (wáączając w to plik web.xml znajdujący siĊ w katalogu WEB-INF), opisaną we wczeĞniejszej czĊĞci tego rozdziaáu. Najprostszym sposobem wykonania tej czynnoĞci jest skopiowanie i zmiana nazwy aplikacji app-blank. (Jak pamiĊtamy, aplikacjĊ app-blank oraz wszystkie inne przykáadowe kody Ĩródáowe prezentowane w ksiąĪce moĪna pobraü z ftp://ftp.helion.pl/przyklady/jsp2w2.zip). 2. Napisaü kod Ĩródáowy aplikacji. Strony HTML i JSP trzeba umieĞciü w katalogu gáównym lub jego podkatalogach, z wyjątkiem podkatalogu WEB-INF i META-INF. Poszczególne pliki klas jĊzyka Java naleĪy umieĞciü w katalogu WEB-INF/classes/ ´podkatalog_o_nazwie_zgodnej_z_nazwą_pakietu. Pliki JAR powinny trafiü do katalogu WEB-INF/lib, pliki z rozszerzeniami .tag i .tagx do katalogu WEB-INF/tags i tak dalej. 3. WdroĪyü aplikacjĊ. Caáą strukturĊ katalogów aplikacji internetowej (w tym równieĪ jej katalog gáówny) trzeba skopiowaü do katalogu wdraĪania automatycznego serwera. Istnieje kilka rozwiązaĔ upraszczających to zadanie, a najczĊĞciej stosowanymi są: Q Skopiowanie struktury do skrótu lub dowiązania symbolicznego. Q Wykorzystanie funkcji wdraĪania udostĊpnianych przez zintegrowane Ğrodowisko programistyczne (IDE). Q Wykorzystanie narzĊdzia Ant lub podobnego. Q UĪycie Ğrodowiska IDE wraz z narzĊdziem Ant. UĪytkownicy dopiero poznający dziaáanie serwletów i stron JSP mogą pozostaü przy pierwszej opcji, zaĞ rozpoznawanie sposobu dziaáania narzĊdzia Ant lub konkretnego Ğrodowiska IDE moĪna rozpocząü po zaznajomieniu siĊ przynajmniej z podstawami serwletów i stron JSP. Trzeba jednak zaznaczyü, Īe nie wspomniano o opcji polegającej na umieszczeniu kodu bezpoĞrednio w katalogu wdroĪeniowym serwera. Wprawdzie to wáaĞnie rozwiązanie najczĊ- Ğciej wybierają początkujący programiĞci, wachlarz jego zastosowaĔ w bardziej zaawansowa- nych zadaniach jest tak skromny, Īe zaleca siĊ, by nie stosowaü go juĪ na samym początku. W kolejnych podpunktach opisane zostaną wszystkie cztery wspomniane opcje.
  22. 22. RozdziaÄ 1. Q UÑywanie i wdraÑanie aplikacji internetowych 29Kopiowanie struktury do skrótu lub dowi¾zania symbolicznego W systemie Windows naleĪy przejĞü do katalogu nadrzĊdnego wobec katalogu automatycz- nego wdroĪenia serwera. W przypadku serwera Tomcat bĊdzie to gáówny katalog instalacyjny katalog_tomcat. Katalog automatycznego wdroĪenia naleĪy kliknąü prawym przyciskiem myszy (na serwerze Tomcat bĊdzie to katalog webapps) i wybraü polecenie Kopiuj. NastĊpnie trzeba przejĞü do katalogu bezpoĞrednio nadrzĊdnego wobec gáównego katalogu rozwojowego (czyli katalogu o jeden wyĪszego w hierarchii niĪ myWebApp), kliknąü go prawym przyci- skiem myszy i wybraü polecenie Wklej skrót (a nie zwykáe polecenie Wklej). Od teraz za kaĪ- dym razem, gdy przyjdzie juĪ czas na wdroĪenie aplikacji internetowej, naleĪy kliknąü i przy- trzymaü wciĞniĊty prawy przycisk myszy na katalogu rozwojowym (na przykáad myWebApp) i przeciągnąü go do skrótu do katalogu wdroĪenia, po czym zwolniü przycisk myszy. Pojawi siĊ wówczas menu podrĊczne, w którym naleĪy wybraü polecenie Kopiuj tutaj. Na rysunku 1.3 przedstawiono przykáadową konfiguracjĊ, która uáatwi wdraĪanie i testowanie aplikacji prezentowanych w tym rozdziale na serwerach Tomcat, WebLogic, JBoss i Resin. W systemie UNIX moĪna uĪyü dowiązaĔ symbolicznych (tworzonych poleceniem ln –s) w sposób po- dobny do sposobu uĪywania skrótów w systemie Windows.Rysunek 1.3.Wykorzystanieskrótów w celuuproszczeniaprocesuwdraĔaniaaplikacji Zaletą tego rozwiązania jest to, Īe jest ono bardzo proste. Jest ono zatem dobre dla osób początkujących, które chcą siĊ skupiü na poznawaniu dziaáania serwletów i stron JSP, a nie na narzĊdziach do wdraĪania aplikacji czy Ğrodowiskach IDE. Wadą przedstawionego rozwiązania jest to, Īe gdy uĪywanych jest kilka serwerów, konieczne jest powtarzanie operacji kopiowania. ZaáóĪmy na przykáad, Īe w Ğrodowisku rozwojowym funkcjonuje kilka róĪnych serwerów (Tomcat, Resin i tak dalej), na których regularnie trzeba testowaü implementowany kod Ĩródáowy. Druga wada polega na tym, Īe w takim rozwiązaniu na serwer kopiowane są zarówno pliki z kodem Ĩródáowym Javy, jak i pliki klas, choü tak naprawdĊ niezbĊdne są tylko te ostatnie. Na serwerze biurkowym nie ma to wiĊkszego zna- czenia, lecz gdy przyjdzie do wdroĪenia aplikacji na „prawdziwym” serwerze produkcyjnym, pliki z kodem Ĩródáowym nie powinny na niego trafiü.
  23. 23. 30 Core Java Servlets i JavaServer PagesWykorzystanie funkcji wdraÑania udostÂpnianych przez IDE WiĊkszoĞü Ğ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 klikniĊciem myszy moĪliwe jest wdroĪenie aplikacji internetowej na serwerze testowym, rozwojowym lub produkcyjnym. Mimo iĪ Ğrodowiska IDE mają wiele niekwestionowanych zalet, nie są one jednak wolne od wad. WiĊkszoĞü prawdziwych Ğrodowisk IDE trzeba najpierw poznaü, co zajmuje trochĊ czasu. Nie moĪna siĊ wiĊc skoncentrowaü na zadaniach stricte programistycznych, przynajm- niej na początku. Ponadto czĊsto siĊ zdarza, Īe programiĞci są przerzucani z jednego projektu na drugi, a programiĞci pracujący wspólnie nad daną aplikacją muszą korzystaü z takiego samego Ğrodowiska IDE. Gdy wiĊc programista przejdzie do innego zespoáu projektowego, w którym kompilacja i wdraĪanie aplikacji bĊdą wykonywane w innym Ğrodowisku IDE niĪ to, którego dotąd uĪywaá programista, konieczne bĊdzie poznanie nowego narzĊdzia i przyzwyczajenie siĊ do pracy w nim. To z kolei bĊdzie wymagaü poĞwiĊcenia dodatkowego czasu.UÑywanie narzÂdzi ant, maven i im podobnych NarzĊdzie ant zaimplementowane przez Apache Foundation dziaáa podobnie jak make w Ğrodo- wisku UNIX. Jednak ant zostaá napisany w Javie (dziĊki czemu jest przenoĞny) i powszech- nie uwaĪa siĊ, Īe w porównaniu z make jest prostszy w uĪyciu i bardziej rozbudowany. Wielu programistów serwletów i stron JSP kompiluje i wdraĪa aplikacje wáaĞnie przy uĪyciu ant. Sposób uĪywania narzĊdzia ant zostaá opisany w dodatku „Tworzenie Aplikacji przy uĪyciu narzĊdzia Apache ant”. Ogólne informacje o ant są dostĊpne na stronie pod adresem http://ant.apache.org/manual/, natomiast wskazówki dotyczące uĪywania ant z serwerem Tomcat znajdują siĊ pod adresem http://tomcat.apache.org/tomcat-5.5-doc/appdev/processes.html. Gáówną zaletą takiego rozwiązania jest elastycznoĞü — ant jest tak rozbudowany, Īe obsáu- guje wszystkie etapy od kompilacji kodu Ĩródáowego Javy, przez kopiowanie plików aĪ po generowanie plików archiwum WAR (wiĊcej na ten temat w punkcie 1.5). Kolejnym narzĊdziem, które przyciąga uwagĊ programistów Javy, jest narzĊdzie maven. Na- rzĊdzie to rozszerza moĪliwoĞci ant, dlatego w niektórych przypadkach bardzo je przypomina, a w niektórych zasadniczo siĊ od niego róĪni. Wprawdzie maven jest równie elastyczny jak ant, lecz jego twórcy skupili siĊ przede wszystkim na prostocie jego uĪywania. Dlatego teĪ waĪną rolĊ odgrywają w nim konwencje. maven moĪe na przykáad skompilowaü kod Ĩródáowy nawet wówczas, gdy programista nie wskaĪe go w folderze projektowym. Jest to moĪliwe dziĊki temu, Īe w maven przyjĊto, iĪ zgodnie z konwencją kod Ĩródáowy jĊzyka Java znajduje siĊ w folderze src/main/java. OczywiĞcie, zaáoĪenie to moĪna zmieniaü, ale po co? DziĊki zastosowaniu konwencji pliki konfiguracyjne programu maven są, w odróĪnieniu od ant, bardzo krótkie i zrozumiaáe. WiĊcej informacji na temat tego narzĊdzia moĪna znaleĨü na stronie http://maven.apache.org.
  24. 24. RozdziaÄ 1. Q UÑywanie i wdraÑanie aplikacji internetowych 31 Wadą zarówno ant, jak i maven jest koniecznoĞü poĞwiĊcenia okreĞlonego czasu na naukĊ pracy z nimi. Zasadniczo krzywa uczenia siĊ ant i maven jest bardziej stroma niĪ w przypadku dwóch pierwszych technik prezentowanych w tym podrozdziale. Natomiast istotną róĪnicą miĊdzy poĞwiĊcaniem czasu na naukĊ konkretnego Ğrodowiska IDE a poznawaniem narzĊdzia ant albo maven jest to, Īe w coraz wiĊkszej liczbie Ğrodowisk ant i maven są uĪywane jako rozwiązanie standardowe, zamiast narzĊdzi charakterystycznych tylko dla tych Ğrodowisk. MoĪna siĊ wiĊc spodziewaü, Īe wiadomoĞci na temat ant lub maven bĊdzie moĪna wyko- rzystywaü równieĪ w dalszej przyszáoĞci.UÑywanie IDE wraz z narzÂdziem Ant ĝrodowiska IDE zwiĊkszają efektywnoĞü pracy programistów, poniewaĪ pomagają tworzyü kod Ĩródáowy, natomiast ograniczają moĪliwoĞci jego przenoszenia. NarzĊdzie ant z kolei pozwala na tworzenie aplikacji przenoĞnych, lecz w Īadnej mierze nie pomaga pisaü kodu Ĩródáowego. Co z tym zrobiü? PrzepaĞü dzielącą ant i IDE moĪna nieco zmniejszyü przez uĪywanie Ğrodowiska IDE zinte- growanego z ant. DziĊki temu nadal moĪna pracowaü z ulubionym Ğrodowiskiem programi- stycznym, które wspiera proces pisania kodu Ĩródáowego, a jednoczeĞnie jednym klikniĊ- ciem myszy wywoáuje skrypty ant odpowiadające za skompilowanie i wdroĪenie aplikacji. Takiego rozwiązania moĪna uĪywaü nawet w Ğrodowiskach, które z ant nie są zintegrowane (choü wiĊkszoĞü wspóáczesnych Ğrodowisk taką integracjĊ juĪ posiada), lecz bĊdzie to wyma- gaü przeáączania siĊ miĊdzy wierszem poleceĔ a Ğrodowiskiem programistycznym. Takie podejĞcie doskonale sprawdza siĊ w prawdziwych projektach. ProgramiĞci uĪywają ulubionych IDE, w których pisanie kodu jest bardziej efektywne, zaĞ sam projekt nie jest naraĪony na powstawanie niespójnoĞci w trakcie wdroĪenia, poniewaĪ kompilacja i wdro- Īenie są przeprowadzane przez ten sam przenoĞny skrypt ant. UczestniczyliĞmy w projektach, w których poszczególni programiĞci naleĪący do zespoáu projektowego tworzącego jedną aplikacjĊ internetową korzystali z róĪnych IDE; niektórzy z nich pracowali nawet w odmien- nych systemach operacyjnych. Proces wdraĪania aplikacji natomiast pozostawaá spójny, a sami programiĞci byli zadowoleni z moĪliwoĞci uĪywania swoich ulubionych narzĊdzi progra- mistycznych. A czyĪ zadowolenie programisty nie jest najwaĪniejsze?1.5. Umieszczanie aplikacji internetowych w plikach WAR Pliki archiwum WWW (ang. Web archive — WAR) doskonale nadają siĊ do áączenia w poje- dynczym archiwum caáych aplikacji internetowych. Jeden duĪy plik z aplikacją zastĊpujący wiele maáych plików znacznie áatwiej jest przenosiü z serwera na serwer. Archiwum WAR jest tak naprawdĊ plikiem JAR z rozszerzeniem .war i tworzy siĊ go zwykáym poleceniem jar. Aby na przykáad umieĞciü caáą aplikacjĊ aplikacja_internetowa w pliku WAR o nazwie aplikacja_internetowa.war, naleĪy przejĞü do katalogu aplikacja_internetowa i wykonaü nastĊpujące polecenie:
  25. 25. 32 Core Java Servlets i JavaServer Pages jar cvf aplikacja_internetowa.war * Pliku WAR nie áączy z poleceniem jar Īadna specjalna zaleĪnoĞü. Polecenie jar jest tak naprawdĊ jednym z wielu narzĊdzi, dziĊki któremu moĪna tworzyü archiwa plików. Takie samo archiwum moĪna utworzyü na przykáad przy uĪyciu programu WinZip (albo tar w systemie UNIX). Wystarczy w tym celu wskazaü nazwĊ pliku docelowego z rozszerzeniem .war zamiast rozszerzenia .zip. OczywiĞcie, nic nie stoi na przeszkodzie, by w trakcie tworzenia archiwów WAR wykorzy- staü inne opcje narzĊdzia jar (na przykáad cyfrowo podpisywaü klasy), tak samo jak wobec standardowych plików JAR. WiĊcej szczegóáowych informacji na ten temat moĪna znaleĨü pod adresem http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/jar.html (dotyczy sys- temu Windows) oraz http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/jar.html (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 uĪyty zostanie serwer Tomcat, lecz opisywane czynnoĞci bĊdą przebiegaü podobnie równieĪ w przypadku wykorzystania innych serwerów. WiĊcej informacji na ten temat przed- stawiono w punkcie 1.3, „Rejestrowanie aplikacji internetowych na serwerze”. W celu utworzenia aplikacji naleĪy wykonaü nastĊpujące kroki: 1. Z ftp://ftp.helion.pl/przyklady/jsp2w2.zip pobraü aplikacjĊ app-blank i zmieniü 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. UmieĞciü plik TestServlet.java w katalogu testApp/WEB-INF/classes/coreservlets. 5. Skompilowaü plik TestServlet.java. 6. Zadeklarowaü w pliku web.xml klasĊ TestServlet.class oraz adres URL, który bĊdzie ją wywoáywaü. 7. Skopiowaü aplikacjĊ testApp do katalogu katalog_tomcat/webapps. 8. Uruchomiü serwer Tomcat. 9. Wywoáaü aplikacjĊ testApp, wpisując adres URL w postaci http://localhost/testApp/nazwaZasobu. Wymienione czynnoĞci zostaną szczegóáowo opisane w kolejnych sekcjach.
  26. 26. RozdziaÄ 1. Q UÑywanie i wdraÑanie aplikacji internetowych 33Pobranie 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 kaĪdej aplikacji internetowej zgodnej ze specyfikacją J2EE. Archiwum to zawiera takĪe wyjĞciową wersjĊ deskryptora wdro- Īenia web.xml, w którym znajduje siĊ odwzorowanie wyáączające wywoáywacz serwletu. WiĊ- cej na temat odwzorowywania serwletów powiemy przy okazji odwzorowywania 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Ī pamiĊtaü, by katalog testApp trafiá do katalogu, który bĊdzie siĊ znajdowaá poza strukturą katalogów serwera Tomcat.Pobranie plików test.html, test.jsp oraz TestServlet.java Podobnie jak w poprzednim kroku, wymagane pliki moĪna pobraü z ftp://ftp.helion.pl/ ´przyklady/jsp2w2.zip. Pliki moĪna pobraü oddzielnie jeden po drugim bądĨ teĪ w postaci po- jedynczego archiwum testAppFiles.zip, a nastĊpnie rozpakowaü je w wybranym katalogu.Dodanie plików test.html i test.jsp do aplikacji internetowej testApp Pliki test.html i test.jsp naleĪy umieĞciü w katalogu testApp, a nastĊpnie utworzyü w 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 zwracający adres URL, z którego wywoáano stronĊ. Na listingach 1.1 i 1.2 przedstawiono kompletne kody Ĩródáowe obydwóch plików.Listing 1.1. test.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD><TITLE>Test HTML</TITLE></HEAD> <BODY BGCOLOR="#FDF5E6"> <H1>Test HTML</H1> Witaj. </BODY></HTML>Listing 1.2. test.jsp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD><TITLE>Test JSP</TITLE></HEAD> <BODY BGCOLOR="#FDF5E6"> <H1>Test JSP</H1> Uľyto nastúpujæcego adresu URL: <%= request.getRequestURL() %> </BODY></HTML>
  27. 27. 34 Core Java Servlets i JavaServer PagesUmieszczenie pliku TestServlet.java w katalogutestApp/WEB-INF/classes/coreservlets W pliku TestServlet.java znajduje siĊ deklaracja, wedáug której serwlet naleĪy do pakietu coreservlets. Zatem plik TestServlet.java musi znaleĨü siĊ w tym pakiecie, zanim bĊdzie moĪna go skompilowaü. Podobnie jak plik test.jsp, plik TestServlet.class zawiera kod zwra- cający adres URL, za pomocą którego nastąpiáo wywoáanie serwletu. Peány kod Ĩródáowy 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" + "Uľyto nastúpujæcego adresu URL: " + request.getRequestURL() + "n" + "</BODY></HTML>"); } }Kompilacja pliku TestServlet.java NaleĪy pamiĊtaü, by w zmiennej Ğrodowiskowej CLASSPATH wskazaü interfejs programistyczny (API) serwletów. Serwer Tomcat udostĊpnia interfejs w postaci pliku servlet-api.jar, znajdu- jącym siĊ w katalogu katalog_tomcat/common/lib. W systemie Windows zmienną CLASSPATH moĪna zdefiniowaü w wierszu poleceĔ systemu operacyjnego, przez wykonanie nastĊpującego polecenia: set CLASSPATH=katalog_tomcatcommonlibservlet-api.jar Natomiast w Ğrodowiskach zgodnych z UNIX/Linux zmienną CLASSPATH moĪna zdefiniowaü przy uĪyciu konsoli, przez wykonanie polecenia o nastĊpującej treĞci: CLASSPATH=katalog_tomcat/common/lib/servlet-api.jar
  28. 28. RozdziaÄ 1. Q UÑywanie i wdraÑanie aplikacji internetowych 35 Po odpowiednim zdefiniowaniu zmiennej CLASSPATH moĪna juĪ skompilowaü plik TestServlet. ´java. W tym celu naleĪy przejĞü do katalogu testApp/WEB-INF/classes/coreservlets i wpi- saü nastĊpujące polecenie: javac TestServlet.java Gdy kompilacja dobiegnie koĔca, w katalogu testApp/WEB-INF/classes/coreservlets powinna pojawiü siĊ klasa TestServlet.class.Zadeklarowanie w pliku web.xml klasy TestServlet.classoraz adresu URL, który j¾ wywoÄuje NaleĪy przejĞü do katalogu testApp/WEB-INF i otworzyü w ulubionym edytorze jĊzyka XML (Extensible Markup Language) albo edytorze tekstu plik web.xml. Aby zadeklarowaü klasĊ TestServlet.class naleĪy bezpoĞrednio za komentarzem <!-- Tutaj naleľy umieħciè wđasne wpisy --> umieĞciü poniĪsze wiersze kodu: <servlet> <servlet-name>Test</servlet-name> <servlet-class>coreservlets.TestServlet</servlet-class> </servlet> Przedstawiony fragment zawiera deklaracjĊ serwletu o nazwie Test, który reprezentuje kla- sĊ TestServlet.class. Warto zwróciü uwagĊ, Īe element <servlet-class> wskazuje w peáną nazwĊ klasy serwletu w postaci nazwaPakietu.nazwaKlasy (bez rozszerzenia .class). W nastĊpnym kroku trzeba wskazaü serwerowi Tomcat adresy URL, które mają wywoáywaü serwlet Test. W tym celu w pliku web.xml naleĪy bezpoĞrednio po zamkniĊciu elementu </servlet> umieĞciü nastĊpujące wiersze kodu: <servlet-mapping> <servlet-name>Test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> PowyĪsze wiersze wskazują serwerowi Tomcat, Īe gdy klient wywoáa aplikacjĊ internetową testApp przy uĪyciu adresu URL w postaci http://komputer/testApp/test, powinien zostaü wywoáany wczeĞniej 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 wyáącza wywoáywacz serwletu. --> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

×