Pisz¹c tê ksi¹¿kê, przyj¹³em za³o¿enie, ¿e ty i twoi klienci stosujecie co najmniej Javê
1.1 (stanie siê ono ca³kiem uzasadnione w roku 2001). Zwykle u¿ywam Javy 1.1
z funkcjami takimi jak reader i writer oraz nowego modelu obs³ugi zdarzeñ bez dal-
szych wyjaœnieñ.
Java 2 idzie nieco dalej. Prawie ca³¹ tê ksi¹¿kê napisa³em w Javie 2, gdy¿ w syste-
mach Windows i Solaris jest ona dostêpna ju¿ od ponad roku; nie ma jeszcze jednak
œrodowiska programistycznego ani wykonawczego dla Macintoshy. Chocia¿ Java 2
stopniowo wkracza na wiêkszoœæ platform uniksowych, w tym na Linuksa, jest pra-
wie pewne, ¿e ani Apple, ani Sun nie bêd¹ przenosiæ ¿adnej z wersji Javy 2 na system
MacOS 9.x ani wczeœniejsze, co praktycznie dla 100% obecnie zainstalowanych Ma-
cintoshy oznacza brak mo¿liwoœci dalszego rozwoju. (Prawdopodobnie pojawi siê
Java 2 dla systemu MacOS X w 2001 roku.). Dla jêzyka nie jest wcale dobre to, ¿e wy-
maga „pisania raz, uruchamiania gdziekolwiek". Co wiêcej wirtualna maszyna Javy
firmy Microsoft obs³uguje tylko Javê 1.1 i nie zanosi siê na to, aby pod tym wzglêdem
coœ uleg³o poprawie w najbli¿szej przysz³oœci (byæ mo¿e nic dopuszcz¹ do tego roz-
strzygniêcia ró¿nych sporów prawnych). Poza tym prawie wszystkie zainstalowane
obecnie przegl¹darki, w tym Internet Explorer 5.5 i jej wczeœniejsze wersje oraz
Netscape Navigator 4.7 i jej wczeœniejsze wersje, obs³uguj¹ tylko Javê 1.1. Tak¿e au-
torzy apletów w zasadzie s¹ ograniczeni do Javy 1.1 z powodu mo¿liwoœci swoich
klientów. Dlatego wygl¹da na to, ¿e przynajmniej w najbli¿szym czasie Java 2 ogra-
niczy siê do pojedynczych aplikacji w systemach Windows i Unix. Nic rezygno-
wa³em z korzystania z funkcji typowych dla Javy 2 tam, gd/,ie by³o to naprawdê
przydatne lub w³aœciwe - na przyk³ad przy kodowaniu ASCII dla inputStre-
amReader oraz w programie keytool- ale wyraŸnie to zaznaczy³em. Odnotowa³em
przypadki, w których istniej¹ dla tych funkcji bezpieczne odpowiedniki w Javie l .1.
Jeœli jakaœ metoda lub klasa pojawi³a siê dopiero od Javy l .2 lub jej nowszych wersji,
zosta³o to zaznaczone za pomoc¹ komentarza umieszczonego po jej deklaracji. Oto
przyk³ad:
public void setTimeToLive (int ttl) throws IOException // Java 1.2
Aby jeszcze bardziej zam¹ciæ, powiem, i¿ istnieje wiele wersji Javy 2. W chwili, w której
zosta³a ukoñczona ta ksi¹¿ka, obowi¹zywa³a Java™ 2 SDK, Standard lidition,
XVIII
Wstêp
J i - - •
•—i—"T
vi.2.2. Przynajmniej tak by³a nazywana. Zdaje siê, ¿e Sun zmienia nazwy pod
wp³ywem rad konsultantów od marketingu. W poprzednim wcieleniu by³a ona zna-
na po prostu jako JDK. Sun udostêpni³ tak¿e J2EE™ (ang. ]ava™ 2 Platform, Enterprise
Edition) oraz J2ME™ (ang. }ava™ 2 Platform, Micro Edition). J2EE jest zestawem funk-
cji edycji standardowej poszerzonym o funkcje, takie jak interfejs nazw i katalogów
Javy (ang. ]ava Naming and Directory Interface) oraz JavaMail API, które zapewnia
API wysokopoziomowe dla aplikacji rozproszonych. Niektóre z tych dodatkowych
API s¹ tak¿e dostêpne w postaci rozszerzeñ do edycji standardowej Javy i w taki
sposób bêd¹ tu traktowane. J2ME jest podzestawem edycji standardowej ukierunko-
wanym na telefony komórkowe, dekodery satelitarne i inne pamiêci, procesory oraz
urz¹dzenia do prezentacji grafiki. Usuniêto z niej API graficznego interfejsu u¿yt-
kownika, które programiœci tradycyjnie wi¹zali z Jav¹, a nieoczekiwanie pozo-
stawiono prawie wszystkie podstawowe klasy sieciowe oraz klasy wejœcia i wyjœcia,
które zosta³y omówione w tej ksi¹¿ce. Poza tym, kiedy ksi¹¿ka by³a napisana w
po³owie, Sun wypuœci³ wersjê beta Javy™ 2 SDK, Standard Edition, vi .3. Ma ona kil-
ka dodanych elementów sieciowego API, a wiêkszoœæ istniej¹cego API zosta³a nie-
tkniêta. W ci¹gu nastêpnych kilku miesiêcy Sun opublikowa³ kolejne wersje beta
JDK 1.3. Ostateczne poprawki zosta³y uwzglêdnione w tej ksi¹¿ce, a ca³y kod zosta³
przetestowany z koñcow¹ wersj¹ JDK 1.3.
Prawdê mówi¹c, problem z tymi wszystkimi wersjami i edycjami nie polega³ na pi-
saniu od nowa fragmentów, które o nich traktowa³y. Najtrudniej by³o okreœliæ, jak
nale¿y je identyfikowaæ w tekœcie. Po prostu nie zgadzam siê na pisanie Java™ 2
SDK, Standard Edition, vi .3 ani nawet Java 2 1.3 za ka¿dym razem, gdy chcê zazna-
czyæ now¹ funkcjê z ostatniego wydania Javy. Dlatego wiêc przyj¹³em nastêpuj¹c¹
konwencjê:
• Java l .0 oznacza wszystkie wersje Javy, które mniej wiêcej maj¹ zaimplementowa-
nc API Javy, zdefiniowane w Java Dcvelopment Kit 1.0.2 firmy Sun.
• java 1.1 oznacza wszystkie wersje Javy, które mniej wiêcej maj¹ znimplemcnto-
wane API Javy, zdefiniowane w dowolnej wersji Java Development Kit l .1 .x firmy
Sun. Ta definicja obejmuje produkty innych firm, takie jak MJR (ang. Macintosli
Runtime for Java) 2.0, 2.1 oraz 2.2.
• Java l .2 oznacza wszystkie wersje Javy, które mniej wiêcej maj¹ zaimplemento-
wane API Javy, zdefiniowane w edycji standardowej Java Development Kit l .2.x
firmy Sun. Nic zaliczaj¹ siê tu uzupe³nienia J2EE, które bêd¹ traktowane jako roz-
szerzenia standardu. Zazwyczaj nale¿¹ one do pakietu j,wax, a nie pakietów
java.
• Java 1.3 oznacza wszystkie wersje Javy, które mniej wiêcej maj¹ zaimplemento-
wane API Javy, zdefiniowane w edycji standardowej Java Development Kit l .3 fir-
my Sun.
Krótko mówi¹c, ta ksi¹¿ka opisuje istniej¹cy stan rzeczy dla programowania siecio-
wego w Javic 2, które tak naprawdê niezbyt ró¿ni siê od programowania sieciowego
w Javic 1.1. Uaktualnienia i poprawki zamieszczê w mojej witrynie pod adresem
Uwagi na temat przyk³adów
XIX
http://metalab.unc.edu/javafaci/books/jnp2e/, gdy zostan¹ udostêpnione dalsze informa-
cje. Jednak¿e sieciowe API wydaj¹ siê doœæ niezmienne. ;
Bezpieczeñstwo " 4 ;
Nie wiem, czy mo¿na wskazaæ najczêœciej zadawane pytanie na temat pierwszego
wydania ksi¹¿ki Java, Programowanie sieciowe, ale na pewno istnia³a najczêœciej udzie-
lana odpowiedŸ, która odnosi siê równie¿ do tej edycji. Mój b³¹d w pierwszym wy-
daniu polega³ na ukryciu tej odpowiedzi w koñcowej czêœci rozdzia³u, którego wiêk-
szoœæ nie czyta³a. A poniewa¿ w zasadzie to samo stwierdzenie powinno stanowiæ
odpowiedŸ na podobn¹ liczbê pytañ od czytelników tej ksi¹¿ki, to chcê j¹ podaæ na
samym pocz¹tku (a potem wielokrotnie powtarzaæ w ca³ej ksi¹¿ce ze wzglêdu na
czytelników, którzy zazwyczaj pomijaj¹ wstêpy): Zabezpieczenia ]avy nie dopuszczaj¹,
aby prawie wszystkie przyk³ady i metody omawiane w tej ksi¹¿ce dzia³a³y w aplecie.
Ta ksi¹¿ka dotyczy przede wszystkim aplikacji. Niepewnym apletom Javy wolno
komunikowaæ siê poprzez Internet tylko z tym wêz³em sieci, z którego pochodz¹.
Dotyczy to równie¿ wêz³a, na którym dzia³aj¹. Problem nie zawsze jest oczywisty -