Musime si najprv uvedomit, co je to vlastne applet, ako a kde sa vykonava jeho kod.
Applety, ake mozeme najst na Internete, mam na mysli subory s priponou class, su stiahnute po sieti na lokalny pocitac uzivatela, ktory si prezera danu stranku, kde sa tento kod vykonava. Predstavte si, ze by nemal applet ziadne obmedzenia a mohol by sa spravat ako rovnocenna aplikacia na Vasom disku. Co by appletu FormatDisk zabranilo, aby Vam formatoval disk? Nemusi to byt az take zle, ale ziadna aktivita nie je ziaduca, pokial presne nevieme, co od nej mozeme ocakavat. Samozrejme, ze by Internet neobsahoval applety s menom FormatDisk alebo ine destrukcne applety, ale ani vysoko konstrukcne aktivity nie su ziaduce. Napriklad applet CreateFile by vytvaral 100000 malickych suborov nahodne rozmiestnenych po disku s nahodne generovanymi menami.
Popisme si podrobnejsie rozdiely medzi appletami a aplikaciami.
Nahrat obrazok do pamete v pripade appletu je naozaj trivialna vec. Staci zavolat metodu getImage, ktora nahra lubovolny obrazok z Internetu so specifikovanym URL. Dovod tohto obmedzenia je dizajn a nie bezpecnost.
Dobry napad najdete na listservery. Realizacia tohto napadu by mohla vyzerat takto:import sun.awt.image.URLImageSource; ... img = Toolkit.getDefaultToolkit(). createImage(new URLImageSource(url)); ...
Cele filozofovanie zhrniem do jednej vety.
Applet nema pristup na disk. Mysli sa tym, ze applet nemoze:Ak som nieco vynechal, co sa tyka diskov, tak plati, ze nemoze! :-)
- testovat existenciu subora
- testovat typ subora
- zistovat dlzku subora
- vytvarat subor
- zapisovat do subora
- citat zo subora
- vytvarat adresar
- testovat, ci subor je adresar
- testovat casovu znamku subora
Ak chcete alebo potrebujete pristupovat na disk, je to jasne, musite implementovat aplikaciu a nie applet.
Applet je silne obmedzeny, co sa tyka komunikacie. Nie je mozne nadviazat spojenie pomocou soketu s lubovolnym pocitacom na sieti. Je mozne nadviazat spojenie iba s pocitacom, z ktoreho bol dany applet stiahnuty.
Applety nie su schopne pristupovat ku knizniciam sun.* a nemozu linkovat kniznize pomocou metody System.loadlibrary().
Applet nemoze riadit cinnost inych threadov ako tych, ktore boli vytvorene z neho samotneho (v jeho tele), cize patria do skupiny threadov vytvorenych appletom.
V pripade, ze potrebujete naprogramovat server, mate rozhodnute. Budete programovat aplikaciu, pretoze metody accept() a listen() su podporovane jedine v aplikaciach.