Proiectarea Si Realizarea Unei Solutii Pentru Evidenta Cartilor Dintr O Biblioteca
Proiectarea și realizarea unei soluții pentru evidența cărților dintr-o bibliotecă
Cap. 1. Introducere
Context
Prelucrarea datelor
Pornind de la ideea că activitatea umană, indiferent de contextul în care se desfășoară, conduce la generarea de informație, iar cu cât aceasta este mai complexă, volumul de informație rezultat este mai amplu si mai diversificat, aceasta tinde să satureze sau poate ajunge chiar să blocheze procesul decizional. Astfel se poate ajunge în situații în care poate apărea un conflict între extinderea volumului de informații și capacitățile limitate furnizate de sistemele clasice de prelucrarea a informației, sisteme care prezintă carențe în furnizarea rapidă și corectă a informației necesară luării de decizii.
Procesul de prelucrarea al datelor a început să capete o pondere din ce în ce mai mare în activitatea societății moderne. Apariția și dezvoltarea calculatorului, dar și a componentelor sale auxiliare, a reprezentat o adevărată revoluție în procesul tehnologic. La ora actuală putem afirma despre calculator că a devenit o unealtă indispensabilă în activitățile noastre zilnice, iar tehnologia comunicațiilor și posibilitățile oferite de Internet au produs transformări în întreaga societate, pătrunzând în toate aspectele vieții economice, sociale și culturale. Datorită potențialului mare de eficientizare a muncii, calculatorul a fost introdus pe scară largă în toate domeniile activității productive, începând de la munca de birou și până la activitățile din halele de producție. Acesta a ajutat la reducerea timpului necesar prelucrării datelor și a dus la creșterea calității lucrărilor datorită eliminării greșelilor datorate factorilor umani (neatenția sau oboseala operatorilor). [1]
La nivel de societate calculatoarele au diverse întrebuințări, iar în funcție de domeniul de activitate putem menționa câteva:
domeniul administrativ (inclusiv cel guvernamental) – calculatoarele sunt folosite in numeroasele acțiuni decizionale, precum și pentru colectarea taxelor, fără a mai fi nevoie să se aștepte în fața unui ghișeu pentru a plăti aceste taxe.
mediul de afaceri – reprezintă un domeniu în care calculatoarele capătă o tot mai larga aplicabilitate datorită rapidității cu care trebuie luate deciziile, a cantității mari de informații ce pot influenta aceste decizii, precum si a volumului de date ce se vehiculează. Câteva dintre aplicațiile software folosite uzual in mediul de afaceri sunt: procesare de text, calcul tabelar, aplicații pentru salarii, programe de contabilitate, aplicații de e-mail, navigare pe web etc.
aviație și transporturi – pentru dirijarea traficului;
domeniul bancar – calculatoarele au o foarte mare: utilizare, fiind folosite pentru calculul dobânzilor, la înregistrarea depozitelor sau a creditelor acordate, la crearea si gestionarea bazei de date a clienților, etc.;
domeniul educațional – cu ajutorul calculatorului se poate învăța de acasă fără a mai fi nevoie de deplasarea către o instituție de învățământ și fără a depinde de un anumit program. Cu ajutorul unei conexiuni la Internet se pot caută mai multe cursuri dintr-un anumit domeniu având astfel acces la mai multe opinii (spre deosebire de modalitatea clasica de predare in care aveam prezentata doar opinia profesorului de curs). Educația cu ajutorul calculatorului se numește CBT (Computer Based Training). [2]
Domeniile enumerate mai sus reprezintă doar o mică parte din posibilitățile care le oferă utilizarea calculatorului, aceasta fiind într-o continuă diversificare.
Pentru a putea fi utilizat, un calculator are nevoie de programe informatice care să îi specifice acțiunile ce trebuiesc îndeplinite și modul de executare al acestora. Aceste programe sau mai bine zis pachete de programe reprezintă componenta software a unui calculator. Diversitatea domeniilor în care calculatorul și-a făcut loc a impus necesitatea dezvoltării de aplicații software specifice fiecărui domeniu în parte. Astfel au luat naștere programe pentru editare text, pentru gestiunea datelor, pentru desenare etc.
SISTEM INFORMATIC
Un sistem informatic este un sistem ce permite introducerea de date prin procedee manuale sau prin culegerea automată de către sistem, stocarea acestora, precum și preluarea și extragerea informației (rezultate) sub diverse forme. Informațiile sunt stocate și manevrate prin intermediul datelor (fapte, noțiuni, instrucțiuni reprezentate sub o formă adecvată comunicării, interpretării sau prelucrării).
Componentele unui sistem informatic sunt: calculatoarele, programele, rețelele de calculatoare și utilizatorii. Modul in care circula informațiile în cadrul unei unități economice sau de alt profil formează sistemul informațional al acestei unități. Acest sistem este format din date, informații, procese de prelucrare a informațiilor, procese de prelucrare a datelor si echipamente fizice.
Într-un sistem informațional clasic, rolul prelucrării datelor și informațiilor revenea oamenilor. Aceasta făcea ca, în cazul unui volum mare de date, să fie nevoie de un număr foarte mare de oameni sau de un timp destul de îndelungat pentru prelucrarea lor. Totodată riscul apariției de erori de prelucrare, cu consecințe mai mari sau mai mici în funcționarea corectă a sistemului era destul de mare.
Astfel apariția și dezvoltarea calculatoarelor a permis conceperea de aplicații care să realizeze o cat mai bună prelucrarea a datelor, la viteze mult mai mari decât prin intermediul operatorilor umani, dar și o reducere semnificativă a costurilor prin reducerea personalului necesar. Aplicațiile informatice folosite în cadrul unei unități formează sistemul informatic al unității respective.
Din punct de vedere al interacțiunii dintre oameni și sistemul informatic, aceștia au diferite roluri in raport cu acesta: consumatori de informație (denumiți si utilizatori finali), furnizori de date/informații, operatori ai sistemului, administratori care întrețin si tot odată asigură buna funcționare a sistemului.
Prelucrarea datelor se poate realiza fie manual, fie automat, prin intermediul unui Sistem de Prelucrare Automata a Datelor (SPAD) în care prelucrarea automată a datelor presupune atât resurse materiale (echipamente electronice de calcul) cât și resurse umane (operatori, programatori, analiști), organizate în așa fel încât să le permită funcționarea în ansamblu.
Tema
Sistemul integrat de evidență a cărților unei biblioteci este ideal pentru informatizarea bibliotecilor mici sau mijlocii. Sistem propus de mine este recomandat bibliotecilor școlare, comunale și sătești și are rolul de a scurta timpul necesar căutării, împrumutării și returnării cărților și de a reduce costurile cu personalul necesar bunei funcționări al bibliotecii.
Prin intermediul acestui sistem informatic se asigură modernizarea ba chiar redefinirea bibliotecii. Modul de lucru computerizat reprezintă numai o extensie a bibliotecii, nicidecum un drum alternativ. Altfel spus, eforturile bibliotecarilor sunt diminuate, iar eficiența este maximizată. Un sistem informatic modern extinde calitativ serviciile oferite de o bibliotecă și eficientizează din punct de vedere economic această instituție.
În cele ce urmează voi prezenta câteva dintre principalele avantaje ale modului de lucru computerizat:
Accesul la informație
O bibliotecă tradițională pune la dispoziția cititorilor cataloage (alfabetice, sistematice) prin intermediul cărora aceștia au acces la colecțiile existente (carte, periodice, articole analitice, casete audio, discuri, compact discuri etc.). În unele cazuri, inexistența sau imposibilitatea întreținerii de cataloage este rezolvata prin accesul liber la raft. Dezavantajele accesului liber la raft față de consultarea cataloagelor sunt multiple: un titlu împrumutat apare ca inexistent, singura metoda de regăsire a informației este ordinea in raft, masuri de securitate suplimentare etc.
Metoda computerizată pune la dispoziția cititorului cataloage electronice. Prin intermediul computerului, cititorul poate regăsi un titlu folosind una din următoarele informații: numele autorului, titlul propriu-zis, editura. Practic, putem spune ca are la dispoziție mai multe cataloage tradiționale ordonate după: autor, titlu, editură. O carte a cărei descriere a fost introdusa in computer apare automat (fără efort suplimentar din partea bibliotecarului) in toate aceste cataloage, pe poziția corectă.
Prin intermediul cataloagelor electronice, o informație este obținută foarte rapid (in una-două secunde). Plimbările de la un sertar la altul sau de la un raft la altul sunt înlocuite de apăsarea unei taste. În câteva minute de "navigare" în informația oferită de computer pot regăsi informații care altfel ar fi necesitat poate chiar ore întregi de căutări sau ar fi fost imposibil de regăsit.
Metoda propusă este rapidă și eficientă. În acest mod, cu aceleași resurse, se pot informa mai mulți cititori, ba chiar mai bine. Cu ajutorul facilităților de căutare oferite de sistemul informatic de biblioteca, un întreg serviciu bibliografic stă la dispoziția cititorului și poate fi apelat oricând prin apăsarea unei taste.
Nivel superior de prelucrare a datelor
Prin intermediul produsului software activitatea de introducere a unei cărți, sau ștergere a acesteia din baza de date este profund simplificată. Timpul necesar completării cataloagelor cu date despre fiecare carte este redus într-un mod destul de semnificativ.
Activitatea de urmărire a scadențelor la împrumuturi, trimiterea scrisorilor (email-uri) de atenționare în cazul depășirii termenelor limită, sunt operațiuni care se vor realiza automat și care vor dispărea din atribuțiunile bibliotecarului.
Facilitarea accesului la informație
Datorită metodei computerizate, cititorul beneficiază de informații în mod direct, fără a mai fi nevoie de intervenția bibliotecarului. Spre exemplu, în momentul în care găsește un titlu în catalogul electronic, îi sunt afișate toate informațiile referitoare la descrierea bibliografică plus informații privind situația împrumutului pentru fiecare exemplar (din titlul dorit) în parte. Aceste informații sunt de genul: exemplarul este împrumutat și va fi returnat pe data de sau exemplarul este disponibil la raft (poate fi împrumutat).
În mod tradițional, cititorul completează un buletin de cerere, îl înmânează bibliotecarului, după care acesta caută un exemplar din titlul solicitat, însa în cazul în care toate exemplarele sunt împrumutate întregul efort este inutil. Din start, căutarea era sortită eșecului. Prin computerizare aceste eforturi inutile sunt eliminate.
Cazul în care cititorul este interesat de un titlu, dar nu există nici un exemplar disponibil, cititorul își operează automat (singur) o rezervare. Aceste rezervări sunt gestionate de sistemul informatic.
De asemenea, cititorul își poate consulta direct fisa si poate afla (din nou fără intervenția bibliotecarului) ce cărți a împrumutat și când trebuie să le restituie.
Biblioteca online
În mod cert, unul dintre principalele avantaje ale utilizării sistemului informatic propus este acela ca acesta facilitează accesul la aplicație de la orice calculator conectat la Internet indiferent de locul în care acest calculator se află.
Astfel orice utilizator poate accesa aplicația din orice locație, nemaifiind nevoie să se deplaseze până la sediul bibliotecii, eliminându-se astfel situațiile în care odată ajuns la bibliotecă constați că, cartea dorită de tine fie nu există in proprietatea biblioteci, fie că ea este momentan indisponibilă fiind împrumutată de către o altă persoană.
Așadar aplicația scutește timp prețios și efort nu numai pentru personalul bibliotecii, ci și pentru utilizatorii ei.
Economic
Deoarece trăim vremuri destul de grele, în care fiecare bănuț economisit contează un avantaj cert al utilizării sistemului de evidență al cărților din bibliotecă îl constituie și factorul economic deoarece acesta asigură o reducere substanțială a cheltuielilor necesare bunei funcționări a bibliotecii.
Această soluție implică achiziționarea unui computer (cel puțin), și a produsului software care să ruleze pe acel calculator, acestea fiind toate cheltuielile necesare bunei organizări și funcționări a bibliotecii din punctul de vedere al investiției în echipamente[3].
Cap. 2. Fundamentare teoretică
JAVA
Java este un limbaj de programare orientat obiect, destinat în principal programării Internet. Începutul limbajului Java este în toamna anului 1991, când firma Sun Microsystems a finanțat un proiect cu numele Green condus de James Gosling. Scopul echipei Green era să plaseze firma Sun Microsystems pe piața produselor electronice comerciale. Inginerii și dezvoltatorii de soft de la Sun au căutat microprocesoare care să ruleze pe o multitudine de mașini, în particular pe sistemele distribuite care lucrează în timp real. Cheia succesului firmei Sun a fost abilitatea lucrului pe platforme multiple. După patru ani de lucru, echipa Green finalizează specificațiile limbajului Java. Apoi, compania Sun Microsystems vinde licența firmelor IBM, Microsoft, Silicon Graphics, Adobe si Netscape.
Caracteristicile limbajului Java sunt:
limbaj interpretat și compilat. Un limbaj este interpretat dacă instrucțiunile unui program scris în acel limbaj sunt procesate linie cu linie și traduse în cod mașină. Un limbaj este compilat dacă un program scris în acel limbaj este tradus într-un cod pe care calculatorul îl poate „înțelege” (executa) mult mai ușor. Programele interpretate sunt mai lente decât cele compilate, însă cele compilate sunt de obicei independente de platforma respectiva. Programele Java sunt mai întâi compilate în niște fișiere intermediare asemănătoare codului de asamblare( numite byte code) , apoi acestea sunt interpretate de mediul de execuție Java în instrucțiuni mașina asociate platformei sistem.
limbaj independent de platformă. La instalarea limbajului Java, se va crea o mașină virtuala Java care are drept scop traducerea instrucțiunilor unui byte code Java în instrucțiuni mașină pentru platforma curenta. Astfel fișierele intermediare byte code pot fi copiate și executate pe orice platforma (indiferent ca este Windows, Unix, Solaris etc.).
limbaj orientat obiect. Cea mai importanta proprietate a limbajului Java este orientarea obiect, aceasta fiind privită ca o trăsătura implicita. Java pune în evidența toate aspectele legate de programarea orientată obiect: obiecte, trimiterea de parametrii, încapsularea, clase, biblioteci, moștenire si modificatori de acces.
limbaj concurent. Concurența (eng. multithreading) înseamnă capacitatea uni program de a executa mai multe secvențe de cod în același timp. O secvență de cod Java se numește fir de execuție (eng. thread). Datorită posibilității creării mai multor fire de execuție, un program Java poate să execute mai multe sarcini simultan de exemplu animația unei imagini, transmiterea unei melodii spre placa de sunet, comunicarea cu un server, alocarea și eliberarea de memorie etc.
limbaj simplu. Spre deosebire de C++, care este cel mai popular limbaj orientat obiect, Java elimină câteva dintre trăsăturile acestuia: posibilitatea moștenirii multiple este exclusă, șirurile sunt încapsulate într-o structură clasă. Spre deosebire de C⁄C++, în Java nu există pointeri, iar alocarea și dealocarea memoriei se fac automat. Există un mecanism de eliberare a memoriei (eng. garbage collection) pus în practică de un fir de execuție de prioritate mică.
limbaj distribuit. Java este distribuit deoarece permite utilizarea obiectelor locale și de la distanță. Limbajul Java oferă posibilitatea dezvoltării de aplicații pentru Internet, capabile să ruleze pe platforme distribuite și eterogene. În acest sens, Java respectă standardul IEEE( eng. Institute of Electrica land Electronics Engineers) pentru structurile de date, cum ar fi folosirea întregilor, numerelor în virgulă flotantă și șirurile de caractere. Java se poate utiliza în aplicații de rețea, deoarece respectă protocoalele de rețea, cum ar fi FTP, HTTP etc.
limbaj performant. Interpretorul Java este capabil să execute un byte code aproape la fel de repede ca un cod compilat. Având posibilitatea să lucreze cu fire de execuție multiple, Java justifică faptul că este un limbaj performant. De exemplu, un program Java poate aștepta citirea unor date, în timp ce un alt fir de execuție poate aloca sau elibera memoria necesară programului.
limbaj dinamic și robust. Java întârzie alocarea obiectelor și legarea dinamică a claselor pentru momentul execuției. Astfel, se vor evita erorile de alocare chiar dacă mediul s-a schimbat de la ultima compilare a programului. Faptul ca Java este robust se justifică prin eliminarea utilizării pointerilor, care erau generatoare de erori în cazul programelor C⁄C++. În schimb, Java verifică memoria dinamic înainte de a fi alocată și are un sistem automat de alocare ⁄dealocare a memoriei.
limbaj sigur. Programele Java nu pot accesa memoria heap, stack sau alte secțiuni protejate de memorie, deoarece Java nu folosește pointeri și aloca memorie doar la execuție. Înainte ca interpretorul Java să execute byte codul, se verifică daca este un cod Java valid prin cercetarea accesului la date, conversiile de date nepermise, valori și parametri incorecți, depășirea stivei. [4]
Atunci când ne referim la Java trebuie să avem în vedere trei aspecte:
Java, este în primul rând, un limbaj de programare
Java reprezintă o mașină virtuală
Java este o specificație privind o colecție de clase pentru programarea aplicațiilor
În ceea ce privește limbajul de programare Java trebuie spus că avem de-a face cu un
limbaj ca oricare altul, vezi Pascal sau C++, ce poate fi utilizat pentru scrierea aplicațiilor. Cu ajutorul limbajului Java putem scrie orice tip de aplicație pornind de la jocuri și terminând cu aplicații de tipul procesoarelor de texte sau aplicații de criptare a datelor.
În comparație cu alte limbaje de programare, Java se apropie foarte mult de C. Cu toate acestea, chiar dacă folosește în cea mai mare parte sintaxa limbajului C, totuși este un limbaj diferit. Niciodată un compilator Java nu va reuși să compileze programe scrise în C și mai mult decât atât, un program scris în C va trebui să sufere schimbări majore pentru a deveni un program Java.
Înainte de a discuta despre mașina virtuală Java trebuie să ne oprim asupra modului în care rulează aplicațiile în prezent. Mai clar spus, o aplicație Windows nu se va putea executa niciodată pe un calculator pe care rulează sistemul de operare MacIntosh. În mod similar, o aplicație Linux nu se va putea executa pe un sistem pe care rulează sistemul de operare Windows NT 4.0. De acum este clar pentru fiecare dintre noi care este motivul pentru care un program compilat pe o platformă nu va putea rula pe o altă platformă: ordonarea octeților – little endian sau big endian; setul de instrucțiuni mașină precum și multe alte motive pe care nu le mai enumer.
Java rezolvă problema independenței de platforma hardware sau software prin folosirea byte codurilor. Cu alte cuvinte compilatorul Java nu produce cod executabil nativ pentru o anumită platformă așa cum ar face un compilator de C. În schimb compilatorul Java produce un format special numit byte code Java. Acești byte code arată cam așa: CA FE BA BE 00 03 00 2D 00 3E 08 00 01 08 00 20 08
Totul pare foarte asemănător cu un limbaj mașină, dar spre diferență de un astfel de limbaj, formatul byte code este același pe orice platformă: fie că ne referim la o stație de lucru Sun fie la un sistem Windows.
În momentul în care dorim să executăm un program Java compilat nu putem proceda simplu ca și în cazul unui .exe pe Windows. Practic, programul Java compilat are nevoie de un interpretor pentru a fi executat. Acest interpretor, sau altfel spus mașină virtuală, este o aplicație care transformă byte code-urile Java în instrucțiuni native pe măsură ce acestea sânt citite în timpul rulării. Ca urmare a faptului că byte code-urile Java sânt complet independente de platformă este necesar ca interpretorul și câteva dintre bibliotecile să fie rescrise pentru fiecare platformă pe care trebuie să ruleze un program Java. Restul mediului de rulare, inclusiv compilatorul, precum și cea mai mare parte dintre bibliotecile de clase sânt scrise în Java.
Când vorbim despre clasele și metodele acestora folosite pentru scrierea aplicațiilor Java trebuie să spunem că acestea au aceeași formă și denumire pe orice platformă dat fiind faptul că au fost standardizate odată cu apariția limbajului. Cu alte cuvinte, orice producător care se hotărăște să implementeze bibliotecile Java pe o anumită platformă trebuie să respecte cu strictețe denumirile și forma claselor/metodelor.
Unul din obiectivele echipei de proiectanți ai limbajului Java a fost posibilitatea de a scrie cât mai ușor un cod fără greșeli. Conform declarațiilor lui Bill Joy, programele scrise în C prezintă, în medie, un bug la 55 linii de cod. Cel mai important aspect care vine în întâmpinarea programatorilor, astfel încât aceștia să facă cât mai puține greșeli, este simplitatea limbajului.
Respectând întrucâtva sintaxa limbajului C++, Java a eliminat o mare parte dintre caracteristicile care complicau prea mult limbajul și s-au dovedit mai puțin folositoare. Supraîncărcarea operatorilor, de exemplu, a fost eliminată din Java deoarece era o facilitate generatoare de mari erori mai ales la proiecte software care necesitau lucrul în echipă.
Aproape jumătate dintre erorile unei aplicații apar din cauza proastei gestionări a memoriei. În acest sens, limbajul Java oferă managementul automat al memoriei. Odată alocat spațiul necesar unui obiect programatorul nu mai trebuie să-și facă probleme privind dealocarea spațiului respectiv deoarece colectorul de gunoaie al mașinii virtuale Java execută acest lucru automat.
Programarea orientată obiect este cuvântul de ordine al anilor '90. Deși acest concept a apărut într-o formă sau alta în anii 1960, pe când se lucra la limbajul Simula, adevărata implicare a avut loc odată cu pătrunderea pe piață a interfețelor grafice utilizator precum: Mac, Windows sau Motif.
În afară de tipurile primitive de date, tot ceea ce mișcă în cadrul limbajului Java este încapsulat în cadrul unui obiect. Inclusiv tablourile de elemente sânt obiecte. Nu mai avem de-a face, așa cum era cazul în C++, cu funcții situate complet în afara oricărei clase, funcții situate în domeniul global. În Java totul trebuie să fie înglobat în cadrul uneia sau alteia dintre clasele care fac parte din aplicație – fără excepție.
Java a fost proiectat să fie portabil nu doar sub formă de cod sursă dar și sub formă de cod binar, compilat. Deoarece acest ideal este imposibil de atins ținând cont de arhitecturile procesoarelor, compilatoarele Java generează cod pentru o mașină abstractă cunoscută sub denumirea de mașina virtuală Java. Codul binar rezultat în urma compilării este denumit byte code.
Un program Java nu se execută niciodată în mod nativ pe mașina gazdă. În schimb, programul nativ special, denumit interpretorul Java sau mașina virtuală Java, citește byte code-urile și execută instrucțiunile mașină native corespondente. Byte code-urile sânt aceleași pe orice platformă, singurul lucru care diferă de la o platformă la alta fiind interpretorul.
Implementările Mașinii virtuale Java pentru diferite platforme hard și soft se bazează pe standardul industrial POSIX. Acest standard oferă o definire foarte clară a interfeței ce trebuie respectată de către un sistem portabil. Implementarea mașinii virtuale pe noi arhitecturi este simplă atât timp cât platforma țintă îndeplinește cerințele de bază cum ar fi suportul pentru aplicații multifir (eng. multithreading).
În al doilea rând, Java este un limbaj independent de platformă deoarece s-au eliminat orice construcții dependente de arhitectura hard. Mai clar spus, o variabilă de tip întreg va ocupa întotdeauna patru octeți, indiferent dacă este vorba despre un procesor Pentium, SPARC sau un procesor PowerMac.
Prin eliminarea pointerilor expliciți și a aritmeticii pointerilor din Java, programele scrise în acest limbaj nu pot accesa adrese arbitrare din memorie. Depășirea limitelor unui tablou nu este permisă, iar atunci când totuși acest lucru are loc se generează o excepție.
În plus față de acest lucru, limbajul este puternic tipizat. Acest lucru înseamnă că toate variabilele trebuie să-și declare tipul înainte de a fi utilizate. Odată declarate de un anumit tip variabilele nu-și pot schimba tipul. La fel, casturile sânt limitate și verificate în mod strict. În Java nu se va putea niciodată face cast între o variabilă de tip boolean și una de tip int. Sau între o variabilă de tip int și una de tip String. Chiar dacă vorbim despre tipurile numerice se poate face un cast de pe un int pe long dar niciodată invers. Aceasta deoarece mașina virtuală verifică întotdeauna ca printr-o simplă operație de cast să nu aibă loc o pierdere de informație. Altfel spus, încercând să faci un cast de pe un long pe un int este ca și cum ai încerca să torni un litru de lapte într-o ceașcă de cafea.
Limbajul Java este proiectat astfel încât să poată opera în medii distribuite. Ori acest lucru înseamnă o securitate maximă. Ținând cont de caracteristicile de securitate implementate în cadrul Java, aplicațiile nu pot fi invadate din afară de musafiri nepoftiți. Cu alte cuvinte sistemul de securitate al limbajului nu permite scrierea unor viruși sau invadarea sistemelor de fișiere.
Un applet va reuși probabil, în cel mai rău caz, să provoace probleme în mediul său de rulare – navigatorul Web. Dar nu va reuși sub nici o formă să atenteze la siguranța întregului sistem.
Performanța este totdeauna un aspect foarte important. Java asigură o viteză ridicată de execuție a aplicațiilor, comparabilă cu cea oferită de C++. Prin apariția compilatoarelor Just In Time, unele părți ale programului sânt compilate în cod nativ, în timpul rulării programului. Mai mult decât atât, colectarea automată a memoriei pe un fir de execuție separat ne asigură de faptul că memoria va fi disponibilă atunci când avem nevoie, ajungând astfel la o mai bună performanță.
Suportul pentru aplicații multifir face posibilă desfășurarea mai multor acțiuni în același timp în cadrul unui program. Aceasta conduce la un grad mult mai mare de interactivitate cu utilizatorul.
Un cod sursă în Java este compus dintr-un număr de piese diferite denumite simboluri ( en. token ) sau unități lexicale. Aceste simboluri sau unități lexicale sânt ca niște atomi. Un atom nu poate fi "spart" în piese mai mici fără a-și pierde înțelesul inițial. Practic există șapte tipuri de unități lexicale: cuvinte cheie, operatori, comentarii, identificatori, separatori, spații și literali. Acești atomi sânt combinați pentru a forma moleculele unui program Java, enunțurile și expresiile; iar mai apoi moleculele se combină în niște formațiuni mai largi precum sânt blocurile logice, metodele și clasele care compun aplicația.
Tot în acest context trebuie amintit faptul că limbajul Java folosește setul de caractere Unicode atît în timpul compilării aplicațiilor cât și în timpul rulării acestora. Unicode este un standard care are ca obiectiv, față de vechiul standard ASCII, cuprinderea tuturor caracterelor specifice limbilor vorbite ale Pământului. Practic, Unicode cuprinde chiar și un număr de 3000 de caractere care fac parte din alfabetul chinezesc restrâns. Ca urmare a acestui fapt, caracterele ce fac parte din setul Unicode sânt reprezentate pe doi octeți. Din motive de compatibilitate, primele 127 de caractere Unicode sânt aceleași cu cele din setul ASCII. Celelalte caractere, până la 65.535, pot fi reprezentate de forma \u urmat de patru cifre hexazecimale. De pildă \u0660.
În timpul compilării caracterele ASCII existente în codul sursă vor fi mai întâi convertite în caractere Unicode. Apoi în cadrul șirului Unicode vor fi separate caracterele de sfârșit de linie față de caracterele de intrare. Ultima fază a compilării este destinată identificării în cadrul șirului Unicode a cuvintelor ce fac parte din limbajul Java.
Java este un limbaj orientat obiect. Această afirmație nu vine doar să arate faptul că limbajul este în ton cu moda. Practica ne indică foarte clar faptul că paradigma orientării obiect vine în întâmpinarea aplicațiilor de tip client-server și a aplicațiilor distribuite.
Din păcate, sintagma "orientat obiect" rămâne neînțeleasă, fiind propovăduită ca o soluție care va rezolva toate probleme aplicațiilor scrise de către programatori, totul luând aproape forma unei religii. Dacă ar fi să adoptăm o poziție cinică în privința programării orientate obiect am putea spune că totul înseamnă doar o nouă formă de organizare a surselor aplicațiilor. Chiar dacă este bine să punem răul în față nu trebuie să cădem în extreme. Cu alte cuvinte, în timp ce punctul de vedere cinic reflectă un sâmbure de adevăr totuși trebuie să recunoaștem că folosind tehnicile programării orientate obiect putem ajunge la rezultate care nu pot fi atinse cu ajutorul tehnicilor procedurale. Iată, în continuare, un exemplu grăitor în acest sens.
O caracteristică importantă, care distinge obiectele de procedurile ordinare sau de funcții, este faptul că ciclul de viață al unui obiect O1 poate fi mai lung decât perioada de existență a obiectului care a dat naștere obiectului O1. Acest aspect referitor la obiecte este foarte subtil și este trecut de multe ori cu vederea. În lumea aplicațiilor client-server distribuite există posibilitatea creării unui obiect pe o mașină, a trimiterii sale pe rețea, apoi a stocării sale pe o altă mașină într-o formă persistentă ( posibil într-o bază de date ) pentru ca apoi să fie readus la viață în funcție de necesități.
Fiind un limbaj orientat obiect, Java utilizează cele mai bune concepte și caracteristici ale predecesorilor săi: Eiffel, SmallTalk, Objective C și C++. Java trece dincolo de limitările impuse de C++ atât prin extinderea modelului obiectual cât și prin eliminarea complexităților majore ale C++. Cu excepția datelor de tip primitiv, în Java totul este reprezentat prin obiecte. Chiar și datele de tip primitiv pot fi încapsulate în cadrul unor obiecte de tip Integer, Float, Boolean etc., atunci când nevoile o cer.
În viața de zi cu zi ne întâlnim de multe ori cu situații în care trebuie să lucrăm cu obiecte. Spre exemplu, un obiect poate fi chiar radioul situat pe noptiera din dormitorul nostru. Sau chiar pixul cu care ne așternem ideile pe hârtie. Fiecare dintre aceste obiecte are o funcționalitate foarte clar definită, are anumite proprietăți prin intermediul cărora reușim să-l identificăm și, nu în ultimul rând, știm precis cum să-l utilizăm.
În cazul în care ne referim la radio știm că acest obiect este utilizat pentru recepționarea informațiilor zilnice transmise de posturile de radio locale sau de aiurea. Cu alte cuvinte, pentru a utiliza un radio nu trebuie să știm principiul să funcționare sau detaliile tehnice privind modul său de proiectare și implementare. Utilizăm doar butonul pentru reglarea volumului sonor și respectiv butonul care ne permite selectarea postului de radio dorit. La fel se întâmplă și în cazul programării orientate obiect. Obiectele sânt niște entități despre care știm la ce folosesc și ce metode avem la dispoziție pentru a le folosi. În rest este treaba proiectantului să implementeze obiectul din punct de vedere tehnic.
Programarea orientată obiect definește obiectul ca fiind o entitate compusă din câmpuri și metode pentru manipularea câmpurilor. Făcând o comparație cu un radio putem spune că piesele componente ale radioului ( condensatoare, tranzistoare, rezistențe, circuite integrate, etc. ) reprezintă câmpurile obiectului iar rotirea butonului de volum respectiv rotirea butonului selector reprezintă metodele obiectului radio. Cu alte cuvinte, pentru utilizatorul nespecialist, obiectul este văzut doar prin intermediul metodelor sale, câmpurile ( piesele componente ) reprezentând bucătăria internă a obiectului respectiv. Altfel spus, nu veți auzi niciodată un utilizator spunând că reglează valoarea rezistenței din blocul amplificator al radioului – în loc de rotirea butonului de volum – sau că modifică inductanța bobinei din circuitul de recepție – în loc de rotirea butonului selector. [5]
Eclipse
Eclipse este o comunitatea Open Source ce își concentrează eforturile în crearea unei platforme de dezvoltare a aplicațiilor alcătuită din framework-uri extensibile, unelte și medii de rulare pentru dezvoltarea și întreținerea de aplicații. Eclipse a fost la început dezvoltat de IBM, după care l-a oferit comunității open-source. Prima varianta de Eclipse a apărut in Noiembrie 2001, și, de atunci a continuat să se dezvolte.
Se oferă suport pentru o mare gamă de limbaje de programare cu ar fi C, C++, Java, inclusiv pentru dezvoltarea de aplicații web (ce folosesc limbaje interpretate precum PHP ori chiar pagini web bazate pe JSP – Java Server Pages).
Fiind o platforma deschisa utilizatorii pot beneficia de o serie de facilități :acces gratis, posibilitatea de a lua parte la dezvoltarea acestei sau de adaptare la nevoile personale.
Platforma Eclipse oferă o serie de avantaje:
realizarea de tooluri
modificarea toolurilor existente
integrarea și interconectarea diferitelor unelte (tooluri) de la diverși producători de software
posibilitatea de adaptare la mediul de lucru
Arhitectura mediului Eclipse
HTML
Ce este World Wide Web ?
World Wide Web (sau Web) este cel mai mare rezervor de informație electronică din lume. Cu alte cuvinte, Web este o colecție de milioane de documente legate între ele, care se găsesc pe calculatoare răspândite în întreaga lume (Web = pânză de păianjen). Când se parcurg site-uri din Web cu ajutorul unui browser se pot vizualiza elemente de tip text, grafică, video sau audio (cunoscute sub numele de hipermedia). Internetul este vehiculul care permite comunicarea între calculatoarele din întreaga lume. Web-ul este deci un sistem de comunicare global care permite calculatoarelor să transfere date hipermedia în Internet. Altfel spus, Web-ul se poate considera un sistem de documente sau programe legate între ele, așezate la nivelul superior al Internet-ului (hardware si software).
Web-ul este utilizat de către browserul utilizatorului pentru a putea vizualiza paginile de pe acesta. Aceste pagini conțin în principal informații sub forma de text dar și sub formă video (imagini statice sau animații) sau audio. Aceste informații sânt stocate pe Web sub un format special denumit HTML. [6]
HyperText Markup Language(HTML)
HTML (HyperText Markup Language) este un limbaj de marcare folosit de browser-ele Web pentru a determina modul de afișare a conținutului paginilor Web. Elemente de bază ale HTML sunt o serie de câmpuri sau marcaje speciale, numite și tag-uri sau etichete HTML. O altă caracteristică esențială a HTML o constituie posibilitatea realizării de legături (link-uri sau hyperlink-uri) spre alte documente/pagini Web, așa cum rezultă și din denumirea lui (HypertText – element creând o legătură spre un alt document). Protocolul destinat comunicației în cadrul WWW (Word Wide Websau pe scurt Web) este HTTP (Hypertext Transfer Protocol), asigurând transferul de informație între un server Web și un client browser Web. Etichetele HTML se folosesc ori de câte ori se dorește o formatare a modului de afișare a informației publicate (scrierea unui text cu bold, alegerea unui anumit fundal al paginii, inserarea unei imagini, afișare tabelată, integrare de sunet sau orice altceva legat de formatarea unei pagini Web). Tag-urile sunt coduri speciale care însoțesc conținutul propriu-zis al paginii Web, stabilind modul în care acesta este afișată pe parte de client apelant. Codul HTML (împreună cu informația propriu-zisă), stocat la distanță pe un server Web, este transferat spre un browser Web (folosind HTTP), fiind interpretat corespunzător de către acesta.
Multitudinea de browsere Web folosite face ca modul de interpretare al unor etichete HTML să difere uneori de la un caz la altul (din acest motiv, testarea unei aplicații Web trebuie realizată de multe ori pe o gamă largă de browsere).
Pentru o primă exemplificare, se consideră eticheta HTML <b>reprezentând tag-ul pentru o afișare bold a unui text. În cazul în care acest tag pereche încadrează un text (vezi exemplul următor), afișarea textului se va realiza cu bold:
<b>
Acest text este bold!
</b>
Trebuie remarcată existența și a unui tag complementar </b> atașat la sfârșitul conținutului textual. Acest tag de sfârșit al marcajului închide secțiunea de bold și comunică browser-ului ca formarea impusă se încheie în acest punct. Cele mai multe tag-uri au un tag complementar de închidere a secțiunii delimitate, după
cum se va vedea în continuare (astfel încât se poate vorbi, de regulă, despre aceste etichete ca despre niște perechi de delimitatori ai informației de afișat). Etichetele HTML nu sunt case-sensitive.
HTML este independent de platformă(sistem de operare), dar trebuie avută în vedere situația în care se apelează resurse ale sistemului cu particularități diferite de la unul la altul (spre exemplu, problema case-sensitive la referirea numelui de fișiere pe Linux). Un document în format HTML constă, în esență, într-o mulțime de tag-uri împreună cu informația utilă. Învățarea sintaxei acestor tag-uri este sinonimă cu învățarea HTML, ca limbaj de descriere a documentelor. Totuși, fără apariția unor limbaje de programare ca Java, JavaScript, PHP, Perl, limbajul de marcare HTML ar fi asigurat doar o simplă prezentare prozaică pe ecran a unor texte și grafice, totul într-un format static, singura calitate dinamică constituind-o posibilitatea de navigare de la o pagină la alta.
HTML, ca limbaj de marcare pentru hypertexte, ajuns momentan la versiunea 5, prezintă o evoluție continuă. HTML 1.0 a introdus conceptele de antet, paragraf, liste, referințe, HTML 2.0 a adăugat posibilitatea de inserare a imaginilor, HTML 3.0 vine cu tabele, text în jurul figurilor frame-uri iar versiunile au evoluat succesiv, înglobând de obicei tot ceea ce exista și aducând în plus elemente noi. Începând cu HTML 4 și continuând cu actuala versiune 5 (integrând semnificative facilități multimedia), noi etichete sunt adăugate, specificațiile altora sunt modificate, tendința principală fiind de a apropia aspectul și funcționalitățile unei aplicații Web de cele ale unei aplicații desktop.
Evoluția HTML continuă și în momentul de față, integrând o serie de noi tehnologii și plugin-uri dedicate, extinzând substanțial capabilitățile multimedia ale site-urilor Web. Astfel, se vorbește despre DHTML (Dynamic HTML), reprezentând o combinație între HTML, CSS și JavaScript, AJAX – ca o integrare HTML, JavaScript și XML (eXtended Markup Language) și multe altele, toate acestea conducând la o dinamică sporită a paginilor Web. [4][5] Această evoluție este strâns legată și de versiunile succesive de dezvoltare a browser-elor utilizate pe piață (Netscape, Mozilla, Microsoft Internet Explorer, Mosaic, Opera, Safari, Google Crome etc.), fiecare preluând uneori într-o manieră personalizată noile standarde HTML (după cum s-a precizat deja, putându-se vorbi de o dependență de browser, adică același document HTML este interpretat în mod diferit de browsere diferite).
[7]
Secțiunile unui document HTML
Un document HTML este împărțit in trei secțiuni:
Secțiunea de informații HTML
Secțiunea de antet a documentului
Corpul documentului
Controalele <HTML> si <HTML> încadrează antetul și corpul documentului. Ele comunică interpretorului HTML că blocul de text cuprins între ele este scris și formatat in limbajul HTML standard. Prezenta acestor etichete în document este opțională. Structura explicată a unui document HTML:
<html>
<head>
<!–Secțiunea de antet a documentului cuprinde titlul documentului
și definirea tipului si a setului de caractere folosit –>
<title>Structura Documentului HTML</title>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<!–Acesta este corpul documentului. Aici va fi plasat
conținutul paginii pe care o creați–>
Salut. Aceasta este o pagina Web cât se poate de simplă.
</body>
</html>
[6]
Servleturi
Primul lucru la care se gândește cineva când aude despre limbajul Java sunt apleturile – programe client care rulează într-un browser Web. Lucrurile însă nu se limitează aici. Calitățile acestui limbaj îl fac o soluție demnă de luat în considerație când este vorba despre dezvoltarea de aplicații client-server pentru Internet, atât pe partea client, cât si pe partea server.
Încă de la apariția sa, limbajul Java a avut un impact nemaiîntâlnit în lumea calculatoarelor. Principalul motiv al acestui enorm succes este portabilitatea, căreia îi datoram si sloganul write-once, run-anywhere. Pe de alta parte, succesul limbajului se datorează și posibilității ca aplicații Java să poată fi incluse în pagini HTML si rulate într-un browser Web de către oricine are acces la Internet. În Java însă se pot scrie nu doar apleturi care fac animații într-o pagina web care plac ochilor, ci și aplicații server complexe.
Avantajele limbajului din punctul de vedere al dezvoltării de aplicații server sunt în esență aceleași care îl fac o soluție bună și pe partea client, doar proporția lor fiind diferită. Portabilitatea, principalul atu al limbajului, este importanta si în cazul aplicațiilor server, dar poate că într-o măsură mai mica decât în cazul aplicațiilor client, de genul apleturilor. Pentru un aplet portabilitatea este de o importanță majoră, fiind necesar ca același program să ruleze pe orice calculator de pe Internet. În cazul aplicațiilor server, daca un program poate rula fără modificări pe UNIX si pe Windows NT, înseamnă o dublare a pieței fără a fi necesara schimbarea nici unei linii de cod. Bineînțeles ca oricine va alege o soluție portabila față de una mai puțin portabilă, iar Java câștigă clar la acest capitol de fiecare data.
Alte motive convingătoare pentru a alege Java pentru scrierea unor aplicații server, sunt furnizate de proprietățile intrinseci ale limbajului: gestiunea memoriei, conversia sigura de tip ( type-safety), tratarea excepțiilor si programarea pe fire de execuție multiple ( multi-threading).
Aplicațiile server trebuie de obicei sa ruleze mai multe zile, poate chiar luni de zile, fără întrerupere, iar apariția unor probleme cu memoria, poate cauza probleme serioase. În Java, erori de acest tip nu au cum sa apară, programatorul nu trebuie sa se ocupe de gestiunea memoriei, deci problema pur si simplu dispare.
Conversia sigură de tip ( type-safety) și verificarea limitelor tablourilor (bounds checking) în timpul rulării elimină multe erori de accesare greșită (si neautorizată) a memoriei.
La aplicațiile server mai pot apare mici erori ( bugs), în special erorile care apar odată la câteva zile ori săptămâni sunt greu de depistat. În acest caz, tratarea excepțiilor în Java poate fi foarte folositoare, deoarece prinde excepția în locul unde a apărut ( stack-trace), astfel încât ulterior se poate analiza ce s-a întâmplat.
În ceea ce privește viteza de execuție, Java mai are mult de recuperat. Compilatoarele JIT, o soluție la acest handicap, aduc însă Java în imediata apropiere a lui C++. De asemenea, putem optimiza viteza de execuție a programelor Java prin scrierea de metode native pentru unele operații costisitoare de timp, dar acest lucru merge în dauna mult lăudatei portabilități. Cei care ezita să adopte soluția Java din cauza diferenței mari de performante nu trebuie sa își facă griji, următoarea generație de interpretoare va avea performante mult îmbunătățite, un program Java se va executa cam cu aceeași viteză ca și aplicațiile C/C++.
Din punct de vedere al programării, modelul de programare pe fire multiple ( multi-threading) bine structurat este parte integranta a limbajului, ceea ce îl face ideal pentru sisteme intens concurente, care este de fapt esența unei aplicații server.
Fiind vorba de aplicații client-server pentru Internet, o prima aplicare a lui Java pe partea server ar putea fi un server HTTP si scrierea aplicațiilor externe care extind funcționalitatea unui server Web. În acest caz, problema ar fi modul de realizare a comunicării dintre serverul HTTP si programele externe Java. Exista deja numeroase servere Web scrise în întregime în Java, pentru acestea comunicarea cu alte programe de extensie scrise în Java nu este o problemă.
Standarde existente
Primul standard de interfață care a apărut a fost CGI (Common Gateway Interface ), dezvoltat de NCSA. Fiind cel mai vechi, este foarte răspândit, astfel ca la ora actuala marea majoritate a prelucrărilor Web sunt făcute prin scripturi CGI.
O aplicație CGI poate fi scrisa în orice limbaj de programare, în general cel mai des sunt folosite limbajele C si Perl. CGI folosește variabile de mediu ca să transmită parametrii aplicațiilor externe (de ex. QUERY_STRING, PATH_INFO). Utilizarea CGI are însă câteva dezavantaje. Cea mai importanta dintre ele este performanta scăzută, deoarece pentru fiecare cerere trebuie creat un proces separat, ceea ce duce la întârzieri. Un alt dezavantaj este dependenta de o anumita platforma. Cu toate ca standardul CGI este independent de limbajul de programare, deoarece aplicațiile CGI sunt scrise pentru a rula pe un calculator pe care rulează un server HTTP ele vor fi dependente de aceasta platforma, iar ca sa ruleze pe un sistem diferit aplicațiile trebuie modificate. Tot la capitolul deficiente se poate adăuga si complexitatea interacțiunii dintre doua scripturi CGI care rulează pe același server.
Un alt standard, dezvoltat ca o extensie pentru CGI este FastCGI, dezvoltat de OpenMarket. FastCGI folosește procese persistente pentru a rula aplicații externe, deci în acest caz nu mai este nevoie să se creeze un proces separat pentru fiecare cerere recepționată. Dar si în acest caz, comunicația între serverul Web si aplicația externă poate cauza scăderea performantelor, din moment ce ele rulează ca procese diferite.
Pentru a rezolva problemele de performanta, unii producători de servere Web au dezvoltat interfețe de programare în limbajul C/C++ (de exemplu, Netscape cu NSAPI, Microsoft cu ISAPI). Aceste interfețe extind direct serverul Web la un nivel inferior, modulele C rulând în același proces ca si serverul. Dezavantajele acestei abordări sunt dependența de interfața respectivă și de limbajul de programare, precum și complexitatea și lipsa de securitate. Modulele de extensie rulând în același spațiu de adresare cu serverul, daca apare o eroare în extensia C, atunci e posibil ca tot serverul sa cadă. O alternativă la aceste soluții este Java, cu programe servlet.
Ce este un servlet?
Servleturile sunt componente independente de platforma ale aplicațiilor server, care extind dinamic serverele care au suport Java integrat. Ele sunt independente si de protocol, asigurând un cadru general pentru servicii pe baza modelului cerere – răspuns . Acest binecunoscut model este des folosit la programarea sistemelor distribuite, începând cu apeluri de proceduri la distanță și terminând cu protocolul HTTP pentru cereri către servere Web. Cu ajutorul servleturilor extindem deci funcționalitatea unei aplicații de tip server informațional (nu neapărat server HTTP), un prim domeniu de aplicare fiind, bine înțeles, extinderea serverelor Web.
Servleturile pot fi considerate echivalentul apleturilor pe partea server, ele fiind asemănătoare din multe puncte de vedere. Însă principala caracteristică a apleturilor, interfața grafică utilizator, lipsește din servleturi, ele neavând nevoie de așa ceva din moment ce rulează în interiorul serverelor. În rest, ele se aseamănă mult, un servlet fiind si el o componentă de aplicație, scrisă în Java, care poate fi transferată la un sistem care are nevoie de ea.
Servleturile sunt un hibrid dintre CGI și interfețe de programare de nivel inferior ca NSAPI ori ISAPI. Un servlet se comportă ca o aplicație CGI, dar are o durata de viață lunga și se încarcă dinamic (ca si modulele NSAPI/ ISAPI), eliminându-se astfel întârzierile de la pornire specifice CGI-ului. Dupa încărcare, la o noua cerere nu mai este necesar să fie creat un nou servlet: serverul doar apelează o metoda care deservește cererea, astfel încât e nevoie doar de o schimbare de context ușoară ( light-weight) pentru un alt fir de execuție.
Deci, în cazul în care avem o aplicație server HTTP, servleturile sunt o alternativa completa si mai eficienta pentru CGI.
Ce poate face un servlet?
Aceste programe sunt folosite în primul rând pentru a asigura acces prin Web la informații prezentate ca pagini HTML. Cu ajutorul servleturilor putem vizualiza si modifica interactiv aceste date, folosind tehnici de generare dinamica a paginilor Web. Unele servleturi pot, de exemplu, să genereze direct text formatat HTML cu ajutorul unor ierarhii de clase create chiar în acest scop. De asemenea, cu aceste programe se pot pre-procesa pagini web înainte de a fi trimise către clienți, folosind funcționalitatea Server Side Include a serverelor Web, utilizată în cazul fișierelor html. Un servlet poate însă face mai mult decât să genereze documente. După ce o conexiune a fost stabilită între client și servlet, clientul care poate fi un aplet și servletul pot comunica pe un protocol oarecare, folosind o noua conexiune. O alta posibilitate ar fi ca serverul să conecteze mai multe servleturi într-un lanț de filtre, fiecare servlet din lanț făcând o transformare asupra datelor de intrare.
Plecând de la ideea ca servleturile sunt folosite pentru extindere dinamică, le putem folosi și ca niște componente auxiliare de tip plug-in, de exemplu în cazul unui motor de căutare. De asemenea, servleturile pot fi o componenta intermediară a unei aplicații distribuite, putând fi la rândul lor clienți ai unor alte servicii scrise în orice alt limbaj. Putem construi deci cu ajutorul servleturilor aplicații client/server bazate pe modelul pe trei nivele (three-tier architecture). Primul nivel poate fi un applet, servletul fiind componenta de la mijloc ( middle-tier), iar componenta a treia o baza de date. În acest caz servletul, folosind interfața JDBC ( Java DataBase Connectivity), accesează o baza de date relaționată.
Disponibilitate
Interfața de programare Java Servlet API dezvoltata de JavaSoft nu face parte din nucleul de programare Java, fiind un API standard de extensie Java. Este deci disponibilă ca un pachet adițional pentru nucleul Java.
Pentru ca un servlet să poată rula pe un server Web e nevoie ca serverul să aibe integrată o mașină virtuala Java (JVM Java Virtual Machine), să dispună de o interfața de comunicare cu servleturi și să gestioneze servleturile aflate în execuție.
Merită menționat că servleturile au fost inițial suportate de Java Web Server (fostul Jeeves) de la JavaSoft si de atunci multe servere bazate pe Java au integrat API-ul servlet. Anumite componente de baza din Java Web Server sunt chiar servleturi. Componenta serverului care se ocupa cu invocarea servleturilor este si ea un servlet ( Invoker Servlet). La fel, componenta care se ocupa cu deservirea cererilor HTTP și returnarea documentelor este tot un servlet, care implementează și un cache pentru paginile mai des accesate ( File Servlet). Documentele .html sunt prelucrate de servletul SSInclude Servlet . De lucrul cu programe externe bazate pe interfața CGI se ocupa un alt servlet (CGI Servlet). În fine, chiar administrarea serverului web este sarcina unui servlet (Admin Servlet).
API-ul java.servlet
Servleturile sunt bazate pe modelul de programare cerere – răspuns (acceptare de cereri si generare de răspunsuri). Ca să poată recepționa cereri și să răspundă la ele, orice servlet este un obiect Java care se conformează unei interfețe speciale. Adică, î n termenii programării Java, implementează interfața Servlet. Acest lucru se poate face direct, prin implementarea tuturor metodelor interfeței, sau indirect, prin moștenire, fie de la o clasa servlet generică ( GenericServlet), fie de la clasa specifică servleturilor bazate pe protocolul HTTP ( HttpServlet, care de fapt și ea extinde clasa generică). A doua soluție este mai des utilizată de proiectanți, deoarece în cele două clase sunt deja implementate metodele interfeței, programatorul suprascrie ( override) doar metodele de care are nevoie.
În interfața Servlet, cea mai importantă metoda este service (ServletRequest req, Servlet Response res). Aceasta metoda este apelata la fiecare cerere recepționată. Cel mai simplu servlet posibil definește doar aceasta metoda service, care are ca parametrii doua obiecte, instanțe a claselor ServletRequest și respectiv ServletResponse. Primul parametru încapsulează datele trimise de client, fiind astfel posibil accesul servletului la parametrii cererii. Unui servlet îi putem trimite parametrii în multe feluri:
printr-un stream de la un aplet, care va fi stream-ul de intrare (InputStream) al cererii;
prin URI-ul ( Uniform Resource Identifier) unei cereri;
prin parametrii introduși într-un formular HTML;
de la un alt servlet sau de la un alt serviciu din rețea.
Toți acești parametrii pot fi preluați prin intermediul unui obiect ServletRequest.
Al doilea parametru ne permite trimiterea răspunsului înapoi la client printr-un OutputStream. Prin acest stream e posibil transferul datelor în formatul dorit: servletul poate specifica ce tip de date ( MIME-type) trimite apelând res.setContentType (mimeContentType).
Servleturile fiind obiecte Java, care sunt de fapt aplicații independente rulând în interiorul serverelor, au date specifice instanțelor. La inițializare ele au acces la date de configurare specifice servletului respectiv.
Un alt aspect al servleturilor care le aseamănă cu apleturile este modul de comunicare cu mediul în care rulează. Un aplet realizează acest lucru prin intermediul metodei getAppletContext, care returnează un obiect ApletContext prin care apletul poate interacționa cu mediul în care rulează, adică cu browserul. La rândul lui, un servlet folosește (ați ghicit!) getServletContext care și returnează o instanță a clasei ServletContext , prin intermediul căreia servletul poate afla informații despre mediul lui de rulare, care de data aceasta este serverul.
Un servlet este de obicei încărcat dinamic în memorie la prima cerere care-i este destinată, dar serverul poate fi configurat astfel încât să încarce anumite servleturi la pornire. Încărcarea se face prin tehnici normale de încărcare a claselor Java, prin intermediul unui ClassLoader, acest lucru având avantajul ca servleturile pot fi încărcate la fel de ușor dintr-un director securizat ( trusted) aflat undeva pe rețea de exemplu http://server-departament/servlets ca și din sistemul de fișiere local. Acest lucru asigură o flexibilitate sporită în arhitectura sistemului și o distribuire mai ușoară a serviciilor în rețea.
După ce un servlet a fost încărcat în memorie, în timpul existentei sale trece prin anumite faze. În primul rând trebuie activat de către server ca să fie capabil sa răspundă la cereri. Acest lucru se realizează printr-un apel la metoda init. Proiectanții de servleturi suprascriu (overriding) această metodă pentru ca anumite calcule, inițializări sau configurări costisitoare ca timp de execuție (de exemplu, operații de I/O) să se facă doar o singură dată și nu la fiecare cerere. Asemenea inițializări ar putea fi de pildă, accesul la datele persistente proprii prin conectare la o baza de date sau prin citire dintr-un fișier. După inițializări, servletul odată activat poate prelucra multe cereri. Fiecare cerere client generează un apel al metodei service a servletului. Desigur, aceste apeluri pot fi concurente, ceea ce permite servleturilor să coordoneze anumite activități între clienți diferiți și să partajeze date între mai mulți clienți. Cererile sunt acceptate și prelucrate până când servletul este explicit oprit de către server, printr-un apel la metoda destroy. Următoarea fază este curățenia: într-un moment când procesorul este liber apare gunoierul ( Garbage Collector) care eliberează memoria ocupată de servlet.
Securitate
Așa cum am amintit mai devreme, deoarece încărcarea în memorie a servleturilor se face prin mecanismul standard Java (folosit în orice alta mașină virtuala Java), care permite și încărcarea claselor Java din rețea, apar anumite probleme de securitate. Aceste probleme se referă în primul rând la servleturile aduse din rețea, de pe alte servere. În API-ul servlet există suport integrat pentru securitate. Acest lucru se datorează de fapt mediului Java standard care are un SecurityManager care poate controla accesul la toate resursele, cum ar fi fișiere locale, alte fire care rulează pe același server, informații administrative a serverului (utilizatori, grupuri) sau accesul la alte servere din rețea. Prin acest mecanism se poate asigura un mediu de execuție controlat (SandBox) pentru servleturi, similar celui folosit de navigatoarele Web pentru a controla apleturile. Administratorul serverului poate specifica deci, prin intermediul SecurityManager-ului, cărui servlet să i se acorde drepturi de accesare a rețelei sau a fișierelor locale. Dacă luăm în considerare recent apăruta posibilitate de a semna digital fișiere Java ARchive (JAR), care conțin clase Java arhivate, am putea considera următoarea politică de securitate:
Din moment ce sunt instalate local de către administratorii serverului, servleturile locale au acces deplin la toate resursele.
Toate servleturile din retea se executa în interiorul sandbox-ului. Servleturile care sunt semnate digital și se află pe o lista de semnături în care administratorul are încredere, au acces deplin la toate resursele. Servleturile semnate, dar care nu sunt pe lista, sunt considerate ca servleturi fără semnătură.
Servleturile care nu sunt semnate digital se executa în sandbox și nu au acces la nici o resursă.
Bineînțeles, această soluție poate fi extinsă, putând fi adoptată o politica mai flexibila. De exemplu, pentru servleturi cu o anumită semnătură putem permite accesul doar la rețea sau doar la anumite fișiere.
Un alt aspect al securității se referă la informațiile disponibile despre clientul care a creat cererea. Servleturile au acces la informații despre clienții lor prin intermediul cererii recepționate: pot afla adresa IP si numele computerului gazda ( host) de unde a venit cererea, precum si tipul protocolului cererii respective. Daca se folosește un protocol de comunicație sigur de exemplu SSL ( Secure Sockets Layer) se poate face o identificare sigură a clientului. De asemenea, servleturile care se bazează pe protocolul HTTP au acces la date de autentificare specifice protocolului. [8]
Java Server Pages (JSP)
Producătorii de servere Web au încercat să simplifice dezvoltarea de aplicații Web prin furnizarea de "plug-in"-uri și API-uri pentru servere. Aceste soluții sunt specifice fiecărui server și nu rezolvă problema în cazul unor platforme diferite. De exemplu, tehnologia Active Server Pages (ASP) facilitează crearea de pagini de Web dinamice, însă funcționează doar cu servere Microsoft: Internet Information Server sau Personal Web Server.
Alte soluții există, dar nu sunt ușor de folosit de către proiectantul obișnuit de pagini de Web. Tehnologia Java Servlets (specificată de API-ul Servlet de la Sun), de exemplu, permite folosirea limbajului Java ca mediu de dezvoltare pentru crearea dinamică a paginilor Web, pentru execuția unor calcule în funcție de specificul aplicației sau pentru comunicarea cu surse de date de nivel third-tier. Aceste trei activități diferă foarte mult una de cealaltă și necesită diverse aptitudini de programare. Un servlet Java este un program ce rulează pe server (spre deosebire de applet-uri ce rulează în browser); el preia cereri HTTP de la browser-ul Web și generează dinamic un răspuns HTML (sau XML). Întreaga pagină Web trebuie astfel să fie conținută în servlet-ul Java. Dacă un Web designer sau un Web master dorește să schimbe look-ul paginii respective, ar trebui să editeze și să recompileze servlet-ul chiar dacă modul de funcționare ce stă în spatele acestuia rămâne același.
Proiectanții Web sunt preocupați în special de aspectele estetice ale paginii (amplasarea și aspectul imaginilor, al fundalului și al frame-urilor) și mai puțin de sursa și de manipularea datelor dinamice necesare pentru a aduce pagina în forma cerută de client. Uneori sunt necesare informații despre cererea browser-ului client (cum ar fi tipul acestuia) pentru a se returna un conținut adecvat care să beneficieze de toate avantajele acestuia. Ar fi deci foarte util să se permită proiectanților Web accesul la aceste informații fără a trebui să învețe să scrie servlet-uri, să le compileze și să le instaleze pe serverele de Web respective.
Pentru a oferi proiectanților acces la API-ul Servlet fără a trece prin cele trei faze menționate anterior cât și pentru a veni cu o soluție pentru problemele deja existente, Sun a definit specificația JavaServer Pages ce permite ca Java să devină limbaj de scripting pe partea de server și mai mult decât atât.
Ce este JSP?
JavaServer Pages este tehnologia platformei Java pentru construirea de aplicații ce cuprind pagini de Web cu conținut dinamic precum HTML, DHTML, XHTML și XML. Sun a încercat să depășească limitările soluțiilor actuale pentru generarea de pagini cu conținut dinamic prin dezvoltarea unei tehnologii care:
să funcționeze pe orice server Web sau de aplicații
să separe logica ce stă în spatele aplicației de aspectul paginii
să permită dezvoltare și testare rapidă
să simplifice procesul de dezvoltare de aplicații interactive Web.
Tehnologia JSP a fost creată să satisfacă aceste cerințe, fiind rezultatul unei cooperări la nivelul industriei software dintre producătorii de servere Web, servere de aplicații, sisteme tranzacționale și unelte de dezvoltare. Astfel, procesul dezvoltării de pagini de Web dinamice este accelerat de către JSP din următoarele considerente:
Separarea generării conținutului de prezentare
Prin tehnologia JavaServer Pages, proiectanții de pagini folosesc tag-uri obișnuite HTML sau XML pentru formatarea rezultatului și tag-uri JSP sau scriplet-uri pentru generarea conținutului dinamic al paginii. Logica ce stă în spatele generării conținutului este cuprinsă în tag-uri și componente JavaBean, legătura dintre acestea făcându-se în scriplet-uri și totul fiind executat pe server. Astfel, proiectanții de pagini sau Web master-ii pot edita și lucra cu pagini JSP fără a afecta generarea conținutului dinamic.
Pe partea de server, un engine (motor) JSP interpretează scriplet-urile și tag-urile JSP, generează conținutul cerut (accesând componente JavaBean, baze de date folosind JDBC sau prin includerea de fișiere) și trimite rezultatele înapoi sub forma unei pagini HTML (sau XML) către browser.
Reutilizarea componentelor și a tag-urilor
Tehnologia JSP permite reutilizarea componentelor precum JavaBeans, Enterprise JavaBeans sau a tag-urilor atât independent, cât și în cadrul unor unelte interactive de dezvoltare a componentelor și paginilor de Web. Creatorii de pagini Web nu sunt întotdeauna programatori familiarizați cu limbaje de scripting. JSP încapsulează funcționalitățile necesare pentru crearea de conținut dinamic în tag-uri de tip XML specifice JSP. Tag-urile JSP standard pot accesa și instanția componente JavaBean, pot seta sau obține atribute ale bean-urilor, pot face download la applet-uri și pot executa funcții ce ar fi dificil de implementat. Tehnologia JSP este extensibilă prin dezvoltarea de biblioteci de tag-uri definite de utilizator. Cu timpul vor fi create biblioteci proprii de tag-uri pentru funcțiile folosite cel mai frecvent.
"Write once, run anywhere"
Tehnologia JSP este complet independentă de platformă atât în ceea ce privește paginile de Web dinamice, cât și serverele de Web și componentele acestora. Aceasta este explicabil deoarece limbajul de scripting pentru paginile JSP se bazează pe Java și în special pe modul de manipulare a obiectelor în acest limbaj (vezi paragraful 1.4.4 din [2]).
Pagini JSP
O pagină JSP (*.jsp) este o pagină HTML sau XML ce cuprinde elemente adiționale (tag-uri, declarații, scriplet-uri) pe care motorul JSP le procesează și le elimină returnând o pagină standard HTML/XML. Ea corespunde unui document ce descrie procesarea unei cereri pentru a crea un răspuns.
O pagină JSP cuprinde în structura sa:
cod HTML/XML standard – cod ce rămâne neinterpretat de motorul JSP;
directive JSP – directive ce furnizează informații globale independente conceptual de o anumită cerere adresată paginii JSP;
tag-uri JSP – spre deosebire de directive, tag-urile depind de fiecare cerere în parte adresată paginii JSP;
elemente de scripting – acestea putând fi: declarații, scriplet-uri și expresii.
Directive, tag-uri, obiecte și domenii de vizibilitate
Paginile JSP folosesc directive JSP pentru a transmite instrucțiuni motorului JSP. Aceste directive sunt:
<%@ include …%> folosită pentru a insera în pagină un document extern ce poate fi și un alt document JSP;
<%@ page …%> folosită pentru a transmite informații referitoare la pagină precum limbajul de scripting, buffer-ul, informații despre thread-uri, "pachete importate", modul de tratare al excepțiilor etc;
<%@ taglib …%> indică o bibliotecă de tag-uri pe care pagina respectivă le poate invoca. Nu este disponibilă în implementările actuale.
JSP include o serie de tag-uri standard. Sintaxa lor este cea a tag-urilor XML (< tag attr1="valoare atribut" …> corp </tag> sau < tag attr1="valoare atribut" …/>). Acestea sunt:
<jsp:forward> înaintează cererea către un alt fișier HTML, fișier JSP sau servlet;
<jsp:include> include în etapa de procesare a cererii fișierul specificat în tag;
<jsp:plugin> face download către browser-ul clientului la un plugin Java pentru executarea unui applet sau a unui Bean. Nu este disponibil în implementările actuale.
<jsp:useBean> declară folosirea unei instanțe, a unei componente JavaBean. Dacă aceasta nu există atunci componenta JavaBean instanțiază și înregistrează tag-ul;
<jsp:setProperty> setează valoarea unei anumite proprietăți a unui Bean;
<jsp:getProperty> obține valoarea unei instanțe a unui Bean, o convertește la String și o depune în obiectul implicit de ieșire out.
O pagină JSP poate crea și/sau accesa, la procesarea unei cereri, anumite obiecte Java. Obiectele astfel create pot deveni vizibile elementelor de scripting prin variabile în limbajul de scripting. Acestea vor conține, în timpul etapei de procesare a cererilor (vezi "Server Web cu funcționalitate JSP"), referințe către obiectul respectiv. Obiectele create au un atribut numit scope ce definește domeniul de vizibilitate al acestora: când există o referință la acest obiect și când aceasta va fi înlăturată. Valorile pe care le poate avea atributul scope sunt:
page – accesibil doar în cadrul paginii în care a fost creat obiectul;
request – accesibil din paginile ce procesează aceeași cerere în care a fost creat obiectul;
session – accesibil din paginile ce se sunt în aceeași sesiune în care a fost creat obiectul;
application – accesibil din paginile de procesează aceeași aplicație în care a fost creat obiectul.
Toate referințele la acesta sunt eliberate când mediul runtime solicită ServletContext-ul.
Numele atașat unui obiect este unic pe tot timpul execuției, toate domeniile de vizibilitate comportându-se ca unul singur în cadrul unei secvențe cerere/ răspuns. Lipsa transmiterii variabilelor de stare prin HTTP este suplinită în mod automat de către motorul JSP prin cele două modalități cunoscute: cookie-uri, respectiv rescrierea URL-urilor. Cât timp sunt făcute cereri procesate de către motorul JSP, rescrierea URL-urilor este făcută în mod automat.
Orice pagină JSP conține o serie de obiecte create implici:
request – cererea ce a solicitat pagina respectivă;
response – răspunsul la cerere;
pageContext – contextul paginii curente;
session – obiect de tip sesiune pentru clientul solicitat (valabil doar pentru HTTP);
application – contextul servlet-ului generat (getServletConfig().get Context();
config – obiect de tip ServletConfig pentru această pagină;
page – instanță a clasei create pentru această pagină (pentru Java: this);
exception – excepția declanșată anterior putând fi folosită doar în pagina de eroare invocată;
config – obiect de tip JspWriter ce scrie în stream-ul de ieșire.
Aplicații de tip "two-tier"
Modelul de aplicații "two-tier" presupune ca browser-ul să invoce în mod direct pagina JSP și aceasta să genereze conținutul solicitat (apelând eventual la JDBC pentru a obține informația direct dintr-o baza de date). Pagina JSP poate apela JDBC sau o componentă JavaBean pentru a genera rezultatele dorite și a crea HTML standard ce va fi trimis browser-ului.
Acest model de fapt înlocuiește conceptul CGI-BIN cu pagina JSP (compilată ca servlet Java). Avantajele acestei abordări sunt ușurința de a programa și posibilitatea autorului paginii de a genera conținut dinamic bazat pe cererea clientului și starea resursei solicitate.
Această arhitectură nu este fiabilă pentru un număr mare de posibili clienți deoarece fiecare dintre aceștia va trebui să stabilească o conexiune către sursa de date.
Procesare scalabilă folosind tehnologia Enterprise JavaBeans (aplicații de tip N-tier)
Pagina JSP poate acționa ca "middle-tier" în cadrul unei arhitecturi de tip Enterprise JavaBeans (EJB). În acest caz, pagina JSP interacționează cu resursele aflate pe server printr-o componentă de tip Enterprise JavaBean.
Componenta de tip EJB controlează accesul la resursele de pe server, ceea ce furnizează performanță scalabilă pentru un număr mare de utilizatori concurenți. Pentru comerț electronic sau alte tipuri de aplicații, EJB controlează tranzacțiile și problemele de securitate aferente. Aceasta simplifică pagina JSP. Modelul acesta va fi suportat de către platforma Java 2 Enterprise Edition.
Concluzii
Explozia Internet-ului face ca cerințele pentru aplicații Web să crească vertiginos. În aceste condiții o tehnologie precum JavaServer Pages este mai mult decât binevenită. Sprijinul de care se bucură din partea industriei software precum și faptul că se bazează pe platforma Java pot face din JSP soluția de facto pentru aplicații Web. În sprijinul acestei afirmații nu vin doar declarațiile din partea unor nume celebre precum Oracle, Netscape, Weblogic, IBM, Fujitsu ș.a., ci și integrarea în viitoarea platformă Java Enterprise Edition și tehnologii precum JavaBeans sau Enterprise JavaBeans. [9]
JAVASCRIPT
JavaScript a fost dezvoltat prima dată de către firma Netscape, cu numele de Live Script, un limbaj de script care extindea capacitățile HTML, oferă o alternativa parțială la utilizarea unui mare de scripturi CGI pentru prelucrarea informațiilor din formulare și care adaugă dinamism în paginile web. După lansarea limbajului Java, Netscape a început să lucreze cu firma Sun, cu scopul de a crea un limbaj de script cu o sintaxa și semantică asemănătoare cu a limbajului Java, și din motive de marketing numele noului limbaj de script a fost schimbat în "JavaScript".
JavaScript a apărut din nevoia ca logica si inteligenta sa fie si pe partea de client, nu doar pe partea de server. Daca toata logica este pe partea de server, întreaga prelucrare este făcuta la server, chiar și pentru lucruri simple, așa cum este validarea datelor. Astfel, JavaScript îl înzestrează pe client și face ca relația să fie un adevărat sistem client-server. Limbajul HTML oferă autorilor de pagini Web o anumita flexibilitate, dar statica. Documentele HTML nu pot interacționa cu utilizatorul în alt mod mai dinamic, decât pune la dispoziția acestuia legături la alte resurse (url-uri). Crearea de CGI-uri (Common Graphics Interface) – [programe care rulează pe serverul Web și care acceptă informații primite din pagina de web și returnează cod HTML] – a dus la îmbogățirea posibilităților de lucru. Astfel, un pas important spre interactivizare a fost realizat JavaScript, care permite inserarea în paginile web a script-urilor care se executa în cadrul paginii web, mai exact în cadrul browser-ului utilizatorului, ușurând astfel și traficul dintre server și client. De exemplu, într-o pagina pentru colectarea de date de la utilizator se pot adaugă scripturi JavaScript pentru a valida corectitudinea introducerii și apoi pentru a trimite serverului doar date corecte spre procesare.
JavaScript conține o listă destul de amplă de funcții și comenzi menite să ajute la operații matematice, manipulări de șiruri, sunete, imagini, obiecte și ferestre ale browser-ului, link-urile URL și verificări de introduceri ale datelor în formulare. Codul necesar acestor acțiuni poate fi inserat în pagina web și executat pe calculatorul vizitatorului. După lansarea sa, în decembrie 1995, JavaScript și-a atras sprijinul principalilor distribuitori din domeniu, cum sunt Apple, Borland, Informix, Oracle, Sybase, HP sau IBM. S-a dezvoltat în continuare, obținând recunoașterea majoritarii browserelor.
Înțelegând importanta scripting-ului web, Microsoft s-a dorit să ofere suport și pentru JavaScript. Netscape a preferat să acorde licența de tehnologie companiei Microsoft în loc sa o vândă, astfel Microsoft a analizat JavaScript, și bazardu-se pe documentația publică a creat propria sa implementare, "Jscript", care este recunoscută de Microsoft Internet Explorer. Jscript 1.0 este aproximativ compatibil cu JavaScript 1.1, care este recunoscut de Netscape Navigator. Totuși, versiunile ulterioare de JavaScript și diversele diferențe specifice platformelor de operare au început să dea destule probleme programatorilor web și astfel Netscape, Microsoft și alți distribuitori au fost de acord sa predea limbajul unei organizații internaționale de standardizare – ECMA ; aceasta a finalizat o specificație de limbaj, cunoscuta ca ECMAScript, recunoscuta de toți distribuitorii. Deși standardul ECMA este util, atât Netscape cat si Microsoft au propriile lor implementări ale limbajului și continuă să extindă limbajul dincolo de standardul de baza. Pe lângă Jscript, Microsoft a introdus și un concurent pentru JavaScript, numit VBScript, realizat pentru a ușura pătrunderea pe web a programatorilor VB. VBScript este un subset al limbajului Visual Basic.
Cu toate acestea JavaScript a devenit cunoscut ca limbajul de scripting standard pentru web. În general se consideră că există zece aspecte fundamentale ale limbajului JavaScript pe care orice programator în acest limbaj ar trebui să le cunoască :
JavaScript poate fi introdus în HTML – De obicei codul JavaScript este găzduit în documentele HTML și executat în interiorul lor. Majoritatea obiectelor JavaScript au etichete HTML pe care le reprezintă, astfel încât programul este inclus pe partea de client a limbajului. JavaScript folosește HTML pentru a intra în cadrul de lucru al aplicațiilor pentru web.
JavaScript este dependent de mediu – JavaScript este un limbaj de criptare; software-ul care rulează de fapt programul este browser-ul web (Firefox, Opera, Netscape Navigator, Internet Explorer, Safari, etc.) Este important să luăm în considerare această dependență de browser atunci când utilizăm aplicații JavaScript.
JavaScript este un limbaj în totalitate interpretat – codul scriptului va fi interpretat de browser înainte de a fi executat. JavaScript nu necesită compilări sau preprocesări, ci rămâne parte integrantă a documentului HTML. Dezavantajul acestui limbaj este că rularea durează ceva mai mult deoarece comenzile JavaScript vor fi citite de navigatorul Web și procesate atunci când user-ul apelează la acele funcții ( prin completare de formulare, apăsare de butoane, etc.). Avantajul principal este faptul că putem mult mai ușor să actualizăm codul sursa.
JavaScript este un limbaj flexibil – în aceasta privința limbajul diferă radical de C++ sau Java. În JavaScript putem declara o variabila de un anumit tip, sau putem lucra cu o variabila deși nu-i cunoaștem tipul specificat înainte de rulare .
JavaScript este bazat pe obiecte – JavaScript nu este un limbaj de programare orientat obiect, ca Java, ci mai corect, este "bazat pe obiecte"; modelul de obiect JavaScript este bazat pe instanța și nu pe moștenire.
JavaScript este condus de evenimente – mare parte a codului JavaScript răspunde la evenimente generate de utilizator sau de sistem. Obiectele HTML, cum ar fi butoanele, sunt îmbunătățite pentru a accepta handlere de evenimente.
JavaScript nu este Java – Cele doua limbaje au fost create de companii diferite, motivul denumirii asemănătoare este legat doar de marketing.
JavaScript este multifuncțional – limbajul poate fi folosit într-o multitudine de contexte pentru a rezolva diferite probleme: grafice, matematice, si altele.
JavaScript evoluează – limbajul evoluează, fapt pozitiv care însa poate genera și probleme, programatorii trebuind să verifice permanent ce versiune sa folosească pentru ca aplicațiile să poată fi disponibile unui număr cat mai mare de utilizatori de browsere diferite.
JavaScript acoperă contexte diverse – programarea cu acest limbaj este îndreptata mai ales către partea de client, dar putem folosi JavaScript si pentru partea de Server. JavaScript este limbajul nativ pentru unele instrumente de dezvoltare web, ca Borland IntraBuilder sau Macromedia Dreamweaver. [10]
AJAX
AJAX este prescurtarea pentru Asynchronous JavaScript and XML (JavaScript și XML asincron) și reprezintă o colecție de tehnologii utilizate în dezvoltarea site-urilor Internet. Intenția este de a adaugă o interactivitate mai mare în paginile web și de a micșora timpul de incarnare al acestora. în măsura în care Internetul este în continua dezvoltare, unde numărul de pagini web se dublează la o perioada de câteva luni, și se dezvolta foarte mult servicii de comerț electronic, magazine virtuale sau site-uri sociale, tehnologia AJAX devine o componenta de baza pentru orice astfel de site.
AJAX presupune un schimb mic de date între browser și server, astfel încât sa nu mai fie necesara reincarnarea întregii pagini web de fiecare data când userul face o schimbare în aceasta. AJAX reprezintă o colecție de tehnologii, fiecare utilizata și în mod de sine-stătător, dar care combinate permit obținerea unei unelte foarte puternice:
Prezentarea în mod standard a paginilor, prin HTML sau mai noul XHTML, și CSS (Cascading Style-Sheets) pentru aranjarea în pagina a conținutului;
Afișare dinamica și interacțiune folosind DOM (Document Object Model), accesat printr-un limbaj de scripting, pentru a modifica în mod dinamic și a asigura interacțiunea cu informația prezentată;
Schimb bidirecțional de date și manipulare prin XML între client și server, deși orice format poate fi folosit, inclusiv HTML, XSLT sau text simplu;
Schimbul de date asincron se realizează prin obiectul XMLHttpRequest, deși în unele implementări AJAX se poate folosi un IFrame pentru schimbul de date, sau chiar tag-uri <script> adăugate dinamic.
JavaScript folosit pentru a lega toate aceste elemente intr-un pachet puternic.
Modelul clasic al aplicațiilor web este următorul: acțiunile utilizatorilor în interfața din browser conduc la o cerere HTTP către serverul web. Serverul efectuează niște procesări (extrage date din baze de date, efectuează calcule, interoghează alte sisteme) și apoi returnează o pagina HTML către client. Este modelul clasic, sincron, dezvoltat odată cu apariția Internetului ca rețea la nivel mondial. Este calea cea mai simpla, dar în timp ce serverul procesează cererea, utilizatorul așteaptă și nu poate interacționa în alt mod cu pagina web.
AJAX elimina aceasta modalitate de interacțiune start-stop-start-stop a Web-ului introducând un nivel intermediar între utilizator și server – motorul AJAX. Adăugarea unui nou nivel intr-o aplicația de obicei o face sa lucreze mai greu, dar în acest caz este adevărată afirmația opusa. în loc sa încarce pagina la începutul sesiunii, browserul încarcă un motor AJAX, scris în JavaScript și plasat de obicei intr-un cadru (frame) invizibil. Acest motor este apoi responsabil atât cu interfața pe care o afișează utilizatorului, cat și cu comunicația cu serverul pentru folosul utilizatorului. Motorul AJAX permite interacțiunea utilizatorului cu aplicația în mod asincron, independent de comunicația cu serverul. Prin urmare utilizatorul nu mai privește o fereastra goala, așteptând ca aceasta sa se încarce direct de pe server.
Avantaje
Utilizarea eficientă a benzii disponibile
Prin generarea de HTML local, în browser, și aducând de pe server doar apelări JavaScript și date, paginile realizate cu AJAX se încarcă mai repede deoarece informația necesara este mai mica. De exemplu se pot aduce doar datele dintr-un tabel, iar afișarea tabelului în sine, tag-urile <TABLE>, <TR> și <TD> se generează local, în browser, nefiind necesar și transferul acestora de pe server. Structura generala a unei pagini, titlu, meniu lateral, subsolul paginii, se generează o singura data, iar la navigarea acelui site se aduc doar datele noi din conținutul paginii respective, titlul și meniurile rămânând neschimbate.
Interactivitate
Aplicațiile AJAX sunt în principal executate în computerul utilizatorului, prin manipularea paginii curente de către browser folosind metode de document object model (DOM). AJAX poate fi utilizat pentru o serie de funcții precum actualizarea înregistrărilor, expandarea formularelor, returnarea unor catari simple, editarea de elemente, toate fora nevoia de a reîncărca întreaga pagina web în momentul când aceasta este modificata. Se trimit doar cereri scurte către server și se primesc răspunsuri de dimensiuni mici. Acest lucru creste interactivitatea și apropie paginile web de posibilitățile aplicațiilor desktop. Pentru magazinele virtuale, site-uri de eBanking sau eCommerce, sau pentru implementarea unui chat intr-o pagina web tehnologia AJAX este foarte importanta. în condițiile în care un studiu recent a arătat ca un client părăsește site-ul unui magazin online în favoarea altuia, daca încărcarea unei pagini durează mai mult de 4 secunde, interacțiunea oferita de AJAX, posibilitatea de a modifica doar anumite aspecte ale paginii (de ex apariția părerilor altor cumpărători despre un anumit produs, sau calculul sumei totale din “coșul de cumpărături” fora a reîncărca toata pagina, ci doar acea zona) este foarte importanta.
Dezavantaje
Utilizarea butoanelor de Back și de Forward
Paginile web ce utilizează AJAX pot sa împiedice funcționarea comportamentului normal, obișnuit și așteptat al butoanelor de Back dintr-un browser. Utilizatorii se așteaptă ca apăsând aceste butoane sa fie duși la aspectul anterior al paginii, dar acest lucru nu este mereu adevărat când se utilizează AJAX, deoarece browserul nu poate tine mereu socoteala modificărilor produse în mod dinamic și asincron.
Dezvoltatorii de site-uri au introdus diverse rezolvări pentru aceasta problema, folosind IFRAME-uri invizibile pentru a retine conținutul paginii anterioare. Google Maps, de exemplu, face căutările intr-un IFRAME invizibil și apoi aduce rezultatele în partea vizibila a paginii. în recomandarea XHTML 1.1 a World Wide Web Consortium, organismul care standardizează metodele și limbajele utilizate în Internet, se recomanda folosirea elementului object.
O alta problema a paginilor dinamice este dificultatea creării unui link sau bookmark către o stare particulara a aplicației. Soluții au fost găsite prin utilizarea de identificatoare de fragmente URL (porțiunea unui URL de după un semn “#”), deoarece prin JavaScript se poate modifica adresa paginii prin schimbarea acestui identificator de fragment (se modifica nu doar informații și porțiuni dintr-o pagina, ci și adresa ei). Aceasta soluție ajuta și la problema butonului Back, dar nu este una completa.
Griji pentru timpul de răspuns
Modificarea doar a unor porțiuni din pagini poate creste totuși timpul aparent de răspuns, deoarece utilizatorul observa mai greu modificările făcute intr-o porțiune mica a unei pagini deja incarnate. Se recomanda utilizarea unor indicatori de activitate de procesare, de exemplu celebra clepsidra.
Optimizarea paginilor pentru motoare de căutare
Website-urile care utilizează pagini incarnate prin AJAX trebuie sa fie atente sa ofere aceeași informație și intr-un format clasic, pentru a putea fi indexat de robotii de citire ai motoarelor de căutare pe Internet. Daca anumite informații (date, text, imagini) nu apar decât la apelarea unor funcții JavaScript prin AJAX, aceste informații nu vor fi găsite de un motor de căutare deoarece acestea citesc doar textul existent în pagina și nu rulează și funcțiile din ea.[11]
Cap. 3. Specificațiile aplicației
Schema bloc
Aplicația client comunică cu un serviciu, respectiv serverul, trimițând cereri către acesta în funcție de operațiunile efectuate de către operatorul uman, aceste cereri sunt interpretate pe server, care accesează baza de date și extrage datele care au fost cuprinse în cererea trimisă de către client, iar apoi acestea sunt returnate și afișate clientului sub o forma familiară, ușor de înțeles pentru acesta. (Fig. 3.1)
Fig. 3.1
Funcțiile sistemului
Aplicația web destinată evidenței cărților dintr-o bibliotecă este concepută pentru două tipuri de utilizatori ( administrator și membru ), interfața fiind dezvoltată în așa fel încât să se adapteze automat în funcție de tipul utilizatorului, acesta fiind determinat în funcție de datele introduse în caseta de autentificare.
În funcție de tipul de utilizator detectat aplicația oferă multiple funcționalități (Fig. 3.2):
Pentru administrator:
adăugare cărți
căutare cărți
ștergere cărți
împrumutare cărți
returnare cărți
adăugare membri
ștergere membri
vizualizare istoric împrumuturi pentru un anumit membru
cărți întârziate
istoric operații
Pentru membru:
căutare cărți
vizualizare cărți împrumutate
istoric
cărți întârziate
Fig. 3.2
Adăugare carte: – pentru a adăuga o nouă carte administratorul trebuie să introducă numele autorului și titlul cărții.
Adăugare exemplar: – pentru a adăuga un exemplar nou dintr-o carte existentă se va selecta autorul și titlul, se va introduce id-ul exemplarului, editura, limba în care este scris exemplarul și perioada pe care acesta se poate împrumuta.
Căutare după autor: – se introduce autorul căutat.
Căutare după titlu: – se introduce titlul cărții căutate.
Căutare după editură: – se introduce editura căutată.
Ștergere carte: – se selectează din lista cărților autorul și titlul cărții care se dorește a fi ștearsă.
Ștergere exemplar: – pentru a șterge un exemplar se introduce id-ul acestuia.
Împrumutare carte: – pentru a se realiza împrumutarea unei cărți se introduce userul membrului care împrumută cartea și id-ul exemplarului.
Returnare carte: – pentru a returna o carte trebuie introdus id-ul exemplarului.
Adăugare membru: – la adăugarea unui membru se va selecta tipul acestuia (membru sau administrator), numele și prenumele noului membru, adresa la care acesta locuiește, precum și o adresă de email folosită de acesta, un nume de utilizator care trebuie sa fie unic și o parola pentru a securiza accesul persoanelor neautorizate.
Ștergere membru: – pentru a șterge un membru trebuie introdus numele acestuia de utilizator.
Informații situație cărți membri: – pentru a vizualiza istoricul unui membru trebuie introdus numele acestuia de utilizator.
Cărți întârziate: – se vor afișa cărțile care nu fost returnate la timp.
Istoric operații: – se vor afișa istoricul tuturor operațiilor de împrumutare și returnare realizate.
Cărți împrumutate: – se vor afișa cărțile împrumutate la momentul actual de către respectivul membru.
Cărți întârziate: – afișează cărțile pe care membrul nu le-a returnat la timp.
Istoric operații: – afișează toate operațiile de împrumutare și returnare a membrului.
Fig. 3.3
Interfața cu utilizatorul
La accesarea adresei de Internet aferente bibliotecii, utilizatorul va fi întâmpinat de pagina destinată autentificării în aplicație (Fig. 3.4):
Fig. 3.4
Dacă autentificare a avut loc cu succes, următoarea pagină afișată utilizatorului diferă în funcție de tipul de utilizator folosit de acesta pentru autentificare: astfel că pentru utilizatori de tip administrator Fig. 3.5 iar pentru utilizatori de tip membru Fig. 3.6. În cazul în care autentificarea în aplicație eșuează utilizatorul va fi atenționat printr-un mesaj (Fig. 3.7).
Fig. 3.5
Fig. 3.6Fig. 3.7
Structuri de date și fișiere
Pentru a asigura buna funcționare a aplicației baza de date va fi formată din patru tabele și va conține date despre autorul și titlul cărților existente în bibliotecă, date specifice fiecărui exemplar în parte, date despre utilizatorii aplicației și o tabela care va conține toate operațiile de împrumuturi realizate de către membri biblioteci.
Tabela “utilizatori”: va conține date referitoare la utilizatorii aplicației
username: va conține numele unic ales de utilizator
parola: va conține parola aleasă de către utilizator
tip: va specifica tipul utilizatorului (administrator sau membru)
nume: numele de familie al utilizatorului
prenume: prenumele utilizatorului
adresa: adresa de domiciliu al utilizatorului
email: o adresă de e-mail folosită de utilizator
Tabela “carti”: va conține date despre cărțile disponibile în bibliotecă
autor: numele autorului unei cărți
titlu: titlul cărții
id_carte: un id unic atribuit automat fiecărei cărți introduse în baza de date
Tabela “examplare”: va conține date despre fiecare exemplar în parte
id_exemplar: un id unic atribuit fiecărui exemplar la introducerea în baza de date
editura: editura exemplarului
limba: limba în care este scris exemplarul
perioada: perioada pe care se poate împrumuta o carte
id_carte: id-ul după care se va face legătura cu tabela părinte “carti”
disponibil: un fanion care ne va spune daca exemplarul este disponibil sau nu pentru împrumutare
Tabela “imprumuturi”: – în această tabela se va tine o evidență a cărților împrumutate și cui sunt acestea împrumutate
user: numele utilizatorului care a împrumutat cartea
id_exemplar: id-ul exemplarului care a fost împrumutat
data_imprumutarii: data la care exemplarul a fost împrumutat
data_returnarii: data la care el a fost returnat de către utilizator
Cap. 4. Proiectarea de detaliu
Arhitectura programului
Din punct de vedere arhitectural programul este compus din 3 mari module și anume: interfața cu utilizatorul, partea de server și baza de date. O imagine sugestivă a modului de comunicare între module este prezentat în Fig. 4.1.
Fig. 4.1
Browser-ul web trimite cereri către Controller care este reprezentat de Servleturi.
Servletul instanțează obiecte de tip Java care sunt conectate la baza de date.
Servletul comunică cu paginile JSP.
Paginile JSP comunică cu obiectele de tip Java.
Paginile JSP trimit răspunsuri către Browser care le afișează utilizatorilor.
Descrierea componentelor
Pentru o detaliere mai exactă a modului de realizare a interfeței cu utilizatorul am decis detalierea acestuia pe module, fiecare modul având propriile intrări, prelucrări de date în interiorul modulului și ieșiri.
Modul Autentificare
Acest modul permite accesul utilizatorilor în sistem.
Modul Adăugare carte
Acest modul permite adăugarea cărților noi în sistem.
Modul Adăugare exemplar
Acest modul permite adăugarea de noi exemplare în sistem.
Modul Căutare carte
Acest modul permite căutarea cărților din sistem.
Modul Ștergere carte
Acest modul permite ștergerea cărților sau exemplarelor din sistem.
Modul Împrumutare carte
Acest modul permite ștergerea cărților sau exemplarelor din sistem.
Modul Returnare carte
Acest modul permite ștergerea cărților sau exemplarelor din sistem.
Modul Adăugare membru
Acest modul permite adăugarea cărților noi în sistem.
Modul Ștergere membru
Acest modul permite ștergerea cărților sau exemplarelor din sistem.
Modul Informații cărți utilizatori
Acest modul permite ștergerea cărților sau exemplarelor din sistem.
Modul Cărți întârziate
Acest modul permite ștergerea cărților sau exemplarelor din sistem.
Modul Istoric operații
Acest modul permite ștergerea cărților sau exemplarelor din sistem.
Descrierea comunicării între module
Comunicarea între modulele programului, adică comunicarea între interfața cu utilizatorul care se realizează folosit tehnologia Java Server Pages (JSP) și partea de server care se va realiza folosind tehnologia Servlet se bazează pe protocolul Hypertext Transport Protocol (HTTP).
Structuri de baze de date și fișiere
În Fig. 4.2 este prezentată o descriere succintă a bazei de date și a legăturilor dintre tabele.
Fig. 4.2
Cap. 5. Utilizarea sistemului
Lansarea aplicației
Lansarea aplicației se realizează prin accesarea, cu ajutorul browser-ului de Internet, a adresei:
Autentificarea în aplicație
Din rațiuni de securitate, accesul la funcționalitățile aplicației se efectuează exclusiv prin autentificarea utilizatorului pe bază de nume de utilizator și parolă.
Fig 5-1– Fereastra de autentificare a utilizatorului
Lansarea procesului de autentificare se realizează prin introducerea numelui de utilizator în căsuța numită “Nume utilizator”, completarea parolei în căsuța numită “Parola” și apoi apăsarea butonului “Autentificare”.
Necompletarea de către utilizator a unuia dintre câmpurile necesare autentificări, respectiv “Nume utilizator” sau “Parola” se v-a semnala prin afișarea unui mesaj de eroare specific problemei semnalate și anume Fig. 5.2 pentru lipsă nume utilizator și Fig. 5.3 pentru lipsa parolă.
Fig. 5-2– Lipsă nume utilizator
Fig. 5-3– Lipsă parolă
În cazul în care fie numele de utilizator, fie parola sunt incorecte aplicația va afișa un mesaj de eroare de autentificare (Fig. 5.4).
Fig. 5.4– Eroare autetificare
Fereastra principală
Efectuarea cu succes a autentificării utilizatorului în aplicație este reliefată prin afișarea pe ecranul calculatorului a ferestrei principale a aplicației, fereastră care se va adapta dinamic în funcție de tipul utilizatorului (pentru administrator Fig. 5.5 iar pentru membru Fig. 5.6), în cadrul căreia sunt prezentate principalele funcționalități ale aplicației.
Fig. 5.5– Fereastră administrator
Fig. 5.6– Fereastră membru
Secțiunile aplicației
Adăugarea unei cărți
Această funcționalitate permite administratorilor să adauge cărți utilizând oricare din cele două metodele existente, și anume:
adăugarea unei cărți noi prin introducerea autorului și titlului cărții care se dorește a fi adăugată în baza de date (Fig. 5.7).
adăugarea unui nou exemplar dintr-o carte deja existentă în baza de date a bibliotecii prin selectarea autorului și a titlului cărții pentru care se dorește adăugarea unui nou exemplar și prin introducerea id-ului unic de exemplar, a editurii și selectarea limbii în care este scrisă cartea și a perioadei pe care aceasta poate fi împrumutată (Fig. 5.8).
Fig. 5.7– Adăugare carte
Fig. 5.8– Adăugare exemplar
Căutarea unei cărți
Această funcționalitate permite utilizatorilor să caute cărți utilizând oricare din cele trei metodele existente, și anume:
căutarea după autor : se introduce nume autorului căutat (Fig. 5.9);
căutarea după titlu: se introduce titlul cărții căutate (Fig. 5.10);
căutarea după editură: se introduce numele editurii căutate (Fig. 5.11).
Fig. 5.9– Căutare după autor
Fig. 5.10– Căutare după titlu
Fig. 5.11– Căutare după editură
Ștergerea unei cărți
Această funcționalitate permite administratorilor să șteargă cărți sau exemplare utilizând oricare din cele două metodele existente, și anume:
ștergere carte: în care se caută cartea care se dorește a fi ștearsă, se selectează apăsând click pe cartea dorită și apoi se apasă butonul “Stergere” (Fig. 5.12);
ștergere exemplar: se introduce id-ul exemplarului și se apasă butonul “Stergere” (Fig. 5.13).
Fig. 5.12– Ștergere Carte
Fig. 5.13– Ștergere Exemplar
Împrumutare/Returnare
Această funcționalitate permite administratorilor împrumute cărți sau să opereze returnări utilizând oricare din cele două metodele existente, și anume:
împrumutarea unei cărți: se introduce numele utilizatorului care dorește împrumutarea unei cărți și id-ul cărții care se dorește a fi împrumutată (Fig. 5.14);
returnarea unei cărți: se introduce id-ul cărții care se returnează (Fig. 5.15).
Fig. 5.14– Împrumutare carte
Fig. 5.15– Returnare carte
Membri
Această funcționalitate permite administratorilor adăugarea și ștergerea membrilor utilizând oricare din cele două metodele existente, și anume:
adăugare membru: se realizează prin selectarea tipului de utilizator (membru sau administrator), introducerea numelui și a prenumelui noului membru, a dresei acestuia, a unei adrese de e-mail folosita în mod frecvent de către acesta și prin alegerea unui nume de utilizator unic și a unei parole (Fig. 5.16);
ștergere membru: se realizează prin introducerea numelui de utilizator care se dorește a fi șters și apăsarea butonului “Stergere” (Fig. 5.17).
Fig. 5.16– Adăugare Membru
Fig. 5.17– Ștergere Membru
Informații membri
Această funcționalitate permite administratorilor vizualizarea istoricului împrumuturilor unui utilizator prin introducerea numelui de utilizator al acestuia (Fig. 5.18).
Fig. 5.17– Informații Membri
Statistici
Această funcționalitate permite administratorilor vizualizarea cărților întârziate și a istoricul operațiilor utilizând oricare din cele două metodele existente, și anume:
cărți întârziate: afișează cărțile întârziate la data curentă (Fig. 5.18);
istoric operațiuni: afișează toate operațiile de împrumutare realizate până la data curentă (Fig. 5.19).
Fig. 5.18– Cărți întârziate
Fig. 5.19– Istoric operațiuni
Ieșirea din aplicație
Pentru a ieși din aplicație, utilizatorul trebuie să utilizeze legătura numită “Deconectare” (Fig. 5.20).
Fig. 5.20– Deconectare
Cap. 6. Concluzii
Trăim într-un secol în care Internetul considerat cândva un moft sau poate chiar un lux a evoluat și a ajuns la stadiul de necesitate. Ironia sorții face ca în Romania secolului XXI să avem sate fără curent dar cu fibră optică pentru acces la Internet de mare viteză. Evoluția tehnologiei dar mai ales a Internetului ne-a adus într-un stadiu în care informația se află doar la un “click” distanță de noi, depinzând doar de noi dacă vrem să accesăm această informație sau vrem să o lăsăm să treacă pe lângă noi.
Continuând în aceeași ordine de idei aș putea afirma că lumea moderna este de neconceput fără informație. De la informația banală pe care o accesăm zilnic (programe tv, rețete culinare) la informația ultra specializată necesară cercetătorilor sau informații economice fără de care redresarea economiei mondiale este greu de imaginat, toate aceste forme ale informației sunt absolut necesare unei civilizații moderne.
Totuși imensul progres al tehnologiei nu a reușit încă să ne aducă în postura de a avea toată informația necesară în format electronic, existând încă situații în care informația căută de noi se află tipărită pe paginile unei cărți, pierdută undeva pe rafturile unei biblioteci, iar pentru a facilita accesul la această informație este absolut necesară informatizarea bibliotecilor.
Aplicația propusă de mine ajută mult la eficientizarea bibliotecilor, ea asigurând o mai bună centralizare a tuturor cărților din bibliotecă, a membrilor bibliotecii și a împrumuturilor acestora. Timpul necesar căutării și împrumutării unei cărți este redus substanțial, de asemenea costurile cu personalul bibliotecii scad, reducând-se numărul personalului necesar bunei funcționări a bibliotecii. Aplicația vine în sprijinul utilizatorilor prin aceea că permite accesul în aplicație de pe orice calculator cu conexiune la Internet, eliminându-se timpul pierdut pe drumul până la bibliotecă și odată ajuns constați indisponibilitatea cărții căutate sau că ea nu se află în posesia bibliotecii.
La baza sistemului integrat de evidentă a cărților unei biblioteci propus de mine stă limbajul de programare JAVA, care este un limbaj foarte puternic și foarte des folosit. Un programator bun și cu un bagaj de cunoștințe temeinice ar trebui să fie capabil să implementeze o specificație în orice limbaj de programare, problema apare însă în momentul în care se aduc în discuție resursele irosite, timpul și bani necesari finalizării proiectului, sau chiar nervii cauzați de unele probleme întâmpinate.
Altfel spus un limbaj de programare trebuie în primul rând să ajute programatorul în munca sa, oferindu-i metodologii, tehnici și librarii de funcții bine structurare și care să acopere o multitudine de domenii. Limbajul Java, face parte din acele limbaje de programare care asigură un puternic suport pentru implementarea de aplicații din cele mai diverse domenii, asigurând în același timp o serie de tehnologii de ultima ora, printre care putem aminti: programarea orientata pe obiecte, independenta de platforma, suport pentru programarea distribuită și pentru multitasking, mecanisme deosebite de tratare a excepțiilor, suport pentru aplicați multilingve, suport pentru baze de date, mecanisme de securitate si criptografie puternice, si multe altele.
Lumea se schimbă de la o zi la alta, tehnologiile avansează, apar noi și noi aplicații software care încet încet ne conduc către o lume computerizată. Eu cred ca limbajul Java ocupă și va ocupa un loc foarte important în această lume și are un lor deosebit de important în dezvoltarea de noi tehnologi, din aceste motive am ales acest limbaj pentru implementarea aplicației.
Aplicația pentru evidența cărților într-o bibliotecă este doar o mică parte din aceasta lume imensă a limbajului de programare Java, deoarece folosirea ei ușurează munca multor oameni din diverse categorii sociale.
Versiunea actuală a aplicație de evidență a cărților într-o bibliotecă nu este versiunea finală, ci dimpotrivă doar prima versiune. Aplicația poate fi îmbunătățită prin adăugarea de noi funcționalități. Iată câteva lucruri noi care ar putea fi incluse într-o dezvoltare viitoară a acestui program:
aplicația să trimită automat câte un mail de atenționare atunci când perioada de returnare a fost depășită pe adresa de email furnizată de fiecare membru la înscriere.
utilizarea unui cititor de cod de bare pentru atribuirea automată a id-ului aferent fiecărei cărți în funcție de codul ei de bare.
utilizarea unui cititor de cod de bare pentru returnarea directă a cărților nemaifiind nevoie de intervenția unui administrator pentru returnarea unei cărți.
Acestea sunt doar niște idei de dezvoltare a aplicației de evidență a cărților într-o bibliotecă, dar, având în vedere progresul tehnologiei, mai pot apărea și altele.
Bibliografie
[1] http://www.competentedigitale.ro/it/it13.html
[2] http://www.scritub.com/stiinta/informatica/Utilizarea-tehnologiei-informa25999.php
[3] http://bibliotecari.blogspot.ro/2006/11/tlib-program-de-gestionat-biblioteca.html
[4] Cristian Frasinaru – Curs practic de Java
[5] http://upm.ro/intranet/ecalin/cd_educational/cd/javac/cap1.htm
[6] Ghid de inițiere în limba HTML
[7] Ioan Filip – Programarea Aplicațiilor Internet
[8] http://www.byte.ro/byte97-05/07servlet.html – Servleturi – un alt fel de aplicații Java
[9] http://carti.itarea.org/index.php?dir=Carti%20programare%20si%20de%20calculator%20in%20Limba%20Romana/Curs%20Java/Curs%20Java/ – Tehnologia Java Server Pages
[10] http://ciobanu.cich.md/lectii_view.php?id=16
[11] https://sites.google.com/site/nwradu/ajax
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Proiectarea Si Realizarea Unei Solutii Pentru Evidenta Cartilor Dintr O Biblioteca (ID: 150224)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
