home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2001 November / MICD2001_11_NR1.iso / Www / WebArea / index.php@id=204 < prev    next >
Text File  |  2001-09-26  |  35KB  |  398 lines

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4//PL">
  2. <html>
  3. <head>
  4. <title>WEB-AREA.org - serwis webmaster≤w</title>
  5. <link href="style.css" rel="stylesheet" type="text/css">
  6. <LINK REL="SHORTCUT ICON" HREF="favicon.ico"> 
  7. <meta http-equiv="Creation-date" content="28.08.2001">
  8. <meta http-equiv="Reply-to" content="web-area@web-area.org">
  9. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
  10. <meta name="author" content="Jakub & Jan Filipowscy">
  11. <meta name="description" content="Serwis webmasterow. Znajdziesz tu kilka kursow popularnych internetowych jezykow programowania takich jak: HTML, CSS, WML, SGML, XML, PHP, Perl i Java. Zamiescilismy tu rowniez wiele skryptow JavaScript, PHP i CGI. Przeczytac mozna kilka artykulow i sciagnac kilka szablonow. Dla poczatkujacych jest dzial BeginnerZone. ">
  12. <meta http-equiv="keywords" content="WEB-AREA, web-area, web area, web, area, WEB-AREA.org, web-area.org, webara.org,strefa webmastera, strefa, webmastera, webmaster, WEBMASTER, Webmaster, tworzenie stron www, www, strona www, internet, world wide web, design, designerswo, designer, programowanie, jΩzyki, jΩzyk programowania, php, cgi, html, java, javascript, sgml, wml, PHP, CGI, HTML, Java, JavaScript, SGML, WML, wap, standarty, skrypty php, skrypty cgi, applety java, aplety, aplety java, aplety javy, applety javy, javascripty, JavaScripty, skrypty javy, publikowanie witryny, witryna, tworzenie witryn, tworzenie sklep≤w internetowych, edytory html, tekstowe edytory html, projekt syf, szablony, Szablony, free, darmowe, zadarmo, subskrypcja, lista mailingowa, mailing list, lista subskrypcyjna, bannery, formularze, liczniki, ksiΩgi go╢ci, linki, fora, pliki i operacje na nich, statystyki, wyszukiwarki, rankingi, darmowe skrypty, Jakub Filipowski, Jan Filipowski, katalog, Katalog stron zwi▒zanych z tematyk▒ webmasterstwa, webmasterswo, magazyn www, style, CSS, XML, ASP, jΩzyki skryptowe, generatory, anarchizm">
  13. </head>
  14. <body>
  15.  
  16.  
  17. <div align="left">
  18. <table border="0" cellpadding="0" cellspacing="0" width="770">
  19. <tr>
  20. <td width="770" valign="top" colspan="3">
  21.  
  22.     <table border="0" cellpadding="0" cellspacing="0" width="770">
  23.     <tr>
  24.     <td width="166" valign="top"><a href="index.php"><img src="img/logo.gif" border="0" width="166" height="70" alt="WEB-AREA.org - serwis webmaster≤w"></a></td>
  25.     <td width="604" height="70" background="img/gora.gif" align="right"><iframe src="banner.php" MARGINWIDTH="0" MARGINHEIGHT="0" HSPACE="0" VSPACE="0" FRAMEBORDER="0" SCROLLING="NO" WIDTH="468" HEIGHT="60">
  26. </iframe></td>
  27.     </tr></table>
  28.  
  29. </td>
  30. </tr><tr>
  31. <td width="770" valign="top" colspan="3">
  32.     <table border="0" cellpadding="1" cellspacing="0" width="770">
  33.         <tr><form method="post" action="szukaj.php">
  34.         <td width="260">    <input type="text" name="zapytanie" size="15"> <input type="submit" value="SZUKAJ"> <span class="m"><a href="index.php@url=redakcja_2Fszukaj">Jak szukaµ?</a></span></td></form>
  35.         <td width="510">
  36.         
  37.         <p align="center">
  38.         <a href="index.php@id=206" class="gora">Konkurs</a>   
  39.         <a href="subskrypcja/nowa.php" class="gora">Za│≤┐ subskrypcjΩ</a>    
  40.         <a href="index.php@id=128" class="gora">Katalog</a>    
  41.         <a href="forum.php" class="gora">Forum</a>    
  42.         <a href="index.php@id=15" class="gora">BeginnerZone</a>
  43.         
  44.         </td>
  45.     </tr></table>
  46. </td>
  47. </tr>
  48. <tr>
  49. <td width="142" valign="top">
  50.     
  51.     <br>
  52.     <table border="0" cellpadding="0" cellspacing="0" width="142">
  53.     <tr>
  54.     <td width="142" valign="top"><img src="img/menu.gif" border="0" width="142" height="13" alt="MENU"></td>
  55.     </tr>
  56.     <tr>
  57.     <td width="142" valign="top" background="img/okno1.gif">
  58.     <img src="img/s.gif" width="9" height="8"><b class="menu1">KURSY</b><br>
  59.       - <a href="index.php@id=50" class="menu">HTML</a><br>
  60.       - <a href="index.php@id=40" class="menu">CSS</a><br>
  61.       - <a href="index.php@id=62" class="menu">Java</a><br>
  62.       - <a href="index.php@id=145" class="menu">PHP</a><br>
  63.       - <a href="index.php@id=39" class="menu">CGI</a><br>
  64.       - <a href="index.php@id=5" class="menu">ASP</a><br>
  65.       - <a href="index.php@id=182" class="menu">WML</a><br>
  66.       - <a href="index.php@id=190" class="menu">XML</a><br>
  67.       - <a href="index.php@id=159" class="menu">SGML</a><br>
  68.  
  69.     <img src="img/s.gif" width="9" height="8"><b class="menu1">SKRYPTY</b><br>
  70.       - <a href="index.php@id=78" class="menu">JavaScript</a><br>
  71.       - <a href="index.php@id=135" class="menu">PHP</a><br>
  72.       - <a href="index.php@id=30" class="menu">CGI</a><br>
  73.  
  74.     <img src="img/s.gif" width="9" height="8"><b class="menu1">INNE</b><br>
  75.       - <a href="index.php@id=59" class="menu">Szablony</a><br>
  76.       - <a href="forum.php" class="menu">Forum</a><br>
  77.       - <a href="index.php@id=61" class="menu">Webmasterska lista</a><br>
  78.       - <a href="index.php@id=128" class="menu">Katalog</a><br>
  79.       - <a href="index.php@id=15" class="menu">BeginnerZone</a><br>
  80.       - <a href="index.php@id=206" class="menu">Konkurs</a><br>
  81.     
  82.     <img src="img/s.gif" width="9" height="8"><b class="menu1">SUBSKRYPCJA</b><br>
  83.       - <a href="subskrypcja/nowa.php" class="menu">Za│≤┐</a><br>
  84.       - <a href="subskrypcja/admin.php" class="menu">Administracja</a><br>
  85.  
  86.     <img src="img/s.gif" width="9" height="8"><b class="menu1">REDAKCJA</b><br>
  87.       - <a href="index.php@id=156" class="menu">Sk│ad</a><br>
  88.       - <a href="index.php@id=157" class="menu">Wsp≤│praca</a><br>
  89.       - <a href="index.php@id=158" class="menu">Reklama</a></td>
  90.     </tr>
  91.     <tr>
  92.     <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  93.     </tr></table>
  94.  
  95. </td>
  96. <td width="486" valign="top"><br>
  97.     <div align="center">
  98.     <table border="0" cellpadding="0" cellspacing="0" width="460">
  99.     <tr>
  100.     <td width="460" valign="top"><span class="nag">Wprowadzenie do Javy</span>
  101. <H2>WstΩp i spojrzenie od strony u┐ytkownika</H2>
  102. <P ALIGN="justify">Aby prawid│owo zrozumieµ ten kurs, zalecane jest znanie podstaw programowania w kt≤rym╢ z jΩzyk≤w obiektowych.</P>
  103. <P ALIGN="justify">Po wprowadzeniu jΩzyka Java (znanego r≤wnie┐ jako Java C) ╢wiat stron internetowych prze┐y│ istotn▒ zmianΩ jako╢ciow▒. Java zosta│a pocz▒tkowo zaprojektowana do programowania zintegrowancyh aplikacji dla komputer≤w pok│adowych (np. w samochodzie), ale szybko sta│a siΩ standardowym jΩzykiem u┐ywanym do aktywizacji stron WWW. DziΩki zastosowaniu Javy, statyczne strony HTML zosta│y przeobra┐one w interaktywne medium, z kt≤rymi u┐ytkownicy mog▒ pracowaµ w spos≤b dialogowy.</P>
  104. <P ALIGN="justify">Java, opracowana przez Sun Microsystems i wprowadzona w po│owie lat 90., zmienia spos≤b funkcjonowania stron WWW. Java jest jΩzykiem obiektowym, podobnym do C i C++ (st▒d zwana r≤wnie┐ Jav▒ C). Zamiast u┐ywania przegl▒darek typu Web Browsers, kt≤re po wczytaniu skryptu przetwarzaj▒ dane do postaci graficznej i wyprowadzaj▒ na ekran, program Javy wykonuje siΩ sam. Przegl▒darka, odbieraj▒c skrypt strony, odbiera tak┐e kod programu w Javie, ale sama przegl▒darka nie dokonuje interpretacji tego kodu.</P>
  105. <P ALIGN="justify">W jΩzyku Java mo┐emy pisaµ dwa rodzaje program≤w:</P>
  106. <UL>
  107. <LI>Applety - niewielkie programy przesy│ane │▒cznie ze skryptami HTML i wykonuj▒ce siΩ na komputerze u┐ytkownika
  108. <LI>Aplikacje - pe│ne, niezale┐ne programy, kt≤re nie wymagaj▒ do swojego wykonania u┐ycia przegl▒darki ani otoczenia HTML
  109. </UL>
  110. <P ALIGN="justify">WiΩkszo╢µ program≤w w Javie pisze siΩ w formie applet≤w. Podstawowym zastosowaniem Javy jest umieszczenie kodu wykonywalnego w obrΩbie strony WWW w celu jej uaktywnienia i uatrakcyjnienia. Tutaj zajmiemy siΩ appletami, gdy┐ aplikacje nie s│u┐▒ celom internetowym, ale s▒ programami, kt≤re r≤wnie dobrze mo┐na napisaµ w C, Delphi itd.</P>
  111. <P ALIGN="justify">Gdy u┐ytkownik wpisze adres URL przywo│uj▒cy stronΩ pokazan▒ schematycznie na rys.1, przegl▒darka u┐ytkownika wczytuje kod HTML, formatuje stronΩ zgodnie z etykietami formatuj▒cymi HTML, wy╢wietla sformatowany tekst, osadzon▒ grafikΩ, oraz │aduje do pamiΩci komputera u┐ytkownika wykonywaln▒ zawarto╢µ w postaci applet≤w, tak, ┐e zawarto╢µ ta mo┐e siΩ wykonaµ. Applet mo┐e wykonaµ siΩ natychmiast po wczytaniu, lub po wyst▒pieniu jakiego╢ przewidzianego zdarzenia.</P>
  112. <CENTER><IMG SRC="artykuly/rys1.gif" BORDER=0 ALT="Strona HTML dostarcza wykonywalne kody Javy"><BR>rys.1</CENTER>
  113. <P ALIGN="justify">Sekcja zawieraj▒ca kod appletu Javy w skrypcie HTML mie╢ci siΩ miΩdzy znacznikami <APPLET> </APPLET>. Applety Javy mog▒ byµ uruchomione tylko wtedy, gdy pozwala na to wersja przegl▒darki. Musimy dysponowaµ MS Internet Explorer 3.0, Netscape Navigator 2.0 lub nowszymi.</P>
  114. <P ALIGN="justify">Ani metoda uruchamiania applet≤w, ani sam fakt ich dzia│ania nie zawsze musz▒ byµ dla u┐ytkownika oczywiste. Czasami mo┐e siΩ wydawaµ, ┐e strona jest "zajΩta", podczas gdy to applet wykonuje jak▒╢ animacjΩ. Og≤lnie, prΩdko╢µ animacji w wykonaniu applet≤w Javy powinna byµ znacznie wiΩksza, gdy┐ wykonuj▒ siΩ one bezpo╢rednio na komputerze u┐ytkownika i prΩdko╢µ ich dzia│ania nie jest zale┐na od wydajno╢ci │▒cza ani prΩdko╢ci transmisji.</P>
  115.  
  116. <H2>Programy niezale┐ne od platformy sprzΩtowo-programowej</H2>
  117. <P ALIGN="justify">Zobaczmy teraz, jak wygl▒da strona HTML z osadzonymi appletami Javy od strony programisty. Gdy piszemy kod przeznaczony dla strony WWW w jΩzyku Java, chcieliby╢my, aby kod ten poprawnie zadzia│a│ na komputerze zdalnego u┐ytkownika, i to bez wzglΩdu na to, jaki to komputer i system operacyjny.</P>
  118. <P ALIGN="justify">O ile wiΩkszo╢µ kompilator≤w, jak kompilatory C, tworz▒ na podstawie tekstu ╝r≤d│owego, zale┐ny od platformy sprzΩtowej i programowej, binarny kod wynikowy wykonywalny, o tyle Java dokonuje tylko czΩ╢ciowej translacji kodu. Wszelkie kompilatory Javy tworz▒ niezale┐ny sprzΩtowo kod wynikowy, w postaci specjalnego modu│u. To po╢rednie stadium jest nazywane ByteCode (kod wynikowy). Oprogramowanie po│▒czone z przegl▒dark▒ WWW, wykonuje na komputerze u┐ytkownika ko±cowe zinterpretowanie kodu, w wyniku czego powstaje wykonywalny applet.</P>
  119. <P ALIGN="justify">»aden komputer nie potrafi bezpo╢rednio zinterpretowaµ i wykonaµ kodu ByteCode, przeznaczonego dla tzw. maszyny wirtualnej, ale odpowiednie przegl▒darki WWW potrafi▒ dokonaµ takiego "ko±cowego t│umaczenia". Innymi s│owy, zdalny serwer "posiada" kod Javy. ByteCode, przes│any na peceta z systemu operacyjnego, "dekoduje" ten kod przy pomocy dodatkowego oprogramowania, kt≤re zawiera np. Netscape Navigator, a stacja robocza z Unixem u┐ywa do tego samego celu przegl▒darki np. HotJava. Kod zostaje zamieniony na instrukcje w kodzie maszynowym, kt≤re dany komputer rozumie i potrafi wykonaµ (rys.2).</P>
  120. <P ALIGN="justify">Kompilator Javy tworzy kod wynikowy (ByteCode) dla tzw. maszyny wirtualnej (czyli teoretycznego komputera, kt≤rego fizycznie nie ma). Jest to kod niezale┐ny sprzΩtowo. Kod ten zostaje przes│any do strony WWW, gdzie reprezentuje w formie zakodowanej reprezentacji appletu Javy. Gdy u┐ytkownik za┐▒da przes│ania strony WWW, przegl▒darka wczytuje kod ByteCode i automatycznie dokonuje jego interpretacji, zamieniaj▒c go na kody zrozumia│e dla komputera u┐ytkownika. Wszystko to odbywa siΩ automatycznie, bez udzia│u i poza ╢wiadomo╢ci▒ u┐ytkownika. Po wczytaniu strony, u┐ytkownik widzi j▒ na ekranie i ewentualnie ogl▒da tak┐e dzia│aj▒cy applet (je╢li ten uruchamia siΩ samoczynnie).</P>
  121. <CENTER><IMG SRC="artykuly/rys2.gif" BORDER=0 ALT="Sesja z kompilatorem Javy ko±czy siΩ na napisaniu tekstu ╝r≤d│owego i jego kompilacji do postaci ByteCode'u, kt≤ry jest przesy│any i interpretowany na komputerze u┐ytkownika"><BR>rys.2</CENTER>
  122. <P ALIGN="justify">Niekt≤re applety uruchamiaj▒ siΩ automatycznie, inne dopiero w reakcji na zdarzenie wywo│ane przez u┐ytkownika, np. klikniΩcie myszk▒. Dla programist≤w pisz▒cych applety Javy istotne jest, aby pamiΩtaµ, ┐e u┐ytkownik "nie widzi" appletu, wiΩc nie mo┐e ╢wiadomie kontrolowaµ jego uruchamiania ani dzia│ania bez woli i ╢wiadomych zabieg≤w ze strony webmastera. Po zako±czeniu sesji ze zdalnym serwerem danej strony, lub po zako±czeniu wykonywania appletu, jego kod zostaje usuniΩty z komputera u┐ytkownika.</P>
  123. <P ALIGN="justify">Java zapewnia najkt≤tszy mo┐liwy czas reakcji strony WWW na dzia│ania u┐ytkownika. Choµ u┐ytkownik nadal musi czekaµ, a┐ strona wraz z ByteCode'm appletu zostanie wczytana do jego komputera, wykonanie appletu bΩdzie ju┐ nastΩpowaµ z maksymaln▒ prΩdko╢ci▒, j▒k▒ tylko w stanie jest zapewniµ komputer u┐ytkownika. U┐ytkownik nie musi ╢wiadomie kontrolowaµ i czekaµ na za│adowanie wykonywalnego kodu. Wszystkie inne formy dialogu z u┐ytkownikiem s▒ wolniejsze, poniewa┐ zale┐ne od czas≤w transmisjii i natΩ┐enia ruchu w sieci.</P>
  124.  
  125. <H2>Zagadnienia bezpiecze±stwa</H2>
  126. <P ALIGN="justify">Zawsze, gdy piszemy internetowe aplikacje, powinni╢my przede wszystkim braµ pod uwagΩ zagadnienia bezpiecze±stwa. Je╢li webmaster nie zadba o w│a╢ciw▒ ochronΩ, applety bΩd▒ bardzo podatne na niebezpiecze±stwa. Gdy kto╢ odwiedza strony WWW, nie ma nigdy pewno╢ci, czy jaki╢ applet nie robi "po cihu" czego╢ brzydkiego z jego pamiΩci▒ albo dyskiem. Na szczΩ╢cie Sun zaprojektowa│ JavΩ wraz z zabezpieczeniami typowymi dla jΩzyk≤w przeznaczonych do programowania sieciowego. DziΩki temu, zabezpieczenia s▒ do jΩzyka wprowadzone "z definicji", przy czym s▒ to zabezpieczenia o charakterze obustronnym: i dla u┐ytkownika, i dla programisty. WymiΩniΩ tu tylko niekt≤re rodzaje zabezpiecze± wbudowane do Javy:</P>
  127. <UL>
  128. <LI>Applet Javy nie mo┐e ingerowaµ w obszary pamiΩci u┐ytkownika, kt≤re nie zosta│y mu udostΩpnione przez system operacyjny u┐ytkownika.
  129. <LI>Applet Javy nie mo┐e tworzyµ, czytaµ, zmieniaµ nazwy, usuwaµ, kopiowaµ, zapisywaµ plik≤w w systemie dyskowym u┐ytkownika.
  130. <LI>Applet Javy nie mo┐e │▒czyµ siΩ z innymi komputerami po│▒czonymi sieci▒ lokaln▒ z komputerem u┐ytkownika.
  131. <LI>Applet Javy nie mo┐e wywo│ywaµ funkcji systemowych w systemie operacyjnym u┐ytkownika.
  132. </UL>
  133. <P ALIGN="justify">Mo┐na lokalnie uruchamiaµ applety za po╢rednictwem w│asnej przegl▒darki, poprzez za│adowanie z w│asnego lub sieciowego dysku. W takim przypadku applety maj▒ prawo ingerencji w lokalny system plik≤w dyskowych. Dodatkowo, niekt≤re przegl▒darki pozwalaj▒ na okre╢lenie przez u┐ytkownika listy plik≤w w systemie, do kt≤ych mo┐e mieµ dostΩp applet Javy.</P>
  134. <P ALIGN="justify">Jak widaµ, projektanci Javy rozumieli konieczno╢µ uwzglΩdnienia najbardziej oczywistych zabezpiecze± przed niepowo│anym dostΩpem applet≤w do zasob≤w zdalnego u┐ytkownika. W miarΩ upowszechniania siΩ applet≤w pisanych w Javie, liczba stosowanych zabezpiecze± bΩdzie zapewne wzrastaµ.</P>
  135.  
  136. <H2>Rozbudowa i specyfikacja Javy</H2>
  137. <P ALIGN="justify">Teraz, gdy ju┐ wiesz wiΩcej o Javie, mo┐esz odwiedziµ strony najwiΩkszych producent≤w oprogramowania, np. <A HREF="http://www.sun.com.pl">www.sun.com.pl</A>, <A HREF="http://www.inprise.com.pl">www.inprise.com.pl</A>, <A HREF="http://www.microsoft.com.pl">www.microsoft.com.pl</A>. Mo┐esz bezp│atnie tam ╢ci▒gn▒µ wiele program≤w narzΩdziowych (Java, J++, IntraBuilder) do tworzenia stron, applet≤w, oprogramowania sieciowego itp.</P>
  138. <P ALIGN="justify">Je╢li dysponujesz przegl▒dark▒ MS Internet Explorer 3.0, Netscape Navigator 2.0 lub nowsz▒, to mo┐esz odwiedziµ stronΩ np. <A HREF="http://www.msnbc.com">NBC</A> (na serwerze ameryka±skim!). Strona ta najpierw sprawdza, czy ju┐ kiedy╢ j▒ odwiedza│e╢. Je╢li nie, to na Tw≤j komputer zostanie przes│any applet Javy, pozwalaj▒cy na rozszerzenie mo┐liwo╢ci prezentacji witryny. Po zako±czeniu kopiowania, zobaczysz kolorow▒ stronΩ, niczym z kolorowych pism kobiecych, a tam najwa┐niejsze nowo╢ci z ca│ego ╢wiata. Applet Javy zarz▒dza tym miΩdzynarodowym serwisem, a dok│adnie aktywnym polem "klawisza", po│yskuj▒cym poprzecznie na ekranie.</P>
  139. <P ALIGN="justify">Java zawiera pewne wbudowane funkcje, u┐ywane do czΩsto obs│ugiwanych operacji, np. I/O (wej╢cia/wyj╢cia). Nie bΩdΩ siΩ teraz rozpisywa│ na dziesiΩµ rozdzia│≤w, aby wyt│umaczyµ, co to jest I/O, poniewa┐ zak│adam, ┐e czytelnik tego kursu zna podstawy programowania. W Javie pisze siΩ najczΩ╢ciej ma│e applety, kt≤re mog▒ byµ stosunkowo szybko za│adowane i uruchomione na komputerze u┐ytkownika. Java jest jΩzykiem zorientowanym obiektowo i pod wieloma wzglΩdami jest bardzo podobna do C i C++. Zasady tworzenia komentarzy, s│owa kluczowe, wiele funkcji bibliotecznych, Java ma takie same jak te dwa jΩzyki. Obiektowy charakter pozwala na samodzielne tworzenie i rozbudowΩ obiekt≤w oraz na wykorzystanie klas napisanych przez innych programist≤w, kt≤re nastΩpnie wykorzystywaµ mo┐na do szybkiego "sk│adania" aplikacji.</P>
  140. <P ALIGN="justify">W por≤wnaniu z klasycznym C/C++, Java zawiera nieco modyfikacji i rozszerze±. Dla przyk│adu, Java obs│uguje standardowy typ danych, string. W przeciwie±stwie do C++, kt≤ry, obs│uguj▒c tablice, pos│uguje siΩ zawsze wska╝nikami, Java obs│uguje tablice za po╢rednictwem indeks≤w element≤w.</P>
  141.  
  142. <H2>Przyk│ad kodu Javy i jego analiza</H2>
  143. <P ALIGN="justify">Poni┐szy listing przedstawia prosty przyk│ad kodu Javy, w kt≤ym │atwo rozpoznaµ elementy sk│adni zaczerpniΩte z C czy C++. Przyk│ad pozwala na kr≤tk▒ analizΩ typowej sk│adni jΩzyka Java.</P>
  144. <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=0>
  145. <TR>
  146. <td> </TD>
  147. <td VALIGN="top" STYLE="FONT-FAMILY: Courier New CE; FONT-SIZE: 9pt; FONT-WEIGHT: bold">
  148. 1 :<BR>
  149. 2 :<BR>
  150. 3 :<BR>
  151. 4 :<BR>
  152. 5 :<BR>
  153. 6 :<BR>
  154. 7 :<BR>
  155. 8 :<BR>
  156. 9 :<BR>
  157. 10:<BR>
  158. 11:<BR>
  159. 12:<BR>
  160. 13:<BR>
  161. 14:<BR>
  162. 15:<BR>
  163. 16:<BR>
  164. 17:<BR>
  165. 18:<BR>
  166. 19:<BR>
  167. 20:<BR>
  168. 21:</TD>
  169. <TD VALIGN="top" WIDTH=460 STYLE="FONT-FAMILY: Courier New CE; FONT-SIZE: 9pt; FONT-WEIGHT: bold">
  170. //*********************<BR>
  171. // Prosty Applet Javy<BR>
  172. //*********************<BR>
  173. <BR>
  174. import java.applet.*;     // do│▒cza niezbΩdne pliki pomocnicze<BR>
  175. import java.awt.*;<BR>
  176. <BR>
  177. // G│≤wna klasa - Main class<BR>
  178. <BR>
  179. public class Klasa1 extends Applet<BR>
  180.      {<BR>
  181.           public void init()
  182.      // definicja metody inicjuj▒cej<BR>
  183.           {<BR>
  184.           resize(320,400);
  185.        // zmie± rozmiar okna appletu<BR>
  186.           }<BR>
  187.    public void paint(Graphics g)  // definicja metody rysuj▒cej<BR>
  188.           {<BR>
  189.           g.setColor(Color.red);
  190.  // zmie± kolor txt na czerwony<BR>
  191.           g.drawString("Brzydal",75,100);
  192.  // drukuj czerwony txt<BR>
  193.           }<BR>
  194.      }
  195. </TD>
  196. </TR>
  197. </TABLE>
  198. <P ALIGN="justify">Zamiast konstruktor≤w, mo┐na stosowaµ funkcjΩ inicjuj▒c▒ pocz▒tkowe w│asno╢ci obiektu (init method).</P>
  199. <P ALIGN="justify">Program powy┐szego listingu zawiera definicjΩ klasy "Klasa1", w oparciu o kt≤r▒ zostanie utworzony obiekt "Applet". Applet napisze w oknie o zadanych wymiarach czerwony tekst "Brzydal", zaczynaj▒c od punktu o wsp≤│rzΩdnych 75 pixeli od lewego brzegu i 100 px od g≤rnego. Jako granice s▒ tu potraktowane krawΩdzie okna, kt≤rych lewy g≤rny wierzcho│ek ma wsp≤│rzΩdne (0,0).</P>
  200. <P ALIGN="justify">Zwr≤µmy uwagΩ na nastΩpuj▒ce punkty:</P>
  201. <UL>
  202. <LI>Wszystkie kody Javy rozr≤┐niaj▒ wielko╢µ liter. Skoro wiΩc nazwiemy zmienn▒, np. initSum, nie mo┐emy odwo│ywaµ siΩ do niej jako INITSUM, initsum, czy InitSum, gdy┐ kompilator uzna│by to za b│▒d.
  203. <LI>Java pozwala na dowolne stosowanie spacji i pustych wierszy, aby kod ╝r≤d│owy by│ czytelniejszy.
  204. <LI>Ka┐da instrukcja wykonywalna powinna byµ zako±czona ╢rednikiem (;). Jednak┐e po komentarzach i nawiasach klamrowych nie stosuje siΩ tego znaku (por≤wnaj to z CSS'em). Podobnie, pierwszy wiersz definicji klasy, b▒d╝ definicji funkcji, nie ko±czy siΩ ╢rednikiem, gdy┐ nie s▒ to instrukcje wykonywalne.
  205. <LI>Wiersze ujΩte w nawiasy klamrowe Java traktuje jako blok insrukcji. Blok taki mo┐e wyst▒piµ w ka┐dym miejscu. Nawiasy klamrowe oznaczaj▒ tak┐e pocz▒tek i koniec cia│a funkcji.
  206. </UL>
  207. <P ALIGN="justify">Powy┐sze punkty ╢wiadcz▒ o podobie±stwie do jΩzyka C/C++. Stosowanie tych zasad u│atwi zar≤wno pisanie, jak i analizowanie kod≤w ╝r≤d│owych Javy. Zintegrowane ╢rodowiska uruchomieniowe umo┐liwiaj▒ rozbudowan▒ diagnostykΩ b│Ωd≤w, a niekt≤re (np. Visual J++) pozwalaj▒ na wykrywanie b│Ωd≤w formalnych (sk│adniowych) jeszcze w trakcie pisania kodu.</P>
  208. <P ALIGN="justify">Komentarze musz▒ rozpoczynaµ siΩ znakami //. Je┐eli zostanie to pominiΩte, kompilator uzna to za tekst ╝r≤d│owy i potraktuje jako b│▒d. Komentarze nie s▒ wymagane, jednak pomagaj▒ webmasterowi w zorientowaniu siΩ w kodzie.</P>
  209. <P ALIGN="justify">Instrukcja import dzia│a w spos≤b analogiczny do dyrektywy procesora #include, znanej z C. Instrukcja ta nakazuje, jeszcze przed rozpoczΩciem kompilacji, wstawienie w to miejsce definicji "fabrycznych" klas z plik≤w pomocniczych, dostarczanych │▒cznie z kompilatorem Javy. Bliblioteka klas Javy (class package) jest zbiorem logicznie uporz▒dkowanych standardowych klas. Dop≤ki importujemy definicje klas z biblioteki Javy, mo┐emy tak┐e korzystaµ z metod (funkcji) zdefiniowanych w obrΩbie tych klas. Instrukcja import wystΩpuje w dw≤ch formatach:</P>
  210. <BLOCKQUOTE>
  211. <P ALIGN="justify" STYLE="FONT-FAMILY: Courier New CE; FONT-SIZE: 9pt; FONT-WEIGHT: bold">
  212. import Package.Class;    // do│▒cz pakiet i klasΩ<BR>
  213. import Package.*;        // do│▒cz pakiet i wszystkie klasy z pakietu
  214. </P>
  215. </BLOCKQUOTE>
  216. <P ALIGN="justify">Mo┐emy w ten spos≤b zaimportowaµ pojedyncz▒ klasΩ, lub ca│▒ bibliotekΩ klas z danego pakietu. Gwiazdka oznacza w│a╢nie wszystkie klasy, czyli ca│▒ bibliotekΩ. Pakiet klas java.applet.* do│▒czony w listingu, zawiera klasy niezbΩdne do zagnie┐d┐enia appletu w skrypcie HTML strony WWW. Dlatego ka┐dy applet bΩdzie siΩ rozpoczyna│ od importu tego pakietu. Pakiet klas java.awt.* zawiera wiele funkcji (metod) graficznych, kt≤re pozwalaj▒ na wysy│anie danych w formacie graficznym do okna przegl▒darki, w kt≤rym aktywna jest strona WWW z tym appletem. Zamiast wyprowadzaµ │a±cuchy znak≤w w trybie tekstowym, applet musi "rysowaµ" │a±cuch znak≤w w trybie graficznym. W listingu przyk│ad wykorzystuje do tego predefiniowan▒ metodΩ drawString(), zdefiniowan▒ w pakiecie klas java.awt.</P>
  217. <P ALIGN="justify">Poni┐sze dwa wiersze rozpoczynaj▒ definicjΩ klasy:</P>
  218. <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=0>
  219. <TR>
  220. <td> </TD>
  221. <td VALIGN="top" STYLE="FONT-FAMILY: Courier New CE; FONT-SIZE: 9pt; FONT-WEIGHT: bold">
  222. 10:<BR>
  223. 11:</TD>
  224. <TD VALIGN="top" WIDTH=460 STYLE="FONT-FAMILY: Courier New CE; FONT-SIZE: 9pt; FONT-WEIGHT: bold">
  225. public class Klasa extends Applet<BR>
  226.      {<BR>
  227. </TD>
  228. </TR>
  229. </TABLE>
  230. <P ALIGN="justify">Nawias klamrowy, jak ju┐ napisa│em, rozpoczyna definicjΩ klasy. S│owo extends (ang. - stanowi rozszerzenie), powoduje dziedziczenie w│asno╢ci i metod po klasie bazowej, predefiniowanej nazw▒ "Applet". Klasa bazowa (generic class) "Applet" jest zdefiniowana w pakiecie java.applet. Definicja nowej klasy rozpoczyna siΩ od s│≤w kluczowych class oraz public, przy czym to drugie okre╢la zasady dostΩpu. Po odziedziczeniu standardowych w│asno╢ci i metod od klasy bazowej, w klasie potomnej "Klasa1", rozbudowujemy funkcjonalne mo┐liwo╢ci klasy potomnej, dodaj▒c do niej definicjΩ publiczn▒ init() (zainicjuj obiekt) oraz, ewentualnie, inne metody. Bez takiej rozbudowy powsta│by applet, kt≤ry da siΩ skompilowaµ, ale nie potrafi zrobiµ nic.</P>
  231. <P ALIGN="justify">WewnΩtrzne funkcje, zdefiniowane we wnΩtrzu klas, s▒ przeznaczone do obs│ugi obiekt≤w tych┐e klas i og≤lnie s▒ nazywane metodami. Metody obs│uguj▒ zazwyczaj komunikaty o zdarzeniach i wtedy s▒ uto┐samiane z handlerami zdarze±, jednak┐e metoda jest pojΩciem szerszym i, opr≤cz handler≤w, obejmuje tak┐e konstruktory i destruktory. Metoda nie musi byµ uruchamiana przez komunikat (od systemu operacyjnego, b▒d╝ od innego obiektu), lecz mo┐e byµ uruchamiana w wybranem przez programistΩ momencie i okoliczno╢ci, z wnΩtrza kodu aplikacji. W przeciwie±stwie do Object Pascala i Delphi, gdzie constructor i destructor s▒ s│owami kluczowymi, w Javie, zamiast stosowania takich s│≤w, funkcje wykonuj▒ce faktycznie pracΩ konstruktora (inicjowanie stanu pocz▒tkowego obiektu), s▒ nazywane init().</P>
  232. <P ALIGN="justify">Podstawowa r≤┐nica miΩdzy zwyk│▒ funkcj▒ a metod▒ polega na tym, ┐e metody zawsze odnosz▒ siΩ do obiekt≤w konkretnych, okre╢lonych klas. Kolejne wiersze kodu przyk│adowego appletu, to definicja metody inicjuj▒cej applet:</P>
  233. <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=0>
  234. <TR>
  235. <td> </TD>
  236. <td VALIGN="top" STYLE="FONT-FAMILY: Courier New CE; FONT-SIZE: 9pt; FONT-WEIGHT: bold">
  237. 12:<BR>
  238. 13:<BR>
  239. 14:<BR>
  240. 15:</TD>
  241. <TD VALIGN="top" WIDTH=460 STYLE="FONT-FAMILY: Courier New CE; FONT-SIZE: 9pt; FONT-WEIGHT: bold">
  242.           public void init()
  243.      // definicja metody inicjuj▒cej<BR>
  244.           {<BR>
  245.           resize(320,400);
  246.        // zmie± rozmiar okna appletu<BR>
  247.           }</TD>
  248. </TR>
  249. </TABLE>
  250. <P ALIGN="justify">Predefiniowana metoda resize() zmienia domy╢lne wymiary okna appletu na ekranie roboczym przegl▒darki. W istocie, definicja funkcji init(), stanowi nadpisanie (function overriding) dziedziczonej po klasie bazowej, typowej metody init(), kt≤ra ju┐ istnieje. Metoda ta nie robi nic innego, poza przygotowaniem obiektu "Applet" do uruchomienia. Ka┐dy programista musi nadpisaµ metodΩ init(), a prawie ka┐dy applet Javy zawiera wywo│anie metody resize() w obrΩbie cia│a predefiniowanej funkcji init().</P>
  251. <P ALIGN="justify">Wszystkie inne instrukcje, kt≤re zostan▒ umieszczone w obrΩbie cia│a metody init(), zostan▒ wykonane zawsze natychmiast po pocz▒tkowym za│adowaniu appletu (initial loading). Metoda resize() pobiera dwa argumenty  - wsp≤│rzΩdne x i y. S▒ one czytane przez kompilator jaki wielko╢ci w pixelach (px). W listingu, applet bΩdzie mia│ udostΩpnione okno w obrΩbie strony WWW o wymiarach 320px x 240px (szeroko╢µ x wysoko╢µ).</P>
  252. <P ALIGN="justify">Metoda paint() powinna wyst▒piµ w ka┐dym tworzonym applecie i powinna nastΩpowaµ po metodzie init(). Obiekt "Applet" wywo│uje metodΩ paint() zawsze, gdy jego okno wymaga ponownego narysowania (redraw). Gdy u┐ytkownik nadpisze (czyli przes│oni) okno innym oknem, okno appletu bΩdzie wymagaµ odtworzenia i ta metoda jest za takie odtworzenie odpowiedzialna. DziΩki tej metodzie mamy pewno╢µ, ┐e okno appletu zawsze zostanie poprawnie odtworzone. Definicja w przyk│adowym listingu jest nastΩpuj▒ca:</P>
  253. <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=0>
  254. <TR>
  255. <td> </TD>
  256. <td VALIGN="top" STYLE="FONT-FAMILY: Courier New CE; FONT-SIZE: 9pt; FONT-WEIGHT: bold">
  257. 16:<BR>
  258. 17:<BR>
  259. 18:<BR>
  260. 19:<BR>
  261. 20:</TD>
  262. <TD VALIGN="top" WIDTH=460 STYLE="FONT-FAMILY: Courier New CE; FONT-SIZE: 9pt; FONT-WEIGHT: bold">
  263.    public void paint(Graphics g)  // definicja metody rysuj▒cej<BR>
  264.           {<BR>
  265.           g.setColor(Color.red);
  266.  // zmie± kolor txt na czerwony<BR>
  267.           g.drawString("Brzydal",75,100);
  268.  // drukuj czerwony txt<BR>
  269.           }</TD>
  270. </TR>
  271. </TABLE>
  272. <P ALIGN="justify">Obiekt graficzny "Graphics g" jest dosyµ dziwnym argumentem. Jest to obiekt predefiniowanej klasy Graphics, kt≤ry reprezentuje okno appletu. A "g" jest nazw▒ obiektu. Wywo│anie jego predefiniowanych metod nastΩpuje z u┐yciem operatora "." (kropki):</P>
  273. <BLOCKQUOTE>
  274. <P ALIGN="justify" STYLE="FONT-FAMILY: Courier New CE; FONT-SIZE: 9pt; FONT-WEIGHT: bold">
  275. g.setColor(Color.red);
  276. </P>
  277. </BLOCKQUOTE>
  278. <P ALIGN="justify">Metoda setColor() (ang. - ustal kolor) definiuje kolor ca│ego tekstu, jaki bΩdzie wyprowadzany na ekran poni┐ej tego wywo│ania, chyba, ┐e pojawi siΩ nastΩpna metoda setColor(), zmieniaj▒ca poprzednie ustawienia. Chocia┐ t│o okna pozostaje domy╢lnie szare, tekst bΩdzie wy╢wietlany na czerwono. NastΩpny wiersz okre╢la sam tekst do wprowadzenia:</P>
  279. <BLOCKQUOTE>
  280. <P ALIGN="justify" STYLE="FONT-FAMILY: Courier New CE; FONT-SIZE: 9pt; FONT-WEIGHT: bold">
  281. g.drawString("Brzydal",75,100);
  282. </P>
  283. </BLOCKQUOTE>
  284. <P ALIGN="justify">oraz wsp≤│rzΩdne wzglΩdne x,y w pixelach (odniesione do krawΩdzi okna) pocz▒tkowego punktu tekstu. Zwr≤µmy uwagΩ na podczepienie obu metod pod obiekt "g". Je┐eli w obrΩbie appletu utworzymy wiΩcej ni┐ jedno okno, wywo│anie tych samych metod w stosunku do r≤znych obiekt≤w, pozwoli nam wyprowadzaµ teksty odrΩbnie do ka┐dego spo╢r≤d tych okien.</P>
  285.  
  286. <H2>Podsumowanie</H2>
  287. <P ALIGN="justify">Celem tego kursu by│o wprowadzenie do programowania w jΩzyku Java. Java pozwala dynamizowaµ uprzednio statyczne strony WWW, poprzez przesy│anie do komputera zdalnego u┐ytkownika ma│ych program≤w, nazywanych appletami, │▒cznie ze skryptami HTML. W przeciwie±stwie do innych jΩzyk≤w programowania, jak FORTAN czy C, programy pisane w Javie, s▒ zazwyczaj czΩ╢ci▒ czego╢ wiΩkszego, g│≤wnie stron WWW. Applet Javy jest przesy│any na komputer u┐ytkownika i tam wykonuje siΩ z maksymaln▒ mo┐liw▒ prΩdko╢ci▒, omijaj▒c w ten spos≤b "w▒skie gard│o", kt≤re stanowi po│▒czenie ze zdalnym serwerem.</P>
  288. <P ALIGN="justify">Mimo, ┐e nie opisa│em Javy w szczeg≤│ach, z pewno╢ci▒ poradzisz sobie ju┐ teraz z napisaniem w│asnego, nieskomplikowanego appletu, i wiesz, jakie narzΩdzia mog▒ Ci pom≤c. W istocie, tworzenie applet≤w polega na dziedziczeniu od typowych klas bazowych i rozbudowie definicji w│asnych klas potomnych. Obszerne pakiety klas bazowych s▒ dostarczane z wszystkimi kompilatorami Javy.</P>
  289. <P ALIGN="justify">Aby rozszerzyµ swoj▒ wiedzΩ o Javie, polecam przeczytanie <A HREF="http://www.web-area.org?id=62">kursu Javy</A> autorstwa Miros│aw Kani, r≤wnie┐ znajduj▒cego siΩ na tej witrynie.</P>
  290.  
  291. <p align="right"><a href="mailto:beaviss@wp.pl">Dawid Rompalski</a><br></td>
  292.     </tr></table>
  293.     </div>
  294. </td>
  295. <td width="142" valign="top">
  296.  
  297.         <br>
  298.         <table border="0" cellpadding="0" cellspacing="0" width="142">
  299.         <tr>
  300.         <td width="142" valign="top"><img src="img/login.gif" border="0" width="142" height="13" alt="LOGIN"></td>
  301.         </tr>
  302.         <tr>
  303.         <td width="142" valign="top" background="img/okno1.gif">
  304.         
  305.             
  306.             <div align="center">
  307.             <table cellpadding="0" cellspacing="2" border="0" width="98%">
  308.             <form method="post" action="subskrypcja/login.php">
  309.             <tr><td width="30%"><span class="t">Login:</span></td><td width="68%"><input type="text" name="login" size="15" class="login"></td></tr>
  310.             <tr><td width="30%"><span class="t">Has│o:</span></td><td width="68%"><input type="password" name="haslo" size="15" class="login"></td></tr>
  311.             
  312.             <tr><td colspan="2"><center><input type="image" src="img/ok.gif"></td></tr>
  313.             </form></table></div>
  314.         
  315.         </td>
  316.         </tr>
  317.         <tr>
  318.         <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  319.         </tr></table>
  320.  
  321.         <br>
  322.         <table border="0" cellpadding="0" cellspacing="0" width="142">
  323.         <tr>
  324.         <td width="142" valign="top"><img src="img/art.gif" border="0" width="142" height="13" alt="ARTYKULY"></td>
  325.         </tr>
  326.         <tr>
  327.         <td width="142" valign="top" background="img/okno1.gif">
  328.         
  329.         <span class="m">
  330.         
  331.          -<a href="index.php@id=1" class="menu">"Edytory HTML'a"</a><br>
  332.          -<a href="index.php@id=2" class="menu">"Publikowanie witryny"</a><br>
  333.          -<a href="index.php@id=3" class="menu">"PHP w domu"</a><br>
  334.          -<a href="index.php@id=4" class="menu">"Przeszukiwanie stron"</a><br>
  335.          -<a href="index.php@id=204" class="menu">"Wprowadzenie do Javy"</a><br>
  336.          -<a href="index.php@id=210" class="menu">"Grafika w PHP"</a>
  337.         </span>
  338.         
  339.         </td>
  340.         </tr>
  341.         <tr>
  342.         <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  343.         </tr></table>
  344.         
  345.         <br>
  346.         <table border="0" cellpadding="0" cellspacing="0" width="142">
  347.         <tr>
  348.         <td width="142" valign="top"><img src="img/stat.gif" border="0" width="142" height="13" alt="ARTYKULY"></td>
  349.         </tr>
  350.         <tr>
  351.         <td width="142" valign="top" background="img/okno1.gif"><div align="left"><table border="0" cellpadding="0" cellspacing="0" width="138"><tr><td width="138"><ol><li><a href="index.php@id=135" class="stat">PHP - przyk│adowe skrypty</a> <span class="maleczarne">(1491)</span><br><li><a href="index.php@id=59" class="stat">Szablony 1</a> <span class="maleczarne">(832)</span><br><li><a href="index.php@id=145" class="stat">Kurs PHP</a> <span class="maleczarne">(817)</span><br><br><span class="maleczarne">ú▒cznie: 24031</span>        </ol>
  352.         <center><a href="http://stat.webmedia.pl/cgi-bin/anal?webarea" target="_blank">
  353. <img border=0 src="http://stat.webmedia.pl/cgi-bin/stat?webarea&stat4ur" alt="stat4u" width="40" height="10"></a></center>
  354.         </td></tr></table></div>
  355.         </td>
  356.         </tr>
  357.         <tr>
  358.         <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  359.         </tr></table>
  360.         
  361.         <br>
  362.         <table border="0" cellpadding="0" cellspacing="0" width="142">
  363.         <tr>
  364.         <td width="142" valign="top"><img src="img/sponsor.gif" border="0" width="142" height="13" alt="SPONSOR"></td>
  365.         </tr>
  366.         <tr>
  367.         <td width="142" valign="top" background="img/okno1.gif"><br>
  368.         <center><EMBED src="img/beep2.swf" quality=high bgcolor=#000000 WIDTH=120 HEIGHT=30></center>                            
  369.         </td>
  370.         </tr>
  371.         <tr>
  372.         <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  373.         </tr></table>
  374.  
  375.         <br>
  376.             <div align="center"><table border="0" cellpadding="2" cellspacing="0" width="120">
  377.             <tr>
  378.             <td width="120"><a href="button.php@id=1" target="_blank"><img src="img/cgi.gif" border="0"></a></td>
  379.             </tr>
  380.             <tr>
  381.             <td width="120"><a href="button.php@id=2" target="_blank"><img src="img/ygreg.gif" border="0"></a></td>
  382.             </tr>
  383.             <tr>
  384.             <td width="120"></td>
  385.             </tr>
  386.             </table>
  387.             </div>
  388.         
  389.  
  390. </td>
  391. </tr>
  392. <tr>
  393. <td width="770" valign="top" colspan="3" align="right"><br><br><span class="m">All rights reserved by <a href="mailto:web-area@web-area.org">J&J Filipowscy Design & Code</a></td>
  394. </tr></table></div>
  395.  
  396.  
  397. </body>
  398. </html>