This document was uploaded by user and they confirmed that they have the permission to share
it. If you are author or own the copyright of this book, please report to us by using this DMCA
report form. Report DMCA
Programare Java Curs – 6 CREAREA DE PROGRAME INTERACTIVE PENTRU WEB Prima oara cand au aparut pe scara larga aplicatiile Java pentru web a fost in 1995 , atunci cand Netscape Navigator a inceput sa ruleze applet-uri . In general o aplicatie Java dedicata utilizarii pe web , in cadrul unei pagini HTML , se numeste applet si are o structura diferita fata de o aplicatie normala scrisa in limbajul Java . DIFERENTA INTRE APPLET-URI SI APLICATII Aceasta diferenta consta in principal in modul cum acestea sunt rulate . Aplicatiile sunt rulate prin intermediul unui interpretor Java care incarca fisierul clasa principal al aplicatiei . Acest lucru se face de obicei din linia de comanda falosind utilitarul “java.exe” al pachetului Java2 SDK ( sau JDK in versiunile mai vechi ) . Pe de alta parte , applet-urile sunt rulate de orice browser care suporta Java – cum ar fi Netscape Navigator , Internet Explorer , Sun HotJava sau Opera . Applet-urile pot fi testate si cu ajutorul utilitarului “appletviewer.exe” , inclus in pachetul Java2 SDK . Trebuie mentionat ca “appletviewer” ignora toate celelalte elemente ale paginii web in care inseram applet-ul nostru scris in Java . Pentru a rula un applet acesta trebuie iglobat intr-o pagina web folosind tag-uri HTML , in acelasi mod in care sunt inglobate imagini sau alte elemente . Atunci cand un utilizator cu un browser compatibil cu Java incarca o pagina web care contine un applet , browser-ul trajsfera codul applet-ului de pe serverul web si il executa pe sistemul local al utilizatorului . Nu este nevoie de un interpretor Java separat – el este inclus in browser . Ca orice aplicatie , un applet Java contine un fisier clasa si orice alte clase externe necesare rularii . Biblioteca de clase standard a Java este inclusa automat . Deoarece applet-urile Java ruleaza in cadrul unui browser Java , o parte din efortul crearii unei interfete utilizator este eliminata ; exista deja o fereastra in care applet-ul poate rula , un loc unde sa se afiseze grafica si de unde sa se primeasca datele de intrare precum si interfata browser-ului . OBS : Este posibil ca un program Java sa functioneze atat ca applet cat si ca aplicatie independenta . Cu toate ca pentru crearea acestor tipuri de programe se folosesc proceduri separate , acestea nu intra in conflict una cu alta . Caracteristicile specifice applet-urilor vor fi ignorate atunci cand programul ruleaza ca aplicatie si viceversa . ALEGEREA VERSIUNII DE JAVA PENTRU DEZVOLTARE In cazul crearii de applet-uri Java pentru web un programator mai are o problema suplimentara in afara de preogramarea propriu-zisa ; programul sau trebuie sa poata rula pe toate browser-ele existente ( mai realist vorbind pe cat mai multe dintre ele ) . In acest moment Java 1.02 este singura versiune de limbaj suportata absolut complet atat de Netscape Navigator cat si de Microsoft Internet Explorer ( aplicatii ce detin in jur de 90 de procente din piata browser-elor ) . Netscape si Microsoft au implementat si versiunile Java 1.1 si 2 ( la momentul actual – inceputul lui 2002 – ultima versiune ) dar implementarile mai produc anumite surprize neplacute , in unele cazuri existand applet-uri care nu functioneaza corect in cazul programarii lor folosind ultima versiune a limbajului . Sun a gasit o modalitate de a ocoli aceste neajunsuri creand un program add-on ( complementar ) pentru browser-e , denumit Java Plug-in , care ne permite sa utilizam imbunatatirile aduse de Java 1.2 sau Java 2 . Acest program add-on este continut in pachetul JDK 1.2 si in toate celelate versiuni ale
1
mediului de dezvoltare : 1.3 si 1.4 ( ultima versiune la momentul februarie 2002 a pachetului de dezvoltare al Sun pentru limbajul Java 2 numindu-se Java2 SDK 1.4.0 ) . In general in acest moment se aplica o formula destul de bizara :
-
applet-urile se scriu folosind elemente Java 1.02 deoarece functioneaza pe toate browser-ele compatibile Java aplicatiile se scriu folosind Java 2 deoarece pot fi rulate pe orice sistem care contine un interpretor Java
Java 2 a fost proiectat astfel incat un program care foloseste numai facilitatile Java 1.02 sa se poata compila si sa ruleze cu succes in cadrul unui browser compatibil Java . Daca un applet foloseste una dintre facilitatile introduse de Java 1.1 sau Java 2 programul nu va rula pe browser-ele care nu suporta aceste versiuni si care nu au instalat add-on-ul de care aminteam mai sus . De multe ori imbunatatirile aduse limbajului de versiunile 1.1 sau 2 nici nu sunt vitale pentru aplicatiile de tip applet , gasindu-si o utilitate mult mai mare in domeniul aplicatiilor Java independente . In unele cazuri de applet-uri scrise pentru Java 1.02 compilatorul ne va atentiona ca anumite elemente au fost inlocuite si ca exista o solutie mai buna ; aceste atentionari ( warnings ) nu sunt mesaje de eroare ale compilatorului , SDK-ul creand un fisier clasa compilat si atragand doar atentia programatorului . RESTRICTII DE SECURITATE ALE APPLET-URILOR Deoarece applet-urile Java sunt executate pe sistemul local al utilizatorului exista unele restrictii foarte serioase referitoare la activitatile de care este capabil un applet . Daca aceste restrictii nu ar exista un programator Java ar putea scrie fara probleme un program care sa stearga toate fisierele de pe un hard disk , sa colecteze informatii private sau sa realizeze diferite brese in securitatea sistemului . Ca regula generala , applet-urile Java functioneaza dupa principiul “better safe than sorry “ ; unui applet ii sunt interzise urmatoarele activitati : -
sa citeasca sau sa scrie pe sistemul local al utilizatorului sa comunice cu un alt site decat cel de unde provine pagina web ce contine applet-ul sa ruleze programe executabile in sistemul local al utilizatorului sa incarce programe din sistemul utilizatorului ( executabile sau biblioteci partajate )
Toate aceste reguli se aplica applet-urilor in mod normal dar exista si posibilitatea ( din configurarea browser-elor ) de a modifica nivelul de securitate dorit , permitand accesul din anumite directoare sau conexiuni catre anumite site-uri . De exemplu , utilitarul “appletviewer.exe” permite definirea unei liste de control al accesului pentru directoarele unde applet-ul poate citi sau scrie fisiere . In practica insa trebuie sa tinem seama de posibilitatea de a intalni restrictii de securitate maxime iar pentru evitarea problemelor programatorul trebuie sa tina seama de actiunile care ii sunt teoretic interzise unui applet . O facilitate nou introdusa de Java 2 este foarte importanta in problema securitatii ; noua versiune a limbajului permite folosirea unor controale de securitate specifice care pot fi introduse sau eliminate din applet-uri si aplicatii . Aceste elemente dau posibilitatea unui utilizator web sa acorde “incredere” unui applet astfel incat acesta sa poata rula fara restrictii pe sistemul local . CREAREA APPLET-URILOR Un program Java contine o metoda main() , folosita pentru crearea obiectelor , stabilirea variabilelor de instanta si apelarea altor metode . Applet-urile nu poseda o metoda main() care sa fie apelata automat la lansarea programului . In schimb exista mai multe metode apelate in diferite puncte ale executiei unui applet .
2
Toate applet-urile sunt subclase ale clsei Applet , care apartine pachetului java.applet . Clasa Applet prezinta doua tipuri de comportament , care trebuie sa fie comune tuturor applet-urilor : -
capacitatea de a opera ca parte a browser-ului si de a trata evenimente ( cum ar fi de exemplu incarcarea paginii in browser ) capacitatea de a prezenta o interfata grafica pentru utilizator si de a prelua date de intrare de la utilizator
Cu toate ca un applet poate folosi orice alte clase are nevoie , clasa Applet este clasa principala care declanseaza executia unui applet . Subclasele pe care le vom crea , apartinand clasei Applet , vor avea formula : public class appletNou extends java.applet.Applet { // cod sursa } Toate applet-urile trebuie declarate public deoarece clasa Applet este o clasa publica . Aceasta cerinta este valabila numai pentru clasa principala a applet-ului ; orice alte clase externe pot fi publice sau private . Atunci cand un browser compatibil Java intalneste un applet Java intr-o pagina web , clasa applet-ului este incarcata impreuna cu celelalte clase externe folosite . Browser-ul creaza automat o instanta a clasei applet-ului si apeleaza metode ale clasei Applet atunci cand au loc anumite evenimente . Diferite applet-uri care folosesc aceeasi clasa folosesc instante diferite deci vom putea introduce mai multe copii ale applet-ului in aceeasi pagina si fiecare se va comporta diferit . PRINCIPALELE ACTIVITATI ALE APPLET-URILOR In locul metodei main() , applet-urile poseda metode care sunt apelate la aparitia anumitor evenimente pe parcursul rularii applet-ului . Un exemplu de astfel de metoda este paint() care este apelata ori de cate ori fereastra applet-ului trebuie afisata sau redesenata . In mod prestabilit aceste metode sunt nule – ele nu fac practic nimic . De exemplu metoda paint() , mostenita de la clasa Applet , este o metoda nula . Pentru a afisa ceva in fereastra applet-ului metoda paint() trebuie suprascrisa cu un comportament care sa permita afisarea de text , grafica sau alte elemente . a.
Initializarea
Initializarea apare o data cu incarcarea applet-ului . Initializarea poate consta in crearea obiectelor de care are nevoie applet-ul , setarea starii initiale , incarcarea unor imagini sau fonturi sau setarea uno parametri . Pentru a defini codul de initializare al unui applet trebuie suprascrisa metoda ini() : public void init() { // codul sursa } b.
Pornirea
Un applet este pornit dupa initializare . Pornirea poate aparea si daca applet-ul a fost anterior oprit . De exemplu un applet este oprit daca utilizatorul browser-ului urmeaza o legatura catre o alta pagina si este pornit din nou atunci cand utilizatorul revine in pagina care contine applet-ul . Pornirea poate aparea de mai multe ori pe parcursul ciclului de viata al unui applet , insa initializarea apare doar o data . Pentru a defini codul de pornire al unui applet trebuie suprascrisa metoda start() : public void start() { // codul sursa
3
} Codul metodei start() poate contine trimiterea anumitor mesaje obiectelor externe sau specificarea intrun anumit mod a faptului ca applet-ul isi incepe rularea . c.
Oprirea
Oprirea si pornirea merg una alaturi de cealalta . Oprirea apare atunci cand utilizatorul paraseste pagina care contine applet-ul curent sau atunci cand applet-ul se opreste singur apeland metoda stop() . In mod prestabilit orice fire de executie ( threads ) pe care applet-ul le-a lansat isi vor continua executia si dupa ce utilizatorul paraseste pagina . Prin suprascriere metodei stop() putem suspenda executia acestor fire si le putem reporni daca applet-ul este vizualizat din nou . In continuare se prezinta o forma a metodei stop() : public void stop() { // codul sursa } d.
Distrugerea
Metoda destroy() permite applet-ului sa-si faca “curatenie” chiar inainte de a se elibera memoria alocata sau de a parasi browser-ul . Putem folosi aceasta metoda pentru a distruge orice fire de executie sau pentru a elibera orice alte obiecte care ruleaza . De obicei nu se suprascrie metoda destroy() decat daca exista anumite resurse care trebuie neaparat eliberate , cum ar fi fire de executie create de applet . Pentru a defini codul de distrugere al unui applet trebuie suprescrisa metoda destroy() : public void destroy() { // codul sursa } In cursurile anterioare a aparut un element inrudit cu destroy() : metoda finalize() . Diferenta intre aceste doua metode consta in faptul ca metoda destroy() se aplica doar applet-urilor iar finalize() este o metoda generica , ce permite unui obiect de orice tip sa-si elibereze resursele . Java poseda un recuperator automat al resurselor utilizate ( garbage collector ) , care administreaza memoria in locul nostru . Acesta recupereaza memoria ocupata de resurse dupa ce programul nu le mai foloseste , asa ca , in mod normal , nu trebuie sa folosim decat foarte rar metode ca destroy() sau finalize() . e.
Desenare
Desenarea este modul prin care un applet afiseaza ceva pe ecran : text , linii , imagini , etc. Desenarea poate aparea de foarte multe ori pe parcursul ciclului de viata al unui applet : o data dupa initializarea applet-ului , alta data atunci cand fereastra browser-ului este adusa in prim plan , alta data atunci cand fereastra browser-ului este mutata si asa mai departe . Pentru a se putea afisa ceva metoda paint() , din subclasa noastra Applet , trebuie suprascrisa . Metoda paint() arata in felul urmator : public void paint (Graphics g) { // codul sursa } Trebuie sa observam ca , spre deosebire de celelalte metode descrise anterior , metoda paint() preia un argument : o instanta a clasei Graphics . Acest obiect este creat si transmis metodei paint() de catre browser , deci nu trebuie sa ne facem probleme legate de definirea sa . Totusi , nu trebuie sa uitam sa importam clasa Graphics din pachetul java.awt in codul applet-ului nostru : import java.awt.Graphics; REALIZAREA UNUI APPLET
4
In cursul 3 s-a creat un applet Java denumit “Palindrom.java” cu scopul de a detalia conceptul de mostenire . Acum revenim la acelasi exemplu privindu-l acum doar ca applet : 1: import java.awt.Graphics; 2: import java.awt.Color; 3: import java.awt.Font; 4: 5: public class Palindrom extends java.applet.Applet { 6: Font f=new Font("TimesRoman",Font.BOLD,36); 7: 8: public void paint(Graphics monitor) { 9: monitor.setFont(f); 10: monitor.setColor(Color.red); 11: monitor.drawString("Go hang a salami , I'm a lasagna hog",5,40); 12: } 13: } Acest applet suprascrie metoda paint() . Deoarece applet-ul afiseaza doar cateva cuvinte pe ecran nu este nevoie de nici o initializare . Astfel nu este nevoie de metodele start() , stop() sau init() . Metoda paint() este locul unde se face toata treaba . Obiectul Graphics transmis metodei paint() pastreaza starea sistemului grafic , prin care se cunosc atributele curente ale suprafetei de desenare . Starea mai contine si detalii privind fontul curent sau culoarea folosita pentru operatiile de desenare . Liniile 9 si 10 definesc fontul si culoarea folosite pentru operatiile grafice . Obiectul Font este pastrat in variabila de instanta f iar obiectul reprezentand culoarea rosie este memorat in variabila red a clasei Color . Linia 11 foloseste fontul si culoarea curente pentru a desena sirul “Go hang a salami , I'm a lasagna hog" in pozitia 5 , 40 . Reamintesc ca pozitia 0 pentru x si y este punctul din stanga – sus al suprafetei de desenare a applet-ului , cu valoarea y crescand in jos asa incat valoarea 40 deplaseaza textul in jos . Daca implementam in clasa metodele corecte pentru applet – init() , start() , stop() , sau paint() – atunci applet-ul nostru va functiona corect fara a avea nevoie de un punct de start explicit . INSERAREA UNUI APPLET INTR-O PAGINA WEB Dupa ce am creat clasa sau clasele care compun applet-ul si le compilam in fisiere de tip class trebuie sa cream o pagina web in care sa introducem applet-ul . Applet-urile se insereaza intr-o pagina folosind eticheta HTML