COMPUTERWORLD
Specializovan² t²denφk o v²poΦetnφ technice
o Internetu
(CW 40/97)

Programovßnφ v jazyce Java

David ètrupl

Vß₧enφ Φtenß°i,

vφtßm vßs u serißlu, kter² se bude zab²vat programovßnφm v Jav∞. V jeho pr∙b∞hu byste se m∞li seznßmit s jeho hlavnφmi principy. Serißl p°edpoklßdß jistΘ zßkladnφ znalosti programovßnφ, nejlΘpe v jazycφch C, C++ nebo Pascalu. Proto₧e bude pojednßvat zejmΘna o programovßnφ v jazyce Java, je urΦen hlavn∞ t∞m, kte°φ hledajφ struΦn² p°ehled vÜeho, co lze pomocφ Javy vytvo°it. Rozsah naÜeho serißlu nedovoluje p°φliÜ podrobnΘ vysv∞tlovßnφ zßkladnφch pojm∙ -- budeme se proto obΦas dovolßvat na ji₧ existujφcφ znalost programovßnφ a mlΦky p°edpoklßdßme znalost takov²ch pojm∙, jako jsou komentß°, identifikßtor, typ, rozsah platnosti apod.

NicmΘn∞ ani v p°φpad∞, ₧e jste zatφm s programovßnφm nep°iÜli p°φliÜ do styku, si nemusφte zoufat. Serißl bude dopl≥ovßn kratÜφmi Φlßnky o praktickΘm pou₧itφ Javy a JavaScriptu pro vylepÜenφ vaÜich WWW strßnek. Tato Φßst se p°itom nebude vßzat na hlavnφ serißl a jeho ka₧dß Φßst bude obsahovat relativn∞ samostatnou kapitolku s praktick²m nßvodem k pou₧itφ.

┌vod a zßkladnφ pojmy

Nejprve se samoz°ejm∞ seznßmφme s tφm, co vlastn∞ Java je a kam si ji mßme za°adit. Historie jazyka a prost°edφ zaΦala na poΦßtku 90. let, kdy James Gosling dostal ve firm∞ Sun za ·kol vyvinout nov² jazyk pro v²robky spot°ebnφ elektroniky. P∙vodn∞ se jeho projekt jmenoval Oak a nem∞l nic spoleΦnΘho s Internetem. Kolem roku 1994 pak bylo rozhodnuto p°enΘst jazyk z prost°edφ spot°ebnφ elektroniky do ostatnφch oblastφ nasazenφ poΦφtaΦ∙ a zejmΘna do Internetu. Jazyk byl p°ejmenovßn na dneÜnφ jmΘno Java (horkß kßva) a po p°edvedenφ ve firm∞ Netscape bylo rozhodnuto za°adit Javu do prohlφ₧eΦe Netscape Navigator verze 2.0. To se stalo skuteΦnostφ v listopadu 1995 -- a od tΘ doby se prost°edφ Javy stßvß stßle populßrn∞jÜφ nejen v oblasti prohlφ₧eΦ∙, ale i jako samostatnΘ prost°edφ pro spouÜt∞nφ aplikacφ. Firma Sun vyrßbφ poΦφtaΦe nazvanΘ JavaStation, jejich₧ cel² operaΦnφ systΘm je zalo₧en na prost°edφ Javy.

SouΦasn∞ s uvedenφm Javy p°idala firma Netscape do svΘho prohlφ₧eΦe i dalÜφ produkt (tentokrßt z vlastnφ dφlny) -- JavaScript. P°esto₧e jazyky Java a JavaScript majφ spoleΦnou Φßst jmΘna, jednß se o dv∞ r∙znΘ technologie, kterΘ v prohlφ₧eΦi spolupracujφ -- dnes u₧ nejen v Netscape Navigatoru, ale i v n∞kter²ch dalÜφch (nap°. MS Internet Explorer). JavaScript je p°itom skriptovacφ jazyk, jej₧ je mo₧nΘ vklßdat p°φmo do zdrojovΘho textu HTML strßnky. P°φkazy JavaScriptu jsou interpretovßny p°φmo prohlφ₧eΦem. Pomocφ JavaScriptu lze p°itom o₧ivit jinak statickou HTML strßnku p°idßnφm reakce na n∞kterΘ udßlosti.

Na rozdφl od JavaScriptu je zdrojov² k≤d napsan² v jazyce Java nejprve p°elo₧en do spustitelnΘho mezik≤du (bytecode) -- viz obrßzek Cesta Java k≤du.

Bytecode je mo₧nΘ spustit pomocφ vhodnΘho runtime prost°edφ, kterΘ se naz²vß Java Virtual Machine. Toto prost°edφ m∙₧e b²t souΦßstφ prohlφ₧eΦe nebo je mo₧nΘ jej zφskat samostatn∞ (nap°. jako tzv. Java Runtime Environment -- JRE) nebo jako souΦßst v²vojovΘho prost°edφ (nap°. JDK -- Java Development Kit). P°elo₧en² mezik≤d je mo₧nΘ na cφlovΘ platform∞ bu∩ interpretovat, nebo je mo₧nΘ jej v rßmci zavßd∞nφ do systΘmu jeÜt∞ po Φßstech p°elo₧it do spustitelnΘho formßtu na cφlov² procesor -- druhß varianta spouÜt∞nφ se n∞kdy naz²vß Just In Time kompilßtor (JIT).

Mezi hlavnφ v²hody program∙ napsan²ch v jazyce Java pat°φ jejich velkß p°enositelnost mezi jednotliv²mi operaΦnφmi systΘmy a hardwarov²mi platformami. Jednou p°elo₧en² program lze pomocφ p°φsluÜnΘho JVM spustit prakticky na libovolnΘm poΦφtaΦi (Sun, Windows 95/NT, HP-UX, Irix, Linux...).

NejjednoduÜÜφ a zßkladnφ v²vojovΘ prost°edφ (JDK) je mo₧nΘ zφskat zdarma od firmy Sun. Nynφ je aktußlnφ verze JDK 1.1.

Prost°edφ JDK je slo₧eno z n∞kolika samostatn²ch program∙, kterΘ se pou₧φvajφ z konzole -- v prost°edφ Windows z MS-DOS promptu. Samoz°ejm∞, ₧e profesionßlnφ v²vojovß prost°edφ majφ podobu, na kterou jsme zvyklφ i u jin²ch jazyk∙ -- jednß se o integrovanß v²vojovß prost°edφ (IDE). My si budeme v∞tÜinu postup∙ ukazovat na JDK, proto₧e toto prost°edφ je zßkladnφ a vÜechna IDE musφ mφt v₧dy alespo≥ jeho funkce.

Dßle popisovanΘ postupy se v ka₧dΘm jednotlivΘm prost°edφ vyvolajφ odliÜn²m zp∙sobem, ale b²vß zvykem, ₧e distribuce IDE obsahuje i °ßdkovΘ nßstroje z JDK. Profesionßlnφ v²vojovΘ prost°edφ pro v²voj v Jav∞ je mo₧nΘ zφskat nap°. od firem Sun, Borland, Symantec, Sybase, IBM, Microsoft a n∞kter²ch dalÜφch. TakΘ je mo₧nΘ pou₧φt jedno z sharewarov²ch rozÜφ°enφ JDK, nap°. ΦeskΘ Xelfi. A jakmile mßme v²vojovΘ prost°edφ, m∙₧eme se sm∞le pustit do psanφ program∙.

Prvnφ aplikace

Podφvejme se, jak je mo₧nΘ napsat nejjednoduÜÜφ aplikaci v jazyce Java. Chceme-li pou₧φt klasick² p°φklad, napφÜeme program, kter² pouze vypφÜe na standardnφ v²stup (konzoli) slova "Hello World" -- nazdar sv∞te.

public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello world!");
}
}

Aplikace obsahuje pouze jedinou metodu main, jejφ₧ deklarace je podobnß definici main v jazyce C nebo C++. Uvnit° metody main jsme pou₧ili volßnφ System.out.println(), co₧ je frßze ekvivalentnφ p°φkazu printf v C -- provede v²pis na standardnφ v²stup. Takto jsme vytvo°ili konzolovou aplikaci, kterß po p°elo₧enφ bude spuÜt∞na z p°φkazovΘ °ßdky.

P°eklad ze souboru HelloWorld.java provedeme pomocφ programu javac (ve Windows javac.exe): javac HelloWorld.java. Jako v²sledek p°ekladu vznikne soubor HelloWorld.class. Soubory s p°φponou class obsahujφ p°elo₧en² bytecode. Vlastnφ spuÜt∞nφ provedeme pomocφ programu java (java.exe): java HelloWorld. Pokud se vÜe povedlo, provede program vypsßnφ slov Hello World a skonΦφ.

Takto vytvo°enou aplikaci lze spustit pomocφ programu java, ale nelze ji spustit pomocφ prohlφ₧eΦe. Pro spuÜt∞nφ v prohlφ₧eΦi musφme vytvo°it specißlnφ druh javovΘ aplikace: tzv. applet.

Prvnφ applet

Applet je program napsan² v Jav∞, kter² obsahuje vazby umo₧≥ujφcφ prohlφ₧eΦi nahrßt jej jako souΦßst WWW strßnky a spustit na klientskΘm poΦφtaΦi. NejjednoduÜÜφ applet, kter² si m∙₧eme p°edstavit, bude op∞t varianta na tΘma Hello World:

import java.applet.*;
public class HelloWorldApplet extends Applet{
public void paint(java.awt.Graphics g) {
g.drawString("Hello world",50,50);
}
}

Applet nenφ konzolovß aplikace, co₧ znamenß, ₧e pob∞₧φ v prost°edφ prohlφ₧eΦe. Aby prohlφ₧eΦ v∞d∞l, kam mß nßÜ applet zobrazit, musφme jej vlo₧it do HTML dokumentu pomocφ nßsledujφcφch p°φkaz∙:

<applet code=HelloWorldApplet.class width=100 height=100>
</applet>

Applet p°elo₧φme podobn∞ jako samostatnou aplikaci pomocφ p°ekladaΦe Javy -- dostaneme v²sledn² soubor HelloWorldApplet.class. Tento soubor umφstφme do stejnΘho adresß°e, ve kterΘm mßme naÜi HTML strßnku. Pokud vÜe prob∞hlo bez problΘm∙, uvidφme na svΘ strßnce HelloWorld.html vytvo°en² applet. Kdyby nßÜ applet vypisoval n∞co na standardnφ v²stup, m∙₧eme to nap°. v Netscape Navigatoru vid∞t, pokud si otev°eme okno Java Console.

Pokud nechceme p°i testovßnφ program∙ pou₧φvat WWW prohlφ₧eΦ, mßme k dispozici program appletviewer, kter² je souΦßstφ v²vojovΘho prost°edφ. Tento program umo₧≥uje prohlφ₧et applety vlo₧enΘ do HTML strßnek -- spouÜtφme ho tedy s parametrem, kter² urΦuje jmΘno HTML souboru obsahujφcφ po₧adovan² applet. V integrovan²ch prost°edφch lze v∞tÜinou applet spustit podobn∞ jako samostatnou aplikaci -- je tedy t°eba dßvat pozor, kdy₧ budeme chtφt applet spustit mimo naÜe v²vojovΘ prost°edφ, abychom m∞li vÜechny soubory na p°φsluÜnΘm mφst∞ (nejlΘpe ve stejnΘm adresß°i).

Applet na vlastnφ strßnce

Chceme-li na vlastnφ strßnce pou₧φt applet, kter² vytvo°il n∞kdo jin², mßme v zßsad∞ dv∞ mo₧nosti. Prvnφ mo₧nostφ je, ₧e autor zve°ejnφ p°φsluÜn² zdrojov² k≤d. V tomto p°φpad∞ musφme, podobn∞ jako v p°edchozφm p°φkladu, applet nejprve p°elo₧it a v²slednΘ class soubory ulo₧it do stejnΘho adresß°e jako je HTML strßnka, ze kterΘ bude applet prohlφ₧en.

Druhou (Φast∞jÜφ) mo₧nostφ je, ₧e applety se distribuujφ v ji₧ p°elo₧enΘ form∞. Potom je pouze pot°eba umφstit dodanΘ class soubory na sprßvnΘ mφsto a vyrobit na n∞ odkaz v HTML dokumentu. V dokumentaci k appletu musφ b²t °eΦeno, kterß t°φda se mß pou₧φt na WWW strßnce.

N∞kterΘ applety mohou pou₧φvat parametry p°edanΘ z HTML. U ka₧dΘho parametru musφ b²t zadßno jeho jmΘno a hodnota:

<applet code=HelloWorldApplet.class
width=100 height=100>
<param name="jmeno1" value="hodnota1">
<param name="jmeno2" value="hodnota2">
</applet>

JmΘna parametr∙ v povolenΘ hodnoty musφ b²t uvedeny v dokumentaci k appletu. Pokud nezadßme n∞jak² parametr, applet nßm m∙₧e vypsat chybu na Java consoli.

SystΘm soubor∙ javovΘ aplikace

Program, kter² napφÜete, bude p°elo₧en do souboru s p°φponou class. V ka₧dΘm takovΘm souboru je p°elo₧en k≤d jednΘ t°φdy, ale typick² program se nesklßdß z jednΘ t°φdy. V²sledek p°ekladu ze souboru s p°φponou java m∙₧e tedy b²t v∞tÜφ mno₧stvφ class soubor∙. Class soubory jsou organizovßny do tzv. balφk∙ (packages). Ka₧d² balφk je ulo₧en v jednom adresß°i. Balφky mohou obsahovat dalÜφ balφky, tj. vznikne hierarchickß struktura balφk∙ odpovφdajφcφ adresß°ovΘ struktu°e, ve kterΘ budou ulo₧eny class soubory.

Standardnφ knihovny dodßvanΘ jako souΦßst prost°edφ jsou rovn∞₧ rozd∞leny na jednotlivΘ balφky. Adresß°, ve kterΘm se majφ hledat class soubory a p°φpadnΘ dalÜφ balφky (podadresß°e), m∙₧e b²t v prost°edφ urΦen prom∞nnou CLASSPATH. Tato prom∞nnß m∙₧e obsahovat vφce adresß°∙, ve kter²ch JVM bude hledat k≤d. Pokud nenφ nastavenß prom∞nnß CLASSPATH, m∙₧eme po₧adovan² adresß° zadat jako parametr p°i spouÜt∞nφ programu java:

java -classpath c:\java\classes:. P.class

Pro odd∞lovßnφ jednotliv²ch polo₧ek v classpath se pou₧φvß v prost°edφ Unixu znak : a v prost°edφ Windows znak ;. Pokud nenφ uvedena ani jedna cesta k soubor∙m ze standardnφch knihoven, prost°edφ se je pokusφ najφt v adresß°i urΦenΘm prom∞nnou JAVA_HOME nebo podle mφsta, odkud bylo spuÜt∞no. Jestli₧e po₧adovanΘ soubory nenajde, vypφÜe chybu.

Pokud pou₧φvßme integrovanΘ prost°edφ, nenφ v∞tÜinou pot°eba prom∞nnΘ prost°edφ nastavovat. Pokud je vÜak nastavφme, je t°eba dßvat pozor p°i spouÜt∞nφ n∞kter²ch prohlφ₧eΦ∙ -- zadßnφ t∞chto prom∞nn²ch jim m∙₧e zp∙sobit problΘmy pro spouÜt∞nφ Java applet∙, proto₧e nenajdou svΘ standardnφ knihovny.

P°i hledßnφ class soubor∙ m∙₧e interpret Javy krom∞ adresß°∙ prohledßvat i soubory s p°φponou .jar (java archive). Tyto soubory obsahujφ adresß°e a soubory podobn∞ jako nap°. soubory s p°φponou zip nebo tar -- p∙vodn∞ byl pou₧it formßt zip (Netscape 3.0), v dalÜφch verzφch byl vytvo°en nov² formßt jar. P°i spouÜt∞nφ samostatn²ch aplikacφ je mo₧nΘ v prom∞nnΘ CLASSPATH nebo pomocφ volby -classpath p°edanΘ p°φmo programu java zadat cestu do souboru formßtu jar nebo zip. Podφvejme se na p°φklad spuÜt∞nφ programu ulo₧enΘho v jar souboru:

java -classpath .;c:\mujJar.jar Program

Pokud chceme, aby programy z archivu jar nebo zip zφskßval prohlφ₧eΦ, m∙₧eme to stanovit pomocφ dalÜφho parametru p°φkazu applet ve WWW strßnce:

<applet code=HelloWorldApplet.class
archive=muj.jar
width=100 height=100>
</applet>

Mo₧nost pou₧φt jar soubory je novß od verze JDK 1.1 -- tuto volbu tedy podporuje a₧ prohlφ₧eΦ Netscape od verze 4.0. SouΦßstφ JDK je takΘ program na vytvß°enφ jar archiv∙ -- jmenuje se jar a jeho pou₧itφ je trochu podobnΘ unixovΘmu programu tar. Chceme-li nap°. vytvo°it archiv ze vÜech class soubor∙ v aktußlnφm adresß°i, pou₧ijeme p°φkaz:

jar cf myjarfile *.class

Pou₧itφ archiv∙ zrychluje nahrßvßnφ class soubor∙ ze sφt∞ a umo₧≥uje pracovat s cel²m Java programem jako s jednφm souborem.

InternetovΘ adresy, kde lze zφskat dalÜφ informace o jazyce Java

http://java.sun.com
http://sunsite.ms.mff.cuni.cz/java
http://www.gamelan.com
http://www.jars.com/


| <<< | CW o Internetu | COMPUTERWORLD | IDG CZ homepage |