Introducere program Java de dimensiuni reduse ce gestioneaz o suprafa de afiare (container) care poate fi inclus ntr-o pagin Web. miniaplicatie. poate fi format din una sau mai multe clase o clas principal ce extinde clasa Applet (JApplet) - clasa ce trebuie specificat n documentul HTML ce descrie pagina Web n care dorim s includem appletul. un applet nu poate fi executat independent, va fi executat de browserul n care este ncrcat pagina Web ce conine appletul respectiv. ciclul de viat al unui applet: dictat de evenimentele generate de ctre browser la vizualizarea documentului HTML ce conine appletul. Ierarhia claselor din care deriv appleturile Pachetul care ofer suport pentru crearea de appleturi este java.applet. In pachetul javax.swing exist i clasa JApplet, care extinde Applet, oferind suport pentru crearea de appleturi pe arhitectura de componente JFC/Swing. Crearea unui applet simplu 1. Scrierea codului sursa import java.awt.* ; import javax.swing.* ; public class FirstApplet extends JApplet { Image img; public void init() { img = getImage(getCodeBase(), image.jpg"); } public void paint (Graphics g) { g.drawImage(img, 100, 0, this); g.drawOval(0,0,120,50); g.drawString(Ce ziceti de asta?", 0, 25); } } Pentru a putea fi executat de browser, clasa principal a appletului trebuie s fie public. Crearea unui applet simplu (2) 2. Salvarea fiierelor surs - clasa principal a appletului va fi salvat ntr-un fiier cu acelai nume i extensia java - FirstApplet.java. 3. Compilarea - javac FirstApplet.java - rezulta FirstApplet.class 4. Rularea appletului Applet-urile nu ruleaza independent. Ele pot fi rulate doar prin intermediul unui browser: Internet Explorer, Netscape, Mozilla, Opera, etc. sau printr-un program special cum ar fi appletviewer din kitul de dezvoltare J2SDK. Crearea unui applet simplu (3) Pentru a executa un applet trebuie s facem dou operaii: Crearea unui fiier HTML n care vom include applet- ul. fiierul simplu.html: <html> <head> <title>Primul applet Java</title> </head> <body> <applet code=FirstApplet.class width=400 height=400> </applet> </body> </html> Vizualizarea appletului: se deschide fisierul simplu.html folosind unul din browser-ele amintite sau efectund apelul: appletviewer simplu.html. Ciclul de via al unui applet Fiecare etap este strns legat de un eveniment generat de ctre browser i determin apelarea unei metode specifice din clasa ce implementeaz appletul. Incrcarea n memorie Este creat o instana a clasei principale a appletului i ncrcat n memorie. Iniializarea Este apelat metoda init ce permite iniializarea diverselor variabile,citirea unor parametri de intrare, etc. Pornirea Este apelat metoda start Execuia propriu-zis Interaciunea dintre utilizator i componentele afiate pe suprafaa appletului Executarea unui anumit cod ntr-un fir de execuie. In unele situaii ntreaga execuie a appletului se consum la etapele de iniializare i pornire. Ciclul de via al unui applet Oprirea temporar - este apelat metoda stop ce oprete temporar execuia pe perioada n care nu este vizibil, pentru a nu consuma inutil din timpul procesorului. n cazul n care utilizatorul prsete pagina Web n care ruleaz appletul dac fereastra browserului este minimizat. n momentul n care pagina Web ce conine appletul devine din nou activ, va fi reapelat metoda start. Oprirea definitiv - La nchiderea tuturor instanelor browserului folosit pentru vizualizare, appletul va fi eliminat din memorie i va fi apelat metoda destroy a acestuia, pentru a-i permite s elibereze resursele deinute. - Apelul metodei destroy este ntotdeauna precedat de apelul lui stop. Metodele specifice appleturilor Aceste metode sunt apelate automat la diverse evenimente generate de ctre browser i nu trebuie apelate explicit din program sunt definite n clasa Applet Metoda Situaia n care este apelat init La iniializarea appletului. Teoretic, aceast metod ar trebui s se apeleze o singur dat, la prima afiare a appletului n pagin, ns, la unele browsere, este posibil ca ea s se apeleze de mai multe ori. start Imediat dup iniializare i de fiecare dat cnd appletul redevine activ, dup o oprire temporar. stop De fiecare dat cnd appletul nu mai este vizibil (pagina Web nu mai este vizibil, fereastra browserului este minimizat, etc) i nainte de destroy. destroy La nchiderea ultimei instane a browserului care a ncrcat n memorie clasa principal a appletului. Structura general a unui applet import javax.swing.*; import java.awt.*; import java.awt.event.*; public class StructuraApplet extends JApplet { public void init() { } public void start() { } public void stop() { } public void destroy() { } } Interfaa grafic cu utilizatorul Clasa Applet este o extensie a superclasei Container, ceea ce nseamn c appleturile sunt, nainte de toate, suprafee de afiare. Plasarea componentelor, gestionarea poziionrii lor i tratarea evenimentelor generate se realizeaz la fel ca i n cazul aplicaiilor. Uzual, adugarea componentelor pe suprafaa appletului precum i stabilirea obiectelor responsabile cu tratarea evenimentelor generate sunt operaiuni ce vor fi realizate n metoda init. Gestionarul de poziionare implicit este FlowLayout, ns acesta poate fi schimbat prin metoda setLayout. Definirea i folosirea parametrilor Parametrii sunt pentru appleturi ceea ce argumentele de la linia de comand sunt pentru aplicaiile independente. Permit utilizatorului s personalizeze aspectul sau comportarea unui applet fr a-i schimba codul i recompila clasele. Definirea: n cadrul tagului APPLET din documentul HTML ce conine appletul prin atributul PARAM. Fiecare parametru are un nume, specificat prin NAME i o valoare, specificat prin VALUE: <APPLET CODE="TestParametri.class" WIDTH=100 HEIGHT=50> <PARAM NAME=textAfisat VALUE="Salut"> <PARAM NAME=numeFont VALUE="Times New Roman"> <PARAM NAME=dimFont VALUE=20> </APPLET> tipul parametrilor este ntotdeauna ir de caractere, indiferent dac valoarea este ntre ghilimele sau nu. Fiecare applet are i un set de parametri prestabilii ale cror nume nu vor putea fi folosite pentru definirea de noi parametri Definirea i folosirea parametrilor getParameter: primete ca argument numele unui parametru i returneaz valoarea acestuia. In cazul n care nu exist nici un parametru cu numele specificat, metoda ntoarce null, caz n care programul trebuie s atribuie o valoare implicit variabilei n care se dorea citirea respectivului parametru. Orice applet poate pune la dispoziie o documentaie referitoare la parametrii pe care i suport Aceasta se realizeaz prin supradefinirea metodei getParameterInfo, care returneaz un vector format din triplete de iruri (numele parametrului, tipul su i o descriere a sa). Informaiile furnizate de un applet pot fi citite din browserul folosit pentru vizualizare prin metode specifice acestuia. De exemplu, n appletviewer informaiile despre parametri pot fi vizualizate la rubrica Info din meniul Applet, n Netscape se folosete opiunea Page info din meniul View, etc. Folosirea parametrilor un applet care s afieaz un text primit ca parametru, folosind un font cu numele i dimensiunea specificate de asemenea ca parametri. import javax . swing.* ; import java . awt .*; public class TestParametri extends JApplet { String text , numeFont ; int dimFont ; public void init () { text = getParameter ("textAfisat"); if ( text == null ) text = " Hello "; // valoare implicita numeFont = getParameter ("numeFont"); if ( numeFont == null ) numeFont = " Arial "; try { dimFont = Integer . parseInt ( getParameter ("dimFont")); } catch ( NumberFormatException e) { dimFont = 16; } } Folosirea parametrilor public void paint ( Graphics g) { g. setFont (new Font ( numeFont , Font .BOLD , dimFont )); g. drawString (text , 20, 20); } public String [][] getParameterInfo () { String [][] info = { // Nume Tip Descriere {" textAfisat ", " String ", " Sirul ce va fi afisat "}, {" numeFont ", " String ", " Numele fontului "}, {" dimFont ", "int ", " Dimensiunea fontului "} }; return info ; } } Tag-ul APPLET Sintaxa complet a tagului APPLET, cu ajutorul cruia pot fi incluse appleturi n cadrul paginilor Web este: <APPLET CODE = clasaApplet WIDTH = latimeInPixeli HEIGHT = inaltimeInPixeli [ARCHIVE = arhiva.jar] [CODEBASE = URLApplet] [ALT = textAlternativ] [NAME = numeInstantaApplet] [ALIGN = aliniere] [VSPACE = spatiuVertical] [HSPACE = spatiuOrizontal] > [< PARAM NAME = parametru1 VALUE = valoare1 >] [< PARAM NAME = parametru2 VALUE = valoare2 >] ... [text HTML alternativ] </APPLET> Atributele puse ntre paranteze ptrate sunt opionale. Tag-ul APPLET CODE = clasaApplet Numele fiierului ce conine clasa principal a appletului. Acesta va fi cutat n directorul specificat de CODEBASE. Extensia .class poate sau nu s apar. WIDTH =latimeInPixeli, HEIGHT =inaltimeInPixeli Specific limea i nlimea suprafeei n care va fi afiat appletul. Sunt obligatorii. ARCHIVE = arhiva.jar Specific arhiva n care se gsesc clasele appletului. CODEBASE = directorApplet Specific URL-ul la care se gsete clasa appletului. Uzual se exprim relativ la directorul documentului HTML. In cazul n care lipsete, se consider implicit URL-ul documentului. ALT = textAlternativ Specific textul ce trebuie afiat dac browserul nelege tagul APPLET dar nu poate rula appleturi Java. Tag-ul APPLET NAME =numeInstantaApplet Ofer posibilitatea de a da un nume respectivei instane a appletului, astfel nct mai multe appleturi aflate pe aceeai pagin s poat comunica ntre ele folosindu-se de numele lor. ALIGN =aliniere Semnific modalitatea de aliniere a appletului n pagina Web. Acest atribut poate primi una din urmtoarele valori: left, right, top, texttop, middle, absmiddle, baseline, bottom, absbottom VSPACE =spatiuVertical, HSPACE = spatiuOrizontal Specific numarul de pixeli dintre applet i marginile suprafetei de afiare. PARAM Tag-urile PARAM sunt folosite pentru specificarea parametrilor unui applet text HTML alternativ Este textul ce va fi afiat n cazul n care browserul nu ntelege tagul APPLET. Browserele Java-enabled vor ignora acest text. Alte metode oferite de clasa Applet Punerea la dispozitie a unor informaii despre applet - getAppletInfo: permite specificarea unor informaii legate de applet cum ar fi numele, autorul, versiunea, etc. Metoda returneaz un sir de caractere continnd informaiile respective. public String getAppletInfo() { return "Applet simplist, autor necunoscut, ver 1.0"; } Aflarea adreselor URL referitoare la applet getCodeBase - returneaz URL-ul directorului ce conine clasa appletului; getDocumentBase - returneaz URL-ul directorului ce conine documentul HTML n care este inclus appletul respectiv. Aceste metode sunt foarte utile deoarece permit specificarea relativ a unor fiiere folosite de un applet, cum ar fi imagini sau sunete. Alte metode oferite de clasa Applet Afiarea unor mesaje n bara de stare a browserului public void init() { showStatus("Initializare applet..."); } Afiarea imaginilor prin intermediul unei componente ce permite acest lucru (Canvas), fie direct n metoda paint a applet- ului, folosind metoda drawImage a clasei Graphics. obinerea unei referine la imaginea respectiv se va face cu ajutorul metodei getImage din clasa Applet. argument: adresa URL absolut a fiierului ce reprezint imaginea calea relativ la o anumit adres URL cea a directorului n care se gsete documentul HTML ce conine appletul (getDocumentBase) cea a directorului n care se gsete clasa appletului (getCodeBase). Afiarea imaginilor import javax . swing . *; import java . awt .*; public class Imagini extends JApplet { Image img = null ; public void init () { img = getImage ( getCodeBase () , "taz.gif"); } public void paint ( Graphics g) { g. drawImage (img , 0, 0, this ); } } Alte metode oferite de clasa Applet Aflarea contextului de execuie: pagina n care acesta ruleaz, eventual mpreun cu alte appleturi este descris de interfaa AppletContext. Crearea unui obiect ce implementeaz aceast interfa se realizeaz de ctre browser, la apelul metodei getAppletContext a clasei Applet. Prin intermediul acestei interfee un applet poate vedea n jurul sau, putnd comunica cu alte applet- uri aflate pe aceeasi pagin sau cere browser-ului s deschid diverse documente AppletContext context = getAppletContext(); Afiarea unor documente n browser showDocument: primete adresa URL a fiierului ce conine documentul pe care dorim sa-l deschidem (text, html, imagine, etc). Aceast metod este accesat prin intermediul contextului de execuie al appletului. try { URL doc = new URL("http://www.pub.ro"); getAppletContext().showDocument(doc); } catch(MalformedURLException e) { System.err.println("URL invalid! \n" + e);} Arhivarea appleturilor pentru ca un applet aflat pe o pagin Web s poat fi executat codul su va fi transferat de pe serverul care gzduiete pagina Web solicitat pe maina clientului. dimensiunea fiierelor care formeaz appletul trebuie s fie ct mai redus dac appletul conine i alte clase n afar de cea principal sau diverse resurse (imagini, sunete, etc), acestea vor fi transferate prin reea abia n momentul n care va fi nevoie de ele, oprind astfel temporar activitatea appletului pn la ncrcarea lor. cea mai eficient modalitate de a distribui un applet este s arhivm toate fiierele necesare acestuia. Arhivarea fiierelor unui applet se face cu utilitarul jar, oferit n distribuia J2SDK. // Exemplu jar cvf arhiva.jar ClasaPrincipala.class AltaClasa.class imagine.jpg sunet.au // sau jar cvf arhiva.jar *.class *.jpg *.au Includerea unui applet arhivat ntr-o pagin Web se realizeaz specificnd pe lng numele clasei principale i numele arhivei care o conine: <applet archive=arhiva.jar code=ClasaPrincipala width=400 height=200 /> Restricii de securitate un applet se execut pe maina utilizatorului care a solicitat pagina Web ce conine appletul respectiv este foarte important s existe anumite restricii de securitate care s controleze activitatea acestuia, pentru a preveni aciuni ru intenionate, cum ar fi tergeri de fiiere, etc., care s aduc prejudicii utilizatorului. procesul care ruleaz appleturi instaleaz un manager de securitate, un obiect de tip SecurityManager care va superviza activitatea metodelor appletului, aruncnd excepii de tip SecurityException n cazul n care una din acestea ncearc s efectueze o operaie nepermis. Un applet nu poate s: Citeasc sau s scrie fiiere de pe calculatorul pe care a fost ncarcat (client). Deschid conexiuni cu alte maini n afar de cea de pe care provine (host). Porneasc programe pe maina client. Citeasc diverse proprieti ale sistemului de operare al clientului. Ferestrele folosite de un applet, altele dect cea a browserului, vor arta altfel dect ntr-o aplicaie obinuit, indicnd faptul c au fost create de un applet. Appleturi care sunt i aplicaii Deoarece clasa Applet este derivat din Container, deci i din Component, ea descrie o suprafa de afiare care poate fi inclus ca orice alt component ntr-un alt container, cum ar fi o fereastr. Un applet poate funciona i ca o aplicaie independent astfel: Adugm metoda main clasei care descrie appletul, n care vom face operaiunile urmtoare. Crem o instan a appletului i o adugm pe suprafaa unei ferestre. Apelm metodele init i start, care ar fi fost apelate automat de ctre browser. Facem fereastra vizibil. Applet i aplicaie import java . applet . Applet ; import java . awt .*; public class AppletAplicatie extends Applet { public void init () { add (new Label (" Applet si aplicatie ")); } public static void main ( String args []) { AppletAplicatie applet = new AppletAplicatie (); Frame f = new Frame (" Applet si aplicatie "); f. setSize (200 , 200) ; f.add(applet , BorderLayout . CENTER ); applet . init (); applet . start (); f. show (); } }