Životni ciklus appleta

  1. broser učitava HTML stranicu i pronalazi oznaku <APPLET>
  2. browser analizira oznaku <APPLET>tražeći atribut CODE i eventualno CODEBASE.
  3. browser učitava .class datoteku appleta sa prethodno pronađenog URL-a
  4. browser konvertuje byte-ove u Java klasu, dakle objekt od java.lang.Class.
  5. browser instancira apletovu klasu kako bi formirao objekt-aplet. To zahteva da aplet ima konstruktor bez argumenata.
  6. browser poziva apletov init() metod.
  7. browser poziva apletov start() metod.
  8. 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)
  9. browser poziva appletov stop() metod.
  10. 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:
Aplet ne može:

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".

slika apleta i vrednost poruke

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).

aplet s anepoznatim brojem parametara, ali predvidivim nazivima

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);