Životni ciklus appleta
-
broser učitava HTML stranicu i pronalazi oznaku <APPLET>
-
browser analizira oznaku <APPLET>tražeći atribut CODE
i eventualno CODEBASE.
-
browser učitava .class datoteku appleta sa prethodno pronađenog URL-a
-
browser konvertuje byte-ove u Java klasu, dakle objekt od java.lang.Class.
-
browser instancira apletovu klasu kako bi formirao objekt-aplet. To zahteva
da aplet ima konstruktor bez argumenata.
-
browser poziva apletov init() metod.
-
browser poziva apletov start() metod.
-
dok se aplet izvršava, browser mu šalje informacije o događajima koji su
mu namenjeni, npr. klik mišem, pritisak na taster itd. preko apletovog
metoda
handleEvent(). Događaji koji rade update kažu apletu da
se iznova prikaže (repaint)
-
browser poziva appletov stop() metod.
-
browser poziva appletov destroy() metod.
Veličina appleta
Veličina
prostora koju aplet zauzima pri izvršavanju unutar strane zadaje se atributima
HEIGHT i WIDTH i sam applet je ne može promeniti. Ali, moguće je saznati
kolika je ta veličina, što se i koristi za crtanje strogo unutar zadanog
prostora, a ne van njega.
Veličina
appleta dobija se metodom
getSize()koju
klasa
java.applet.Applet
nasleđuje od nadklase
java.awt.Component.
Ovaj metod vraća objekat tipa
java.awt.Dimension.
Sam objekat ima dva
int atributa:
height i
width.
Primer apleta koji ispisuje na stranu sopstvene dimenzije:
import java.applet.*;
import java.awt.*;
public class SizeApplet extends Applet {
public void paint(Graphics g) {
Dimension appletSize = this.getSize();
int appletHeight = appletSize.height;
int appletWidth = appletSize.width;
g.drawString("Applet je " + appletHeight
+ " pt visok i " + appletWidth + " pt sirok.", 15, appletHeight/2);
}
}
Uočiti da visina apleta je uzeta u obzir kod odluke o lokaciji
teksta. Često se koristi mehanizam upotrebe apletove dimenzije pri određivanju
mesta objekata na strani
Aplet i bezbednost
Zbog
mehanizama virtualne mašine, hvatanja izuzetaka,... Java apleti
su sigurni za korisnike koji krstare Internetom, jer imaju ugrađena dodatna
sigurnosna ograničenja kako bi zaštitili korisnike od programerskih pogrešaka,
ali i od virusa. To je implementirano pomoću klase
java.lang.SecurityManager.
Različite podklase ove klase osiguravaju različita sigurnosna okruženja
na različitim virtualnim mašinama. Loša strana toga je uvođenje raznih
restrikcija na akcije koje aplet može činiti.
Domet apleta
Applet
može:
-
kreirati novi prostor i crtati slike u njemu, odnosno na web stranici
-
reprodukovati zvuk
-
prihvatati unos korisnika putem tastature ili miša
-
povezivati se na server s kojeg je došao, slati i primati podatke s tog
servera.
Aplet
ne
može:
-
pisati podatke na bilo koji disk na hostu
-
čitati podatke s hostovog diska bez korisnikove dozvole. U nekim okruženjima,
npr Netscape, aplet ne može čitati podatke s korisnikovog diska čak ni
uz dozvolu
-
brisati datoteke
-
čitati ili pisati po bilo kom bloku memorije. Sav pristup memoriji strogo
je kontrolisan.
-
povezivati se s hostovima na Internetu, osim sa hostom sa kog dolazi
-
pozivati direktno native API
-
unositi viruse na host
S kim applet može komunicirati?
Po
pretpostavci applet može ostvariti mrežnu konekciju samo na računar (file
system) sa kog je učitan. Taj sistem se zove codebase. Applet
ne može komunicirati s bilo kojim računarem na internetu. Sva komunikacija
te vrste mora biti posredovana preko servera.
Razlog
je taj što bi inače aplet mogao lansirati s neke mašine napade na internu
mrežu organizacije. To bi pogotovo bio problem za mašine unutar firewalla
koje su obično konfigurisane tako da jedne drugima veruju. Takođe, to bi
omogućilo hakerima da lakše sakriju svoju pravu lokaciju.
HotJava,
Sunov applet viewer i Internet Explorer (ali ne i Netscape) dozvoljavaju
da dopustite apletu ostvarivanje konekcija na proizvoljnu mašinu,
ali to nije default opcija.
Koliko CPU vremena applet dobija?
Jedan
od razloga za brigu oko zlonamernih apleta je mogućnost preterane upotrebe
CPU vremena, što je problem na, recimo Mac-u, a nešto manje na Windows
ili Solaris. U svakom slučaju, aplet može naterati korisnika da npr. prisilno
ugasi browser što može uzrokovati određeni gubitak podataka.
Moguće
je da applet koristi CPU vreme za svrhe koje nisu odmah vidljive. Na primer,
neki popularni aplet može lansirati napad na password datoteku pomoću tzv.
kineske lutrije. Ili, aplet koji simulira neku igru može u backgroundu
lansirati thread koji pokušava slučajnim pristupom razbiti enkripciju neke
datoteke. U tom slučaju mogao bi ostvariti konekciju prema svom serveru
i poslati ključ natrag. Što je aplet popularniji, to je verovatnost pronalaženja
ključa veća. Ipak, Java kod se lako dekompilira, pa se takvi appleti mogu
otkriti.
Sigurnost
Većina
nedozvoljenih upada na sistem je rezultat naivnosti i neznanja zbog kog
je moguće ukrasti lozinku, npr. na prevaru izbacivanjem prozora na koji
obaveštava korisnika da veza je prekinuta i da unese lozinku (npr.).
Sprečavanje hakerskih napada kroz aplete
Da
bi se sprečile takve zabune, prozori apleta su uvek snabdeveni nekom uočljivom
porukom kao: "Warning: Applet Window" ili "Unsigned Java Applet Window."
To, naravno, još uvijek ne garantuje da neko neće upisati svoj password
ne čitajući šta piše na prozoru. Obrazovanje korisnika na prvom je mestu
u bezbednoj upotrebi.
Parametri apleta
HTML oznaka <param>
Parametri
se iz HTML dokumenta prenose do apleta pomoću para NAME=VALUE i oznake
<PARAM> koja se nalazi između oznake <APPLET> i njenog zatvarajućeg
oblika. Unutar samog apleta vrednosti prosleđene putem oznake <PARAM>
čitaju se pomoću metoda
getParameter()
iz klase
java.applet.Applet.
Primer
u kom se vrši ispis niski dobijenih iz HTML dokumenta (niska
koji se ispisuje u ovom primeru je vrednost parametra "Poruka".
import java.applet.*;
import java.awt.*;
public class IspisNiskiAplet extends Applet{
public void paint(Graphics g) {
String ulaz = this.getParameter("Poruka");
g.drawString(ulaz, 50, 25);
}
}
Na
HTML stranici će postojati parametar "Poruka" čija vrednost je niska "Kako
se zovete?". <HTML><HEAD><TITLE>Aplet IspisNiski</TITLE></HEAD>
<BODY>Ovo je IspisNiskiAplet:<P>
<APPLET code="IspisNiskiAplet.class"
WIDTH="300" HEIGHT="50">
<PARAM name="Poruka" value="Kako se zovete?">
Proverite da li Vaš browser podržava Java-u.
</APPLET>
</BODY>
</HTML>
Ako
se promeni vrednost parametra, aplet ispisuje odgovarajuću nisku bez potrebe
za ponovljenom kompilacijom.
Ovaj
aplet je nalik na aplet ZdravoAplet. Ali umesto fiksno kodirane poruke
koju ispisuje, ona se učitava u promenljivu ulaz iz HTML oznake PARAM.
Metod
getParameter()kao
argument dobija naziv parametra sa HTML stranice koja potom vraća njegovu
vrednost. Argument i povratna vrednost jesu stringovi. Ako je potreban
drugačiji tip, vrši se odgovarajuća konverzije.
Oznaka
<PARAM>
umeće se između <APPLET> i </APPLET>. Atributi
NAME i VALUE identifikuju ime i vrednost parametra. Vrednosti se stavljaju
unutar dvostrukih navodnika ako sadrže beline.
Broj
parametara nije ograničen. Ako postoji više oznaka <PARAM> koje
aplet ne namerava da iskoristi, onda se višak ignoririše na
bezbedan način.
Obrada nepoznatog broja parametara
Ponekad
je potrebno obraditi nepoznati broj parametara. Tom prilikom parametri
dobijaju neke predvidljive nazive. Na primer
<PARAM name="Line1" value="Prva linija">
<PARAM name="Line2" value="Drugi stih">
<PARAM name="Line3" value="Fragment 3,">
<PARAM name="Line4" value="Kraj strofe:">
<PARAM name="Line5" value="Nova linija.">
Naredni JAVA program ispisuje ovaj tekst poznajući način imenovanja
parametara ("Line" + numlines).
Metod
paint()
ispisuje svaku nisku na standardni izlaz, povećavajući poziciju y-koordinate
za 15 piksela svaki put.
import java.applet.*;
import java.awt.*;
public class ViselinijskiAplet extends Applet {
String[] poem = new String[101];
int numlines;
public void init() {
String nextline;
for (numlines = 1; numlines
< poem.length; numlines++) {
nextline =
this.getParameter("Line" + numlines);
if (nextline
== null) break;
poem[numlines]
= nextline;
}
numlines--;
}
public void paint(Graphics g) {
int y = 15;
for (int i=1; i <= numlines;
i++) {
g.drawString(poem[i], 5,
y);
y += 15;
}
}
}
Prateca
HTML datoteka
<HTML>
<HEAD><TITLE>Aplet-nepoznat
broj parametara</TITLE></HEAD>
<BODY>
<h2>Ovo
je aplet kojim se ilustruje upotreba parametara :</h2>
<p><APPLET
code="ViselinijskiAplet.class"
WIDTH="350"
HEIGHT="100">
<PARAM
name="Line1" value="Prva linija">
<PARAM name="Line2" value="Drugi stih">
<PARAM name="Line3" value="Fragment 3,">
<PARAM name="Line4" value="Kraj strofe:">
<PARAM name="Line5" value="Nova linija.">
Proverite
da li Vas browser podrzava JAVA-u.
</APPLET>
</BODY>
</HTML>
Atributi oznake APPLET
atribut |
opis |
ALIGN |
podešavanje poravnjanja apleta: LEFT, RIGHT, TOP, MIDDLE, BOTTOM |
ALT |
alternativni tekst koji se ispisuje ako aplet se ne može izvršiti |
ARCHIVE |
niz naziva arhiva razdvojenih zarezima, arhive sadrže klase ili druge
resurse koji se prethodno učitavaju |
BOXBGCOLOR |
pozadinska boja pravougaonika za aplet pri učitavanju |
BOXFGCOLOR |
prednja boja teksta pravougaonika za aplet pri učitavanju |
BOXMESSAGE |
poruka koja se prikazuje pr učitavanju apleta |
CODE |
(relativni u odnosu na CODEBASE) URL resursa koji sadrži prevedene
potklase apleta |
CODEBASE |
URL baze koda (ako se ne navede, koristi se tekući URL) |
HEIGHT |
visina prozora apleta u pikselima |
WIDTH |
širina prozora apleta u pikselima |
HSPACE |
veličina dodatnog horizontalnog prostora u pikselima (oko apleta) |
VSPACE |
veličina dodatnog vertikalnog prostora u pikselima (oko apleta) |
MAYSCRIPT |
indikator dozvole komunikacije JavaScript/aplet |
NAME |
naziv apleta |
PROGRESSCOLOR |
boja trake napredovanja pri učitavanju apleta |
OBJECT |
naziv resursa koji sadrži serijalizovanu verziju apleta |
Česte akcije
akcija |
sintaksa |
povezivanje sa serverom |
Socket socket=new Sicket(getCodeBase().getHost(), port); |
dobijanje parametara |
String s=getParameter("name"); |
učitavanje nove strane navigatora |
getAppletContext().showDocument(urlString);
ili
getAppletContext().showDocument(urlString, target);
gde target moze biti
_self, _parent, _top, _blank, "naziv" sa istim znacenjem kako kod okvira
u HTML-u |
učitavanje slika |
Image img=getImage(getDocumentBase(), "slika.gif"); |
reprodukcija zvuka |
play(getDocumentBase(), "zvuk.wav");
clip.play(); //jednom
clip.loop(); //uz ponavljanje
clip.play(); //zaustavljanje |
prikaz poruke u navigator status pruzi |
getAppletContent().showStatus(poruka); |