Domeniul de Licitatii Online

CUPRINS

Introducere

Odată cu începuturile Internetului, un nou tip de afacere s-a profilat din ce în ce mai pronunțat pe plan internațional: comerțul online.

Au apărut nenumarate site-uri și firme care se ocupă cu vânzările en-gros de produse prin Internet, cu organizarea de licitații online, cu furnizarea accesului contra cost la pagini cu informatii, intr-un cuvant abordeaza o forma sau alta de comerț electronic, un domeniu aflat în plina expansiune.

Avantajul comerțului online este evident: piata pe Internet creste exponential de la un an la altul.

Un site bine lucrat, cunoscut și care ofera produse de calitate la preturi bune va avea mai multi vizitatori și mai motivati.

Afacerile pe internet folosesc tehnologia pentru a eficientiza o afacere.

Licitațiile electronice pe Web au devenit un nou și fascinant tip de mecanism de schimb. În fiecare zi sute de mii de actiuni diferite au loc pe Internet. Internetul ca și modalitate de comunicare a scazut costurile de organizare a unei licitații și cele de participare, fapt care a dus la utilizarea acestora intr-o amploare din ce în ce mai mare. În prezent în cadrul licitațiilor electronice au loc tranzacții de miliarde de dolari pe an, iar rata de crestere lunara este de 10%. De curand licitațiile electronice au capatat atentia presei și ele reprezinta un subiect bogat de studiu pentru economistii care doresc sa inteleaga varietatea diferita a mecanismelor de schimb folosite în practica.

Licitațiile electronice au cateva avantaje comparativ cu licitațiile traditionale. Primele au o raspandire mult mai mare atât în spatiul geografic cât și în timp. În loc sa participe fizic prin prezenta la locul unde are loc licitația, cel interesat poate sa liciteze de acasa sau de la birou. Licitațiile traditionale presupun participarea în acelasi timp a tuturor licitatorilor, fiecare dintre ei incercand sa-l supraliciteze pe celalalt pe parcusul intregii licitații, spre deosebire de licitațiile electronice care sunt asincrone adica pot dura zile sau saptamani avand o flexibilitate mai mare în ceea ce priveste momentul în care se poate licita. Aceasta caracteristica il favorizeaza și pe vanzator, prin faptul ca permite largirea pietii pentru bunul scos la licitație. Pe Internet se poate obtine foarte usor un grup mare de licitatori fata de programarea unei licitații cu o luna inainte și restrictionarea geografica la licitatorii din zona. Mai mult decât atât, gasirea unui anumit produs este mult mai usor de realizat folosind motoarele de cautare sau prin navigarea în cadrul categoriilor unui site de licitații electronice. De exemplu, este mult mai usor sa gasesti un produs din doua milioane de produse listate pe situl eBay decât sa-l cauti intr-un catalog care conține cateva mii de produse.

Mai presus de licitațiile traditionale, un alt punct de comparatie il constituie clasificarea anunturilor de licitații electronice. Multe dintre produsele vandute în cadrul siturilor de licitații electronice ca și eBay sunt asemanatoare cu produsele din anunturile din ziare. În realitate o licitație electronica poate fi mai ieftina decât un anunt în ziar. Prin intalnirea cumparatorului cu vanzatorul în cadrul licitațiilor electronice, un produs considerat de o anumita persoana ca inutil poate fi cumparat de altcineva ca și produs de colectie. Mai mult decât atât folosind un site de licitații electronice vanzatorul nu trebuie sa fixeze un pret pentru un anumit produs. Decat sa stabileasca un pret prea mic care sa-l dezavantajeze sau sa puna un pret prea mare și produsul sa ramana nevandut, vanzatorul poate sa lase piata sa fixeze pretul.

Odata ce ai intrat pe un astfel de site poti sa consulti articolele listate, care sunt insotite de termenii în care are loc licitația, precum: pretul de pornire, durata licitației, tipul licitației, eventual un pret rezervat la care vanzatorul este dispus sa vanda doar dacă s-a ajuns la acest pret, care de regula nu este afisat, descrieri detaliate ale obiectului, eventual insotite de imagini, detalii privind procedura de plata, asigurarile, transportul și conditiile livrarii, etc. Forma și nivelul de detaliere a ofertei vanzatorului sunt decise chiar de către acesta, succesul tranzacției urmand sa depinda de toate aceste elemente. Dacă ce ai gasit te satisface, nu ai decât sa intri în joc și sa incepi sa licitezi, conform unui pas de licitație care este și el precizat. În momentul în care a expirat durata unei licitații, dupa stabilirea castigatorului, situl dezvaluie partilor implicate identitatea celuilalt, însă perfectarea tranzacției este, în ultima instanta, sarcina celor doi parteneri, implicarea sitului putand fi de natura strict logistica. De altfel, siturile de licitații își declina încă de la bun inceput orice implicare în procesul de licitare propriu-zisa. Tot ceea ce fac este sa supravegheze respectarea regulilor licitației și sa incerce sa evite eventuale tentative de frauda. Scopul ultim al proprietarilor unui astfel de sit este generarea de cât mai mult trafic și cât mai multe tranzacții reusite și orice atitudine partinitoare ar avea un efect nociv asupra increderii utilizatorilor. Nimeni nu impiedica utilizatorii sa se implice în oricat de multe tranzacții simultan și pe situri diferite. De multe ori, siturile ofera instrumente de administrare a tranzacțiilor multiple sau trimit către firme partenere care asigura servicii cu valoare adaugata fata de ceea ce poate oferi situl. Un exemplu în acest sens este chiar cel mai mare sit de licitații online din lume, eBay, care ofera utilizatorilor serviciile furnizate de AuctionWatch.com. Practic, clientii siturilor de licitații devin, dacă doresc, și clientii siturilor de servicii, în a caror oferta se gasesc aplicatii de administrare a mai multor conturi, pe diferite situri de licitații.

Pentru siturile de licitații, sursele primare de venit sunt taxele percepute pentru listarea articolelor și, eventual, o cota parte din valoarea finala a tranzacției, la care se adauga veniturile "traditionale" provenite din publicitatea pe site. În cazul siturilor de servicii, veniturile primare sunt reprezentate de taxele percepute utilizatorilor pentru diferitele servicii cu valoare adaugata oferite. În acest fel, toata lumea are de castigat.

Principala problema, de fapt cheia succesului unui astfel de sit de licitații electronice, este una de incredere din partea participantilor la tranzacții. Solutia gasita este sistemul de "feed-back", în care vanzatorul roaga cumparatorul sa-i trimita o reactie fata de tranzacție, care poate fi pozitiva sau negativa. Aceste reactii se regasesc sub forma unor calificative atasate fiecarui utilizator și care pot fi consultate de oricine ar fi interesat sa cumpere de la respectivul. Cel mai greu este la inceput, când tot acest feed-back nici nu are cum sa existe. În timp însă increderea creste. Este mai usor sa cumperi de la un vanzator care are un feed-back foarte mare, iar grupul acestor vanzatori cu un feed-back puternic da forta respectivului sit. Exista oameni pentru care vanzarea și cumpararea pe siturile de licitații a devenit o adevarata afacere în sine sau o a doua afacere. Ei fac o forma de e-commerce fără a fi proprietarii unui site și de obicei tranzacționeaza marfuri serioase, nu neaparat second-hand sau obiecte de colectie. Practic, marea masa a acestora genereaza volumul mare de trafic al sitului și, în cele din urma, cresterea afacerii.

Din pacate, în Romania nu exista încă aceasta masa critica. În SUA și alte tari dezvoltate, siturile de licitații sunt folosite în special de utilizatorii individuali, de acasa. Un procent insemnat dintre acestia este reprezentat de femeile casnice, care de multe ori se ocupa de licitații ca de o reala afacere personala, condusa de acasa. O alta categorie de participanti la procesul de licitare este reprezentata de firmele care se afla în proces de lichidare a activelor. Fie este vorba de active noi, fie de obiecte mai vechi, însă functionale, cum ar fi mobilier de birou, calculatoare, diverse alte elemente de birotica. De remarcat ca siturile de licitații nu reprezinta un canal obisnuit pentru achizitii publice și nici pentru tranzacțiile din domeniul industrial, cu materii prime, servicii etc. Natura tranzacțiilor de acest tip implica situri specializate sau "burse virtuale", la care un utilizator obisnuit de licitații online în mod normal nu are acces.

Negocierea pe Internet permite unei afaceri sa atraga un numar mare de potentiali cumparatori sau vanzatori intr-o perioada scurta de timp și la un cost minim comparativ cu folosirea altor canale de comunicatie.

În concluzie, licitațiile electronice reprezinta una dintre cele mai interesante manifestari ale comerțului electronic.

Aplicatiile distribuite sunt de o buna perioada de timp o prezenta uzuala în peisajul IT chiar și din tara noastra. Ultimii ani au însemnat, de asemenea, și pasi semnificativi și concreti în impunerea Internetului în întreaga economie și societate. Odata cu acesta, aplicatiile distribuite – care au ca suport Internetul și tehnologiile dezvoltate pentru acesta și împreuna cu el, au trecut de la stadiul de noutati tehnologice la cel de prezenta reala în comunitatea IT.

Comerțul electronic a devenit foarte cunoscut în societatea informationala care se dezvolta continuu din 1990. Internetul a facut comerțul electronic sa fie disponibil unui larg grup de utilizatori, în principal mici intreprinderi și utilizatori casnici. În cadrul comunitatii de afaceri, indreptarea către eficienta și productivitate crescuta este de asteptat sa duca, către o mai mare acceptare a comerțului electronic către intreprinderi ca fiind o cale de a face afaceri în viitor. Dezvoltarea tehnologica a infrastructurii și a mecanismelor de acces și costurile în scadere vor ajuta dezvoltarea acestuia. Totusi temerile de securitate și lipsa de instruire pot fi un obstacol în dezvoltarea comerțului electronic.

Comerțul electronic ofera o serie de avantaje majore. Principale avantaje sunt și cele mai cunoscute atuuri din lume: timpul și banii. În ceea ce priveste timpul, se face o foarte mare economie. Utilizatorul poate sa vada o lista de produse și preturi în cateva minute din confortul propriului fotoliu. Nu mai sunt necasare deplasari sau alte actiuni care consuma timp inutil. Aceasta economie de timp rezulta astfel intr-o crestere a rentabilitatii, de unde reiese și o economie de bani.

Capitolul I- Prezentarea domeniului de licitații online

Cea mai vehiculata forma la ora actuala de comerț electronic cu amanuntul în randul persoanelor fizice sunt licitațiile online.

Avantajele inscrierii la o licitație online se rezuma în principal la posibilitatea obtinerii unor castiguri rapide din vanzarea, practic de către oricine, în timp record, prin Internet, a oricaror obiecte imaginabile: de la postere, casete, cd-uri, timbre, vederi, monezi, până la tablouri, obiecte de mobilier vechi, antichitati, masini de epoca.

Cel mai cunoscut site la ora actuala de licitații pe Internet și totodata unul dintre cele mai ramificate ca și gama de oferte este Ebay (www.ebay.com).

1.1 Contextul românesc

Licitațiile online, asa cum au fost ele adaptate specificului pietei romanesti, ar putea constitui – cel putin pentru perioada de criza economica interna prin care trecem – o formula de comerț electronic simpla și accesibila pentru orice roman. Exista, bineinteles, diferente intre licitațiile online din Romania și cele din tarile dezvoltate. Chiar dacă licitațiile electronice romanesti nu functioneaza încă dupa modelul occidental, ele exista și se dezvolta intr-un sistem hibrid, ce reuseste sa adapteze elemente de e-commerce la realitatea sociala și economica din Romania.

Aflate încă intr-o faza relativ incipienta din punct de vedere al numarului de utilizatori înregistrati și al volumului tranzacțiilor, siturile de licitații online din Romania sunt gratuite, deci nu percep nici taxe de acces, nici taxe pentru listarea obiectelor, nici cote parte din tranzacții. În acordul de utilizare, afisat în momentul înregistrarii, cei de la situl OKazii.ro își rezerva însă dreptul de a percepe, la un moment dat în viitor, o taxa pentru serviciile prestate, dupa o prealabila notificare în termeni rezonabili, însă în prezent serviciile oferite sunt absolut gratuite. Modalitatea efectiva de plata pentru licitațiile încheiate cu succes se stabileste fie ulterior tranzacției, de către cei doi parteneri, de comun acord, fie este precizata de la bun inceput de licitator, cel care cumpara asumandu-și deci, implicit, conditiile de plata solicitate.

Primul sit de licitații online din Romania, OKazii.ro, a fost lansat la 5 aprilie 2000, de compania netBridge din Bucuresti. Proiectul viza o licitație absolut gratuita, situl OKazii.ro propunandu-și sa fie strict un loc de desfasurare a pietei. Cu o structura echilibrata și extrem de variata a categoriilor de obiecte scoase la licitație, situl s-a remarcat rapid dupa lansare, în special prin licitațiile în scopuri umanitare, la care diverse personalitati din mediile culturale, politice sau artistice din Romania au scos la licitație obiecte personale, sumele rezultate fiind donate pentru acte caritabile.

1.2 Dezavantajele licitațiilor online

Dezavantajul participarii la orice forma de licitație online este acela ca desi oricine poate vinde (și punerea în vanzare este rareori gratuita, fiind deobicei perceputa o taxa per obiect scos la licitație ca de altfel și pentru fiecare licitație încheiata cu succes), doar pentru în jur de 10% dintre obiectele scoase la licitație exista clienti interesati care și liciteaza ca atare.

Explicatia vine atât din faptul ca oferta este mai mare decât cererea, cât și din alte cauze importante cum ar fi: pretul de inceput (deseori mult prea mare), lipsa unei prezentari profesionale care sa puna cu adevarat în valoare obiectul, lipsa de credibilitate a ofertantului în comunitatile Internet specializate, etc.

În contextul în care numai pe site-ul Ebay se scot la licitație saptamanal milioane de obiecte și deci concurenta este acerba, devine foarte important pentru ofertantul de produse, ca prim pas spre succes, crearea și pastrarea unei credibilitati totale, cu ajutorul feedback-urilor pozitive obtinute de la cumparatorii cu care a încheiat tranzacții anterior.

Acest feedback se traduce prin aprecierile la adresa unui ofertant, postate în mod public pe site-ul gazda al licitației de către cumparatorii mai vechi, cu privire la: veridicitatea prezentarii initiale fata de produsul final obtinut, frecventa și calitatea raspunsurilor ofertantului la emailurile de contact ale potentialilor clienti, perioada de timp scursa de la incheierea licitației până la primirea produsului și lista nu se opreste aici.

Dacă se aduna mai multe feedback-uri negative la un comerciant, acesta nu va mai putea vinde niciodata pe site-ul respectiv (și poate nici pe altele) din cauza lipsei de credibilitate.

1.3 Avantajele licitațiilor online

Exista totusi și un avantaj extrem de important în derularea unei licitații electronice avand originea intr-o tara est europeana ca Romania: preturile mai mult decât modice la obiectele de interes unanim cum ar fi cele de arta decorativa (ca sa dam numai un singur exemplu) în comparatie cu preturile practicabile în Europa de Vest sau America pentru aceeasi gama de produse.

Chiar și numai din acest punct de vedere, riscurile unor investitii în scopul derularii prin intermediari a unor lictatii "din Romania" se justifica pe deplin în cazul în care oferta trezeste interesul în Vest.

Dacă vrei sa vinzi ceva – nu mai trebuie sa raspunzi la un sir neintrerupt de apeluri telefonice și sa decizi cui ar trebui sa-i vinzi. Toate aceste probleme sunt rezolvate aici .

Paleta larga a ofertei de articole este visul oricarui cumparator.

Nu vei gasi asa o diversitate de produse în nici un alt magazin, nici la mica publicitate și nici macar în targuri.

Un numar mare de cumparatori – visul fiecarui vanzator.

Un site de licitații online reprezinta pentru vanzatori oportunitatea de a obtine cel mai bun pret, iar pentru cumparatori reprezinta cea mai rapida modalitate de a obtine ceea ce doresc la un pret rezonabil.

Articolele pe care doresti sa le vinzi pot prinde viata: ii poti face o descriere completa, poti prezenta fotografii color a acestuia și chiar poti prezenta o scurta istorie a acestuia de când se afla la tine.

Este mult mai eficient și mai ieftin decât reclamele din ziare – singura limita e imaginatia ta.

Legi cunostinte în mod interactiv: poti pune intrebari unui vanzator, poti lua legatura cu ceilalti cumparatori – nu exista constrangeri în ceea ce priveste ora la care comunici, varsta, etc.

1.4 Licitațiile electronice – prezentare generală

1.4.1 ISTORIA LICITAȚIILOR ELECTRONICE

Licitațiile electronice au aparut inainte ca Web sa fie disponibil la scara larga. Inainte de aparitia primului browser de Web Mosaic la sfarsitul anului 1993, exista un numar de licitații electronice care se desfasurau în cadrul grupurilor de stiri (newsgroups) și a listelor de posta electronica (email). Primul grup de stiri în cadrul caruia s-au desfasurat licitații electronice a aparut la inceputul anului 1993 în cadrul caruia se tranzacționau cartoane din jocul" Magic: the Gathering". Sute de vanzatori diferiti vindeau la licitație în cadrul acestui grup, licitația avand o durata de cateva zile sau saptamani. Licitatorii trimiteau oferta prin posta electronica(email), iar vanzatorul realiza în fiecare zi o acualizare a celei mai mari oferte primite.

Primele situri de licitații electronice se pare ca au fost Onsale care s-a lansat în mai 1995 și eBay în septembrie acelasi an. Acestea au fost primele care au beneficiat de tehnologia Web, incluzand realizarea licitarii automate, ofertele fiind introduse prin formulare electronice, de cea a motoarelor de cautare și de listarea tipurilor de licitații desfasurate în cadrul acestora. La fel ca și în cadrul grupurilor de stiri, licitațiile electonice bazate pe Web aveau o durata de cateva zile sau saptamani, permitand licitatorilor sa aleaga când sa liciteze.

Prin contrast, eBay a incurajat de la inceput persoanele individuale sa listeze licitațiile proprii online. La inceput majoritatea produselor listate pe situl eBay erau cele de colectie, dar mai existau și altele în afara de acestea care se licitau. Vanzatorii de pe situl eBay aveau posibilitatea sa aleaga un numar de caracteristici pentru fiecare actiune ca: durata licitației, oferta minima acceptata și optional un pret secret rezervat. Acest site a avut o crestere rapida în timp, de aproximativ 13% pe luna.

Mai existau multe situri de licitații electronice cu modele de afaceri relativ similare dar nici unul nu s-a apropiat la dimensiunea celui gazduit de eBay.

O sarcina dificila o reprezinta estimarea dimensiunii pietei de licitații electronice și a volumului de tranzacții derulate pe situl Web. Totusi aceasta sarcina este mult mai usor de realizat în cazul licitațiilor electronice decât în orice alt tip de afacere, deoarce acestea prin natura lor afiseaza o mare cantitate de informatie pe site referitoare la preturi și la cantitati.

În octombrie 1998, respectiv martie 1999 doua mari companii bazate pe tehnologia Web, Yahoo și Amazon au anuntat realizarea propiilor situri de licitații electronice asemanator celui de la eBay. EBay are pozitia de favorit pe piata, fiind și primul venit, vanzatorii preferand sa listeze produsele acolo unde sunt cei mai multi vizitatori, iar cumparatorii prefera sa viziteze siturile cu gama cea mai variata de produse.

Cele mai tranzacționate produse de departe au fost produsele de colectie, mai mult de 60% din siturile de licitații electronice includeau categoria respectiva în lista lor. O alta subcategorie importanta o constituie și licitațiile de antichitati, timbre, monede, jucarii și cartoane de colectie.

În loc sa se specializeze pe un anumit tip de produse, majoritatea siturilor tranzacționeaza produse din mai multe categorii. Tehnologiile moderne permit gasirea cu usurinta a produselor fie prin folosirea unor optiuni de cautare, fie prin folosirea meniurilor.

O intrebare la care trebuie sa raspunda economistii o reprezinta: Ce tipuri de produse trebuie licitate în cadrul unui site de licitații electronice? Odata cu scaderea costurilor de realizare și intretinere a unui site Web, se asteapta în viitor la aparitia unor noi tipuri de produse care vor fi licitate pe aceste situri. Aceasta piata în formare a licitațiilor electronice a inceput deja sa liciteze o mare varietate de bunuri, în special produsele de colectie ieftine care inainte erau foarte rar intalnite la o licitație traditionala.

O caracterisitca a licitațiilor electronice o constituie tendinta care se manifesta de licitare a produselor folosite, produsele noi avand o pondere mai redusa. Aceasta a aparut datorita flexibilitatii fixarii preturilor la produsele folosite, licitațiile pot determina care este pretul pietei pentru un anumit bun folosit, pe când în cazul produselor noi acest pret este stabilit de producator. Evolutia licitațiilor electronice va duce la aparitia de noi categorii de produse care vor fi licitate pe siturile de specialitate.

O ipoteza este aceea ca în viitor vor fi tranzacționate produse la care nu se cunoaste cererea pe piata de către vanzator și acestea vor fi rulate în cantitati mici, deoarece în aceste circumstante vanzatorul beneficiaza de o piata flexibila, iar sansele sa obtina un pret bun sunt foarte mari. O alta tendinta de viitor care va putea lua amploare este cresterea volumului serviciilor licitate, ca de exemplu bilete pentru cinema, rezervari la hoteluri și altele. Avantajul serviciilor este acela ca acestea pot fi oferite intr-un flux relativ constant, spre deosebire de bunurile care sunt livrate în limita stocurilor existente până la epuizare. În prezent exista putine situri de licitații electronice care au în desfasurare licitații la servicii, dintre acestea cele mai des intalnite se refera la organizarea de calatorii sau rezervari la hoteluri iar ocazional au loc vânzări de bilete la concerte. Un obstacol care franeaza cresterea numarului de licitații la servicii il reprezinta caracterul local al acestora, în timp ce majoritatea licitațiilor au un cadru de desfasurare national sau international. Timpul ne va spune care sunt tipurile de licitații care vor avea succes în viitor. O atentie deosebita trebuie acordata modelului de afaceri a siturilor de licitații electronice.

1.4.2 TIPURI DE SITURI DE LICITAȚII ELECTRONICE

Exista doua tipuri de situri de licitații electronice:

situri de licitații electronice specializate în comercializarea produselor proprii

situri de licitații electronice specializate în listarea produselor unor vanzatori independenti de situl unde are loc licitația, care actioneaza ca un intermediar intre vanzator și cumparator

În primul caz, cel al siturilor specializate în comercializarea produselor proprii, o firma cum este cazul sitului Onsale, ofera produsele proprii spre vanzare actionand ca un comerciant doar ca alege sa-și vanda produsele prin organizarea de licitații electronice.

Un sit specializat în listarea produselor unor vanzatori independenti, cum ar fi de exemplu situl eBay, actioneaza ca un intermediar pentru alti vanzatori, permitandu-le acestora sa inregistreze produsele proprii și sa le liciteze în beneficiul lor. Aceste situri nu au produse proprii scoase la licitație și nici nu se ocupa cu realizarea platilor și nici cu livrarea produselor, toate detaliile sunt perfectate intre vanzator și cumparator. Unele situri combina cele doua modele de afaceri, licitand propriile produse dar în acelasi timp permit listarea altor licitații independente pe situl lor.

De multe ori distinctia nu e clara, multe din siturile "comerciale" liciteaza alte produse diferite de ale lor prin realizarea unei intelegeri cu partea proprietara. Trebuie facuta distinctia clara intre un sit specializat în listarea produselor unor vanzatori independenti, unde vanzatorii individuali au listate propriile licitații și siturile specializate în comercializarea produselor proprii unde produsele vandute nu apartin vanzatorilor individuali.

Majoritatea siturilor în prezent sunt situri de licitații electronice din a doua categorie și doar un numar redus au ca obiect de activitate comercializarea propriilor produse.

1.4.3 TIPURI DE LICITAȚII

Licitația reprezinta o operatiune de tip concurential care are drept protagonisti un proprietar de obiecte sau servicii care vinde și mai multi licitatori care cumpara și care sunt arbitrati dupa un set de reguli stabilite de un administrator al licitației. Scopul licitației este reprezentat de achizitionarea obiectului sau serviciului în competitie cu ceilalti licitatori.

Exista mai multe tipuri de licitații:

Licitații standard

Licitații închise

Licitații olandeze

Licitațiile standard

Licitația standard este licitația preferata de majoritatea utilizatorilor pe Internet, având reguli simple care nu difera cu mult de cele ale licitației clasice. Se poate pune în vanzare un singur articol, castigatorul licitației fiind cumparatorul care ofera cel mai mare pret pe durata stabilita pentru desfasurarea licitației.

Organizatorul licitației, ofertantul, va introduce pretul de pornire al licitației, în acest caz pretul minim la care ofertantul este dispus sa vanda care va fi cunoscut tuturor participantilor. Participantii la licitație vor furniza un pret de pornire care va trebui sa fie mai mare sau egal cu pretul de pornire introdus de organizator și un pret rezervat pretul maxim până la care sunt dispusi sa liciteze.

În momentul în care un cumparator gaseste produsul pe care il cauta poate decide sa liciteze completand un anumit formular. Dupa ce are loc completarea acestuia o actualizare automata ii va prezenta dacă oferta lui de licitare a devenit cea mai buna sau nu. El poate parasi situl în postura de castigator și se poate intoarce inainte de expirarea termenului limita pentru a fi sigur ca oferta lui este cea castigatoare.

Majoritatea siturilor ofera posibilitatea de a vizualiza foarte usor licitațiile pe care un anumit utilizator autentificat le are în desfasurare. În acelasi timp siturile trimit automat un mesaj de atentionare în momentul în care are loc o noua oferta mai mare a unui alt cumparator.

Intr-o licitație clasica în care licitatorii sunt prezenti în aceeasi camera, organizatorul licitației va închide licitația folosind formularea "o data… de doua ori… vandut". O licitație standard pe Web este diferita, avand vanzatori din mai multe zone geografice ale lumii și licitația dureaza de la o perioada de cateva zile până la cateva saptamani. De exemplu la eBay licitațiile dureaza sapte zile de la inceperea lor, acest interval fiind calculat exact la minute și secunde.

Acest aspect aduce în discutie o anumita problema: dacă licitația se incheie la o anumita data dinainte stabilita, atunci ce rost mai au ofertele din primele zile? Intr-adevar în prezent exista multe situri specializate care asteapta până în ultimele minute inainte de expirarea termenului unei licitații și ofera un pret cu putin mai mare decât în ultima oferta existenta castigand astfel licitația, fără a mai lasa timp pentru o noua oferta din partea celorlalti. Dacă toti cumparatorii ar folosi aceasta strategie de licitare, atunci ea ar deveni echivalentul unei licitații în care cel care face prima ofera este castigatorul licitației, deoarece pretul oferit de toti este acelasi. Ca o reactie impotriva acestor practici au aparut doua strategii alternative care incurajeaza participarea din primele zile a cumparatorilor la licitație:

Prima alternativa consta în extinderea duratei de desfasurare a licitației. În general aceasta se prelungeste cu cinci minute, aceasta insemnand ca dacă exista activitate în ultimile cinci minute ale licitației, aceasta se va prelungi cu încă cinci minute. Acest proces se poate repeta până când nu mai exista nici o activitate timp de cinci minute. Aceasta strategie este în prezent intalnita pe multe din siturile Web de licitații electronice. Un dezavantaj al acestei strategii il constituie obligativitatea reintoarcerii pe situl respectiv cu putin timp inainte de expirarea termenului limita de desfasurare a licitației și urmarirea acesteia până la final. O solutie o poate constitui prelungirea licitației cu o perioada mai mare, existand situri unde acest interval ajunge la o ora, dar acest lucru face și mai dificil de estimat momentul când se va încheia licitația.

O alta strategie este implementarea unui mecanism de licitare automata cu un anumit pas, mecanism cunoscut și sub denumirea "proxy bidding". Acest sistem presupune stabilirea unei anumite valori limita și supralicitarea automata a tuturor ofertelor depuse care depasesc valoarea ofertei curente depuse de cumparatorul care foloseste acest mecanism în limita sumei stabilite initial. Acest mecanism descurajeaza cumparatorii care folosesc o stategie de asteptare și licitare în ultimele minute.

Un tip particular al licitației standard il constituie licitația inversa standard care este organizata de cumparator. Cumparatorul va introduce pretul de pornire al licitației, în acest caz pretul maxim pe care este dispus sa il plateasca,va fi cunoscut tuturor participantilor (ofertantilor). Participantii la licitație vor furniza un pret de pornire care va trebui sa fie mai mic sau egal cu pretul de pornire introdus de organizator și un pret rezervat, pretul minim până la care sunt dispusi sa liciteze. Pretul rezervat va fi cunoscut doar celui care l-a introdus. Ofertantul va licita pentru intreaga cantitate de articole pe care cumparatorul o cere.

Licitațiile închise

În prezent exista doua tipuri de licitații închise pe Internet, corespunzatoare celor doua tipuri de licitații studiate și în teoria de specialitate.

Castigatorul licitației pentru primul tip de licitații închise trebuie sa plateasca pretul pe care l-a licitat pentru un anumit bun sau serviciu spre deosebire de cel de-al doilea tip unde castigatorul licitației trebuie sa plateasca pretul ultimei oferte incrementat cu pasul de licitare.

În cadrul licitațiilor închise participantii trebuie sa depuna ofertele până la un termen limita. La expirarea termenului ofertele sunt examinate, evaluate și se declara un invingator.

Licitațiile închise care se desfasoara clasic sunt de doua feluri: licitații cu o singura strigare, unde nu exista aceeasi atmosfera ca și în cazul licitațiilor clasice necesara pentru a creste ofertele licitației în curs. Licitațiile cu mai multe strigari rectifica aceasta situatie. Intr-o licitație cu mai multe strigari exista un termen limita pentru fiecare strigare și la termenul limita fie licitația este închisa fie ofertele din momentul respectiv sunt facute publice și o noua licitație incepe care are un alt termen limita bine stabilit.

Licitațiile olandeze

Licitația olandeza este tipul de licitație recomandat în cazul în care se doreste tranzacționarea mai multor articole de acelasi fel sau pentru produsele perisabile cum ar fi fructele, legumele sau biletele de avion. Aceste licitații se caracterizeaza prin faptul ca pretul de pornire este foarte ridicat. Apoi treptat acest pret scade până în momentul în care cumparatorii sunt interesati sa cumpere la pretul oferit. Acest pret poate sa scada în asa fel incat sa mentina interesul cumparatorilor dar în limita în care exista produse în stoc. Cel care liciteaza poate controla procesul de "golire a depozitului" prin stabilirea ratei de scadere a pretului de licitație. La acest tip de licitație pot exista mai multi castigatori. Castigatorii licitației sunt cumparatorii care au facut cele mai mari oferte iar cantitatile cerute de ei, insumate, nu depasesc cantitatea de articole oferita de vanzator. Exista posibilitatea ca pentru ultimul castigator sa ramana o cantitate mai mica decât cea ceruta, numita "cantitate partiala". Castigatorul partial are dreptul sa refuze cantitatea partiala, caz în care pierde calitatea de castigator.

Pretul de vanzare este stabilit astfel: pentru fiecare castigator numim ultimul pret oferit "pret final". Pretul de vanzare este pretul final cel mai mic. Astfel, chiar dacă exista castigatori care au oferit un pret mai mare decât pretul de vanzare, ei vor achizitiona articolele cu pretul de vanzare rezultat.

Unul din dezavantajele acestui tip de licitație este durata relativ scurta de desfasurare motiv pentru care sunt destul de rar intalnite pe Internet. În general aceste licitații dureaza cateva minute sau ore timp în care are loc scaderea pretului initial cu 15-20%, procent care totusi nu pare sa atraga prea multi ofertanti.

1.4.4 REGULI DE DESFĂȘURARE A LICITAȚIILOR

Regulile procesului de licitare

Regulile procesului de licitare stabilesc continutul mesajelor care pot fi trimise intre diferiti utilizatori, drepturile pe care le au acestia și modalitatile de retragere a ofertelor depuse.

O licitație poate avea reguli prin care sa se specifice care sunt utilizatorii autorizati sa participe. De exemplu, în cadrul unei licitații standard se poate stabili un anumit vanzator care sa faca o oferta. În multe din licitațiile B2B furnizorii trec prin mai multe faze de calificare până sa primeasca dreptul de a licita. În plus acestia pot fi impartiti în grupe diferentiate în functie de anumite criterii, astfel unii participanti la licitație pornesc dintr-o postura de favoriti fata de ceilalti.

Regulile prin care se accepta o licitație și cele prin care se reglementeaza modalitatile de retragere a unei oferte sunt mult mai complexe.

Licitațiile care au ca obiect un singur produs au reguli clare care permit doar cresterea valorii ofertelor depuse. Astfel natura ascendenta a licitațiilor standard necesita ca noua oferta sa fie mai mare decât cea curenta, de obicei ea fiind incrementata cu o anumita valoare numita pas de incrementare.

Retragerea sau adaugarea unei oferte se poate face numai intr-un interval bine stabilit, în general majoritatea siturilor permit retragerea unei oferte sau precizeaza clar ca nu se pot face retrageri decât dacă oferta respectiva nu este castigatoare.

O alta regula care se manifesta de curand, o reprezinta gradul de activitate a utilizatorului, altfel spus numarul de licitații încheiate cu succes. În general aceste reguli restrictioneaza accesul la o licitație numai acelor utilizatori care au un anumit nivel de activitate.

Reguli de informare

Majoritatea tipurilor de licitații electronice furnizeaza diverse informatii pe parcursul desfasurarii activitatii de licitare în functie de operatiunile care au loc, cu exceptia licitațiilor închise care nu dezvaluie nici o informatie până în momentul incheierii licitației.

Aceste informatii pot fi grupate în trei categorii principale astfel:

Cartea cu ofertele de licitare – conține dupa cum ii spune și numele o lista cu toate ofertele depuse până la un moment dat de toti utilizatorii, posibilitatea identificarii identitatii acestora, a cantitatii și a pretului oferit

Istoria tranzacțiilor – prezinta intreg procesul de licitare din prima secunda și până la momentul actual dacă licitația este încă în desfasurare, ordinea în care s-au depus ofertele, identitatea participantilor, cantitatile și pretul.

Cota pretului – reprezinta nivelul la care a ajuns pretul, fapt ce permite participantilor sa observe evolutia acestuia din momentul initial și stabilirea viitoarelor strategii de licitare pe baza lui

Durata de desfasurare a unei licitații

Cele mai multe situri ofera vanzatorului posibilitatea de stabilire a duratei unei licitații. În cadrul sitului eBay, de exemplu, vanzatorul poate alege intre patru tipuri de intervale astfel el poate sa aleaga licitații cu durata de 3, 5, 7 sau 10 zile. În general durata medie de desfasurare a unei licitații electronice este de sapte zile, cea mai scurta fiind licitația "fulger" de trei minute intalnita pe situl First Auctions și cea de saizeci de minute în cadrul sitului Onsale. Cele mai lungi perioade de desfasurare a unei licitații pot ajunge la trei luni și sunt intalnite în general pe siturile de licitații publice a diferitelor state sau în tarile în care acest segment al comerțului electronic este mai slab dezvoltat, cum este cazul tarii noastre.

Pretul minim și pretul rezervat

Majoritatea licitațiilor electronice au un pret minim de pornire, sub nivelul caruia nu se accepta nici o oferta. În cadrul siturilor de licitații electronice specializate în listarea produselor pretul minim este ales când are loc adaugarea unei noi licitații. În schimb foarte multe situri folosesc un pret secret rezervat, specificat în momentul inscrierii licitației de către un nou utilizator dar care este necunoscut celorlalti participanti pe tot parcursul desfasurarii licitației. Dacă la momentul incheierii licitației nu s-a atins pretul rezervat atunci bunurile care au facut obiectul licitarii nu vor fi vandute.

În cadrul sitului eBay majoritatea licitațiilor standard au un pret rezervat, iar în momentul în care se ajunge la acest pret se afiseaza un mesaj care notifica acest lucru.

Exista o intrebare care apare frecvent în prezent: care este efectul pretului rezervat asupra unei licitații ?

Pretul rezervat poate fi util vanzatorului prin stabilirea unui pret minim foarte mic în speranta ca va atrage multi participanti și vor exista foarte multe oferte din partea acestora. Vanzatorul stabileste un pret rezervat pe care nu il face public, el urmand sa vanda produsul numai dacă acest pret este atins. Strategia de practicare a unui pret minim mic și a unui pret secret rezervat mare este destul de intalnita în ultimul timp și ii aduce vanzatorului un profit mai mare decât dacă pretul rezervat ar fi facut public.

Pretul rezervat are și unele dezavantaje. În cadrul unei licitații cu pretul rezervat secret cumparatorul cu cea mai mare oferta poate sa nu fie cel care castiga licitația dacă pretul oferit de acesta este mai mic decât cel rezervat. Acest lucru poate duce la evitarea licitațiilor cu pret rezervat a unor utilizatori.

Reguli pentru închiderea licitațiilor

Licitațiile standard se pot încheia la momentul stabilit initial. O alta alternativa presupune ca licitația sa continue dupa acest moment atât timp cât încă se mai fac oferte un timp bine precizat.

În cadrul licitațiilor desfasurate pe Internet acest interval este de cateva minute, iar intr-o licitație obisnuita este de cateva secunde.

Licitațiile olandeze pot fi închise inaintea expirarii termenului limita în cazul în care stocul de produse s-a terminat sau pretul a scazut sub o limita dinainte prestabilita.

La terminarea liciatiei cel care are oferta cea mai mare castiga produsul oferit la licitație dar pretul pe care il plateste poate sa fie cel din oferta sau mai mic.

1.4.5 PROCESUL COMPLET DE REALIZARE A LICITAȚIEI

Un proces complet de realizare a unei licitații presupune parcurgerea urmatorilor pasi:

înregistrarea cumparatorului și a vanzatorului

Acest pas trateaza aspecte legate de autentificarea participantilor la licitație, schimbul de chei criptografice și posibilitatea realizarii unui profil pentru fiecare participant care reflecta interesul sau intr-un anumit domeniu, eventual și suma de bani pe care este dispus sa o cheltuiasca.

înregistrarea unei noi licitații

Acest pas presupune descrierea produsului care este licitat și stabilirea regulilor de desfasurare. Regulile licitației explica tipul de licitație care se desfasoara (licitație standard, olandeza sau închisa), caracteristicile licitației (pretul minim, data limita, modul de plata, etc.), data de incepere a licitației, regulile de închidere a licitației, etc.

prezentarea licitației și publicitatea

Pentru a atrage potentiali cumparatori produsele din aceeasi categorie trebuie sa fie oferite spre licitare impreuna în acelasi loc. Licitațiile populare trebuie amestecate cu altele mai putin lipsite de interes pentru a forta cumparatorii sa liciteze. Produsele care urmeaza sa fie scoase la licitație sunt prezentate în prealabil și sunt anuntati potentialii cumparatori.

licitarea

În cadrul procesului de licitare sunt colectate ofertele de la diversi potentiali cumparatori și sunt supuse regulilor de desfasurare a licitației (pretul minim de licitare, pasul de incrementare) iar în cadrul licitațiilor deschise sunt instiintati participantii când o noua oferta a fost depusa.

evaluarea ofertelor și închiderea licitației

În acest moment se aplica regulile de închidere a licitației și se stabilesc castigatorii și invinsii licitației.

plata și livrarea produsului

Acest pas final include realizarea platii către vanzator, transferul bunurilor sau dacă vanzatorul nu este proprietarul, plata proprietarului și a veniturilor cuvenite intermediarilor.

1.4.6 STRATEGII DE MANIPULARE A LICITAȚIILOR

În ultimii ani, pe Internet au aparut utilizatori care folosesc diferite tipuri de strategii pentru a manipula licitația în desfasurare fie în avantajul cumparatorului fie în folosul vanzatorului.

Strategia numita ”siling” este o strategie folosita de vanzator pentru a creste pretul, iar strategia de ”licitare scut” care este o tehnica folosita de cumparatori pentru a obtine un produs la un pret mic. Ambele practici nu sunt în conformitate cu regulile de desfasurare a licitațiilor pe Internet, dar sunt greu de sesizat și de sanctionat.

Strategia siling este folosita în cadrul licitațiilor standard de multi ani. Aceasta se aplica în momentul în care ramane un singur cumparator intr-o licitație. Vanzatorul incearca sa creasca pretul licitand impotriva celuilalt cumparator ramas. Majoritatea siturilor de licitații electronice nu permit vanzatorului sa liciteze produsele proprii, dar acest lucru poate fi usor ocolit prin folosirea unor intermediari sau chiar prin realizarea unui alt cont folosind o alta adresa de email a vanzatorului. Un dezavantaj al acestei stategii este posibilitatea eliminarii cumparatorului din cadrul licitației, dar și acest lucru poate fi evitat de către vanzator prin retragerea ulterioara a ofertei facute, astfel castigator al licitației va fi urmatorul clasat în ordine adica celalalt cumparator. Retragerea unei oferte nu se poate realiza decât în cazuri exceptionale, cu motiv serios și numai de un numar de ori, dacă acest numar este depasit contul respectiv este sters.

Licitarea scut actioneaza în sens invers strategiei siling. În acest caz cel care liciteaza este cumparatorul. Acesta face initial o oferta foarte mica, de exemplu 10$, și apoi folosind un alt cont sau cu ajutorul unui intermediar depune o oferta foarte mare, de exemplu 500$. Aceasta ultima oferta actioneaza ca un scut și va face ca licitația respectiva sa aiba doar aceste doua oferte. Cu putin timp inainte de închiderea licitației cumparatorul care a depus oferta de 500$ își retrage oferta, iar oferta castigatoarea va fi cea de 10 $. Exista posibilitatea ca vanzatorul sa nu-și dea seama de ceea ce s-a intamplat, deoarece ofertele retrase nu apar în lista cu ofertele care s-au depus în timpul desfasurarii licitației. Aceasta practica nu este totusi asa raspandita, multe situri nepermitand retragerea unei oferte decât dacă motivele sunt bine intemeiate. În plus, la crearea unui cont este necesara introducerea numarului unei carti de credit fapt ce reduce posibilitatea crearii conturilor multiple.

1.4.7 TIPURI DE PARTICIPANȚI LA O LICITAȚIE

Un studiu efectuat analizand peste 60 de situri de licitații electronice releva faptul ca exista trei tipuri de participanti la o licitație electronica, diferentiati în functie de experienta și nivelul de informare:

evaluatorii:

au o idee clara asupra valorii bunurilor scoase la licitație

ofertele sunt în general mult mai mari decât pretul minim cerut

participantii obisnuiti:

ofertele lor nu depasesc pretul minim cerut

monitorizeaza permanent evolutia licitației și au oferte ascendente care nu depasesc însă minimul cerut

oportunisti:

vanatorii de oferte

depun oferte minime, în general cu cateva minute inainte de închiderea licitației

Dintre aceste trei categorii, se apreciaza ca participantii obisnuiti sunt cei care obtin cea mai mare profitabilitate deoarece ofera intotdeauna un pret cât mai mic, actioneaza rational și urmaresc în permanenta evolutia licitației.

Capitolul II – Java EE

2.1 Tehnologia JSP (Java Server Pages)

Tehnologia JSP permite crearea rapidă și usoară de conținut Web ce are componente atât statice, cât și dinamice. La bază, această tehnologie proiectează toate capacitățile dinamice ale tehnologiei Java Servlet, dar oferă un unghi mai natural în ceea ce privește crearea de conținut static.

Principalele trăsături ale tehnologiei JSP sunt:

Este un limbaj pentru dezvoltarea de pagini JSP, care sunt documete text ce descriu modul de procesare a unei cereri și de construire a unui raspuns

Posibilitatea de a accesa obiecte ce ruleaza pe server

Existenta de mecanisme ce permit definirea de extensii pentru limbajul JSP

Ce este o pagină JSP ?

O pagina JSP este un document text ce conține 2 tipuri de text: static, ce poate fi exprimat în orice tip de format bazat pe text (HTML,SVG,WML, și XML) și conținutul JSP propriu-zis, altfel spus, dinamic.

Ciclul de viață al unei pagini JSP:

O pagină JSP deservește cererile asemenea unui servlet. Din acest motiv, ciclul de viață al unei pagini JSP și multe din capacitățile sale (în special cele dinamice) sunt determinate de tehnologia Java Servlet.

Când o cerere este mapată pe o pagină JSP, de managementul ei se ocupă un servlet special care verifică mai întâi dacă servletul paginii JSP este mai vechi decât pagina JSP. Dacă da, “traduce” pagina JSP într-o clasă servlet și compilează clasa. În timpul operației de dezvoltare, unul dintre principalele avantaje ale paginii JSP este ca procesul de construcție (build process) este făcut automat.

Traducere și Compilare

În timpul fazei de “traducere” fiecare tip de date dintr-o pagina JSP este tratata în mod diferit. Elementele JSP sunt tratate dupa cum urmeaza:

Directivele sunt utilizate pentru a controla cum va fi translatata și executata pagina JSP de către containerul Web

Elemetele de scripting sunt inserate în clasa servlet a pagini JSP

Elemente de forma <jsp:xxx…./> sunt convertite în apeluri către metode ale componentelor JavaBeans

Atât faza de “traducere” cât și cea de compilare pot genera erori care nu se observa decât în momentul în care pagina este apelata pentru prima oara. Dacă apare o eroare în timp ce o pagina JSP este “tradusa”, spre exemplu translatorul întâlnește un element JSP eronat, serverul va returna o exceptie de tip ParseException și clasa servlet a paginii va fi goala sau incompleta. Ultima linie incompleta va returna un pointer către linia ce conține eroarea.

Dacă apare o eroare în timp ce pagina este compilata, spre exemplu exista o eroare de sintaxa intr-un scriplet, serverul va returna o eroare de tip JasperException și un mesaj către numele servletului pentru pagina respectiva și linia la care a aparut eroarea.

Odata ce pagina a fost tradusa și compilata, servletul paginii JSP urmeaza în linii mari acelasi ciclu de viata ca un servlet, și anume:

Dacă nu exista o instanta a servletului paginii JSP atunci containerul:

Incarca clasa servlet a paginii JSP

Instantiaza o instanta a clasei servlet

Initializeaza instanta servlet apeland metoda jspInit

Invoca metoda _jspService() pasând o cerere și un obiect de raspuns

În momentul în care containerul trebuie sa elimine servletul unei pagini JSP va apela metoda jspDestroy().

Executie

Diversi parametri de executie ai unei pagini JSP pot fi controlati prin intermediul directivelor de pagina. În continuare se vor prezenta directivele ce tin de output buffering și managementul erorilor.

Buffering. Când o pagina JSP este executata iesirea către obiectul de raspuns este automat buffrat. Dimensiunea bufferului utilizat se poate fixa utilizand urmatoarea directiva de pagina;

<%@ page buffer=”none|xxxxxKb”%>

Un buffer mai mare permite ca un continut mai mare de informatie sa fie scris inainte de a se trimite ceva către client acordand mai mult timp JSP-ului de a realiza anumite operatii specifice. Pe de alta parte un buffer mai mic scade gradul de incarcare a memoriei serverului și permite clientului sa primeasca date mai rapid.

Managementul Erorilor. În timpul executiei unei pagini JSP poate aparea o gama variata de erori. Pentru a specifica containerului Web sa redirecteze controlul către o pagina de eroare se include urmatoarea directiva la inceputul paginii JSP:

<%@ page errorPage="file_name" %>

De asemenea trebuie specificat la inceputul paginii de eroarea ca aceasta serveste ca pagina de erori și acest lucru se realizeaza prin intermediul directivei

<%@ page isErrorPage="true|false" %>

Aceasta directiva face accesibil în pagina obiectul exceptie de tip javax.servlet.jsp.JspException astfel incat acesta sa poate fi interpretat și chiar sa se afiseze informatii despre cauza exceptiei în interiorul paginii de eroare.

Crearea de continut static și dinamic

În cadrul JSP crearea continutului static se realizeaza ca și cum intreaga pagina ar fi constituita numai din astfel de continut. Continutul static poate fi exprimat în orice limbaj de acest gen cum ar fi HTML, WML și XML. Formatul implicit este HTML. Pentru a putea folosi un alt format decât HTML trebuie inclusa la inceputul paginii o directiva de pagina cu atributul contentType setat la valaorea formatului respectiv. Spre exemplu dacă se doreste utilizarea formatului WML (Wireless Markup Language) este obligatorie includerea unei directive de genul:

<%@ page contentType="text/vnd.wap.wml"%>

Crearea de continut dinamic

Acest tip de format este creat prin accesarea limbajului de programare JAVA prin elemetele de scripting.

Utilizarea de obiecte în paginile JSP

Obiecte specifice aplicatiei. De câte ori este posibil trebuie ca partile ce tin de comportametul aplicatiei sa fie incapsulate în obiecte, usurand astfel munca designerilor. Astfel de obiecte pot fi create de către developeri ce au mai multa experienta și sunt versati în utilizarea limbajului de programare Java sau în accesarea de baze de date și alte servicii.

Exista 4 metode în care se pot creea și utiliza obiecte în interiorul paginilor JSP:

Instante și variabile ale clasei servlet corespunzatoare paginii JSP sunt create în declaratii și apoi accesate în scripleti și expresii

Variabile locale ale clasei servlet sunt create și utilizate în scripleti și expresii

Atribute ale obiectelor sunt create și utilizate în scripleti și expresii

Componente JavaBeans pot și create și accesate utilizand elemente JSP.

Obiecte Partajate. Modul în care un container Web trateaza cereri multiple din partea clientilor poate fi indicat perin intermediul directivei

<%@ page isThreadSafe="true|false" %>

Când isThreadSafe este setat pe TRUE, containerul Web poate opta pentru transmiterea de cereri multiple concurente către pagina JSP, aceasta fiind și setarea implicita. Dacă se foloseste setarea TRUE developerul trebuie sa realizele sincronizarea corecta în ceea ce priveste accesul la elemetele partajate ce exista la nivel de pagina. Dacă isThreadSafe este setat la valoarea FALSE cererile sunt livrate una câte una în ordinea sosirii lor, și accesul la obiectele partajate ce exista la nivelul paginii nu trebuie controlat de către developer.

Elemente de Scripting JSP

Acest tip de elemente sunt utilizate pentru a accesa obiecte, a definii metode și pentru mamagementul fluxului de control. Avand în vedere faptul ca unul dintre scopurile principale ale JSP este acela de a separa datele statice de cele dinamice, se recomanda utlizare destul de restransa a scriptingului JSP .

Tehnologia JSP permite unui container sa utilizeze orice limbaj de scription care poate apela obiecte JAVA. Dacă se doreste utilizarea altui limbaj de scripting decât cel implicit trebuie inclusa la incepului paginii JSP directiva de pagina

<%@ page language="scripting language" %>

Avand în vedere ca elementele de scrption sunt convertite în expresii ale limbajului de programare JAVA, trebuie importate toate clasele și pachete utilizate de către pagina JSP. Dacă limbajul este JAVA un pachet sau o clasa poate fi importat/ importata prin intermediul urmatoarei directive de pagina

<%@ page import="packagename.*, fully_qualified_classname" %>

Declaratii. O declaratie JSP este utilzata pentru declararea de variabile și metode în limbajul de scripting utilizat de pagina respectiva. Sintaxa unei declaratii este urmatoarea:

<%! scripting language declaration %>

Când limbajul de scripting este limbajul de programare JAVA declaratiile de variabile și metode din pagina JSP devin declaratii în clasa servlet a paginii.

Scripleti. Un scriplet este utilizat pentru a incapsula orice fragment de cod valabil pentru limbajul de scription utilizat în pagina respectiva. Sintaxa unui scriplet este urmataorea:

<%

scripting language statements

%>

Când limbajul de scripting al paginii JSP este JAVA un scriptiong este transformat intr-o bucata de cod JAVA și este inserat în metodele din servletul paginii JSP. O variabila creata cu un scriplet este accesibila de oriunde din interiorul paginii.

Expresii. O expresie JSP este utilizata pentru a insera valoarea unei expresii din limbajul de scriptiong al paginii respective, convertita la String, în streamul intors clientului. Când limbajul de scription este JAVA o expresie este transformata intr-un statement ce converteste valoarea expresiei la un obiect String și o insereaza în obiectul out implicit. Sintaxa pentru o expresie este urmatoarea :

<%= scripting language expression %>

Includerea de continut intr-o pagina JSP

Exista 2 mecanisme pentru includerea unei alte resurse Web în interiorul unei paginii JSP și anume directiva include și elementul jsp:include.

Directiva include este procesata pagina JSP este “tradusa” intr-o clasa servlet. Efectul este acela de includere a continutului unei pagini statice, de exempul un fisier HTML sau a unei alte pagini JSP în pagina ce utilizeaza directiva include. Aceasta directiva este utila în situatiile în care exista o bucata de cod sau informatii ce trebuie reutilizata în mai multe pagini și care se schimba destul de des. Astfel este necesara modificarea respectivului cod numai o singura data. Sintaxa directivei de include este urmataorea:

<%@ include file="filename" %>

Elementul jsp:include este procesat când pagina JSP este executata. Actiunea include permite includerea fie a unui continut static fie a unui continut dinamic în pagina apelanta. Trebuie însă avut în vedere ca rezultatele includerii de continut dinamic difera destul de mult fata de cele ale includerii de continut static. Dacă resursa este statica continutul sau este inserat în fisierul JSP ce conține elementul jsp:include. Dacă resursa inclusa este de tip dinamic, cererea este trimisa către resursa inclusa, pagina inclusa este executata și rezultatul este inclus în raspunsul de la pagina JSP apelanta. Sintaxa pentru elemetul jsp:include este urmataorea:

<jsp:include page="includedPage" />

Transferarea controlului către o alta componenta Web

Mencanismul pentru transferarea controlului către o alta componenta web foloseste mecanismul pus la dispozitie de către API-ul JAVA Servlet. Sintaxa pentru acest mecanism este :

<jsp:forward page="/main.jsp" />

Trebuie luat în considerare faptul ca, executia directivei forward se face în momentul returnarii de date către client, atunci directiva va genera o eroare de tipul IllegalStateException.

Elementul jsp:param. Când un element include sau forward este invocat, obiectul de tip cerere original este furnizat paginii tinta. Dacă se doreste, se pot furniza și alte date aditionale paginii tinta prin atasare de parametrii la obiectul de tip cerere prin intermediul elementului jsp:param. Sintaxa pentru acest element este urmatoarea:

<jsp:include page="…" >

<jsp:param name="param1" value="value1"/>

</jsp:include>

Includerea unui Applet

Includerea unui applet sau a unei componente JavaBean în interiorul unei pagini se poate realiza prin intermediul elementului jsp:plugin. Acest element genereaza codul HTML ce conține constructorii specifici dependenti de browser (<object> sau <embed>) care vor rezulta în downloadul plugin-ului JAVA (dacă este necesar acest lucru) și a componentelor client și apoi executia acestor componente. Sintaxa pentru elementul jsp:plugin este urmatoarea:

<jsp:plugin

type="bean|applet"

code="objectCode"

codebase="objectCodebase"

{ align="alignment" }

{ archive="archiveList" }

{ height="height" }

{ hspace="hspace" }

{ jreversion="jreversion" }

{ name="componentName" }

{ vspace="vspace" }

{ width="width" }

{ nspluginurl="url" }

{ iepluginurl="url" } >

{ <jsp:params>

{ <jsp:param name="paramName" value="paramValue" /> }+

</jsp:params> }

{ <jsp:fallback> arbitrary_text </jsp:fallback> }

</jsp:plugin>

Acest tag jsp:param este inlocuit fie de un tag <obiect> fie <embed> dupa cum este cazul. Atributele tagului ofera date de configurare în ceea ce priveste configurarea elementului precum și versiunea de plug-în necesara. Dintre acestea atributele nspluginurl și iepluginurl specifica URL-ul de unde se poate downlada plug-în-ul în cauza.

Elementele jsp:param specifica parametrii pentru applet sau componentele JavaBeans. Elemetul jsp:fallback indica continutul ce trebuie folosit de către clinet în cazul în care plug-în-ul nu poate fi pornit.

Dacă plug-în-ul porneste dar appletul sau componenta JavaBean nu este gasita sau pornita utilizatorului i se va returna un mesaj ce indica o exceptie de tipul ClassNotFoundException.

2.2 Servlet-uri

Servlet-urile permit interactiunea în ambele sensuri intre client și server. O parte dintre posibilitatile furnizate de servleturi sunt:

construiesc dinamic și returneaza un document HTML pe baza cererii clientului;

proceseaza datele completate de utilizatori printr-un formular HTML și returneaza un raspuns;

furnizeaza suport pentru autentificarea utilizatorului și alte mecanisme de securitate;

interactioneaza cu resursele serverului, cum ar fi baze de date, fisiere cu informatii utile pentru clienti;

proceseaza intrarile de la mai multi clienti pentru aplicatii, cum ar fi jocuri în retea;

permite serverului sa comunice cu un applet client printr-un protocol specific și pastreaza conexiunea în timpul conversatiei;

ataseaza automat elemente de design pentru pagini Web, cum ar fi antete sau note de subsol, pentru toate paginile returnate de server ;

redirecteaza cereri de la un server la altul în scop de echilibrare a incarcarii (eng. load-balancing);

partitioneaza un serviciu logic intre servere sau intre servleturi pentru a procesa eficient o problema.

Poate cea mai importantă componentă a unui servlet, fără de care funcționalitatea acestuia s-ar pierde, este reprezentată de interacțiunea cu clientul. La primirea unei cereri de la un client, programul primește două obiecte: ServletRequest și Servlet Response. Primul obiect este cel care realizează "încapsularea" comunicației dinspre client către server, iar al doilea este responsabil de comunicația în sens invers de la server, înapoi către client. Cele două interfețe (ServletRequest, ServletResponse) sunt incluse în pachetul javax.servlet.

Structura de baza a unui servlet

Cel mai usor mod de definire a servlet-urilor este prin extinderea uneia dintre cele doua clase de baza referitoare la servleturi: GenericServlet și HttpServlet. De fapt, nu este obligatorie mostenirea acestor clase, ci este suficienta implementarea interfetei Servlet.

Toate servleturile suprascriu cel putin o metoda necesara functionalitatii lor. Metoda care este automat apelata ca raspuns la cererea fiecarui client se numeste service(). Aceasta metoda poate fi suprascrisa pentru a furniza o functionalitate implicita. Cu toate acestea, servleturile care extind HttpServlet pot sa nu suprascrie metoda service(). În acest caz, implementarea implicita a acestei metode va apela automat alta metoda pentru a raspunde cererii clientului.

Mai exista încă doua metode implementate de majoritatea servleturilor: init() și destroy().

Metoda init() se afla acolo unde incepe un servletul. Ea este apelata de către server când este incarcat servletul (similar cu un constructor). Se apeleaza o singura data. În metoda init(), servletul creeaza și initializa orice resursa, inclusiv datele membre.

Prototipul metodei init() este :

public void init(ServletConfig config) throws ServletException;

Metoda init() ia ca paramentru un obiect din ServletConfig. Acest obiect trebuie salvat astfel incat sa se poate face referire la el mai tarziu. Cel mai utilizat mod de a face acest lucru este de a avea apelata metoda super.ini() trecuta în obiectul ServletConfig. Metoda ini() arunca o exceptie ServletException. Dacă, din vreun motiv, servetul nu poate initia resursele necesare, metoda ini() va arunca o exceptie.

Metoda destroy() este apelata când servletul este descarcat, eliberand resursele servletului. Metoda destroy() semnifica sfarsitul vietii unui servlet. Când un serviciu urmeaza sa fie închis, este apelata metoda destroy(). Aici orice resursa care a fost creata în metoda init() este curatata. Dacă exista o conexiune la baza de date, ea se poate închide aici. Tot aici poate fi salvata orice informatie persistenta care va fi folosita data viitoare când un servlet va fi incarcat. Prototipul metodei este foarte simplu :

public void destroy();

Dacă servletul extinde HttpServlet, dezvoltatorul servlet-ului poate sa nu suprascrie metoda service(), ci sa implementeze alta metoda care va fi automat apelata de metoda mostenita service(). Metoda automat apelata de service() depinde de tipul cererii HTTP (de exemplu, doGet () este apelata pentru cererile GET și doPost () este apelata pentru cererile POST).

Un servlet HTTP gestionează cererile clienților cu ajutorul metodei service. În funcție de metoda (GET sau POST) cu care a fost formulată cererea clientului, metoda service transmite cererea spre procesare, unor metode precum doGet sau doPost.

Metodele din clasa HttpServlet, care procesează cererile clienților, au două argumente:

un obiect HttpServletRequest care încapsulează datele transmise de la client

un obiect HttpServletResponse care încapsulează răspunsul serverului spre clienți

Pentru accesarea datelor transmise de la client se apelează metodele getParameter (getParameterValues) care au ca argumente numele unui (unor) parametri și returnează valoarea (valorile) acestora.

Pentru cereri de tipul HTTP GET, metoda getQueryString returnează un obiect String care conține datele transmise de la client sub forma:

URL?num_param1=val1+ num_param2=val2+…

Pentru cereri de tipul HTTP POST, PUT sau DELETE:

dacă se așteaptă date de tip text, se folosește metoda getReader, care returnează un obiect BufferedReader din care se vor citi datele transmise

dacă se așteaptă date binare, se apelează metoda getInputStream care returnează un obiect de tipul ServletInputStream

Un obiect HttpServletResponse oferă două moduri de a transmite date utilizatorului:

cu ajutorul metodei getWriter, care returnează un obiect Writer, în care se scriu date de tip text

cu ajutorul metodei getOutputStream, care returnează un obiect ServletOutputStream, în care se scriu date binare

Înainte de accesarea obiectelor Writer și ServletOutputStream, servlet-ul are sarcina de a seta header-ul HTTP al mesajului de răspuns. De exemplu, metoda setContentType setează tipul conținutului. Metodele, cărora metoda service le transmite sarcina de a procesa cererile HTTP, sunt următoarele:

doGet pentru cereri GET, GET condițional, HEAD.

doPut pentru cereri POST sau PUT.

doDelete pentru cereri DELETE.

Servlet-urile sunt capabile să deservească simultan mai mulți clienți. Dacă în metoda de procesare a cererii se accesează o resursă partajată, atunci se vor include mecanisme de sincronizare. O alternativă ar fi să se proceseze o singură cerere la un moment dat. Pentru aceasta, servlet-ul trebuie să implementeze interfața SingleThreadModel, care nu presupune scrierea unor metode suplimentare.

La terminarea ciclului de viață a unui servlet, de exemplu la cererea administratorului serverului, se apelează metoda destroy. Această funcție este oferită de clasa HttpServlet și este suprascrisă în servlet-ul curent, pentru a distruge resurse specifice servlet-ului și pentru a realiza alte operații de clean-up.

Inainte de terminarea servlet-ului, se impune restricția ca toate instanțele acestuia, care deservesc cereri ale clienților, să se încheie. Serverul asigură această condiție apelând metoda destroy numai după ce toate metodele service, de procesare ale cererilor, s-au încheiat sau după ce o anumită perioadă de timp a expirat. În cazul unor cereri care necesită un timp mai mare de procesare, se pot folosi următoarele tehnici:

serverul menține un contor care indică câte thread-uri rulează metoda service în mod curent. Metoda destroy este apelată când acest contor ajunge la valoarea 0.

metoda destroy anunță thread-urile, care procesează aceste cereri, că trebuie să-și încheie activitatea, după care așteaptă terminarea lor.

thread-urile de procesare de lungă durată verifică periodic dacă serverul a primit o cerere de shut-down, iar în caz afirmativ își încheie activitatea și returnează.

Când un server încarcă un servlet, serverul apelează metoda init, pentru a realiza diferite operații de inițializare specifice acestuia. Această metodă este oferită de clasa HttpServlet și suprascrisă în servlet-ul curent. Dacă apare o eroare de inițializare, de exemplu dacă nu se poate stabili conexiunea de rețea cerută, metoda init generează eroarea UnavailableException. Inițializarea se termină înainte ca servlet-ul să răspundă la cererile clienților și înainte ca servlet-ul să fie distrus.

Dacă pentru servlet au fost specificați parametri de inițializare, numele acestora poate fi obținut apelând în funcția init metoda getParameterNames(). Pentru a obține valoarea unui anumit parametru se apelează metoda getInitParameter, cu argument numele parametrului.

Un servlet poate fi reîncărcat numai după ce a fost distrus cu ajutorul funcției destroy.

HTTPServlet

Servleturile HTTP (cele care extind clasa HttpServlet) sunt utilizate pentru con-struirea de aplicatii Web care de obicei intorc documente Web (HTML, XHTML, WML, XML etc.) ca raspuns la cererile navigatorului.

Clasa HttpServlet extinde clasa GenericServlet, deci mosteneste toate functio-nalitatile acesteia. În plus, HttpServlet adauga functionalitatea specifica protocolului HTTP și furnizeaza un cadru în care putem construi aplicatii HTTP.

HttpServlet este o clasa abstracta prezenta în pachetul javax.servlet.http. Pentru ca este abstracta, ea nu poate fi instantiata. Când se construieste un servlet HTTP, trebuie extinsa clasa HttpServlet. Un servlet HTTP functional trebuie sa implementeze una din metodele: service(), doGet(), doHead(), doPost(), doPut(), doDelete() corespunzatoare metodelor protocolului HTTP.

Metodele init(), destroy() și getServletlnfo() apartin clasei Generic Servlet, din care se deriveaza clasa HttpServlet.

Metoda service() are prototipul:

public void service(HttpServletRequest cerere, HttpServle Response raspuns)throws ServletException, Java.io.lOException;

Primul argument al metodei service () este un obiect care implementeaza interfata HttpServletRequest și este reprezentarea cererii clientului. Toate datele relevante din cerere (cum ar fi antetele HTTP) sunt incapsulate intr-un obiect Http Servlet Request. Al doilea parametru este un obiect care implementeaza interfata HttpServletResponse și este reprezentarea raspunsului serverului către client.

Când se utilizeaza servleturi HTTP, este recomandata utilizarea metodelor de cerere specifice HTTP, cum ar fi doGet()sau doPost(), în locul suprascrierii metodei service().

În general, metoda service() nu se suprascrie. Asta, deoarece clasa HttpServlet defineste metode care se apeleaza pentru a raspunde diferitelor tipuri specifice de cereri HTTP. Dacă metoda service() nu este suprascrisa, atunci implementarea implicita este sa se apeleze o metoda doXxx() care corespunde tipului cererii realizate. Dacă metoda service() este suprascrisa și sunt implementate anumite metode doXxx(), este sarcina dezvoltatorului de servlet sa evalueze cererea HTTP și sa apeleze metoda doXxx() corespunzatoare. Un container de servleturi nu apeleaza direct metodele doXxx(), ci metoda service(), care poate la randul ei sa apeleze o metoda doXxx().

Dacă se incearca apelarea unei metode doXxx(), care însă nu este suprascrisa, atunci se primeste la client un mesaj de eroare: HTTP 400 "Bad Request".

Metoda doGet() are prototipul:

protected void doGet(HttpServletRequest cerere, HttpServletResponse raspuns)throws ServletException, Java.io.lOException;

Metoda doGet() este apelata de implementarea implicita a metodei service() ca raspuns la o cerere HTTP de tip GET. Ca și alte metode de tip doXxx(), metoda doGet() are ca parametri o reprezentare a cererii clientului și un raspuns al serverului. Citirea obiectului cerere și formarea (trimiterea) obiectului raspuns este functia principala a unui servlet. Metoda GET este folosita în principal pentru a primi informatii, iar cererea este transmisa serverului sub forma unui URL.

Prezentarea metodei doPost() are prototipul:

protected void doPost(HttpServletRequest cerere, HttpServletResponse raspuns) throwsServletException,Java.io.lOException;

Metoda doPost() este apelata de fiecare data când apare o cerere HTTP de tip POST primita de servlet. Aceasta metoda este de obicei utilizata pentru procesarea informatiilor colectate dintr-un formular Web. Informatia introdusa de utilizator intr-un formular HTML este incapsulata intr-un obiect HttpServletRequest și trimisa metodei doPost(). Dacă nu este gasita implementarea metodei doPost(), atunci se trimite către client un mesaj de eroare: HTTP 400 "Bad Request". Metoda POST este folosita pentru a trimite date către server ; datele sunt incapsulate intr-un pachet și trimise către server.

În cazul metodei GET, valorile parametrilor sunt atasate la sfarsitul URL-ului dupa semnul intrebarii, iar în cazul metodei POST valorile parametrilor sunt trimise pe o linie separata.

Pentru preluarea unor date de pe formular trebuie invocata metoda getParameter, avand numele parametrului ca argument. Numele parametrilor sunt senzitive. Acelasi lucru se face indiferent dacă transmiterea se face prin metoda GET sau POST.

Deci, pentru a fi un servlet o clasa trebuie sa extinda HttpServlet și sa suprascrie metodele doGet() sau doPost(), sau amandoua, depinzand dacă datele sunt trimise folosind metoda GET sau POST.

Aceste metode preiau doua argumente : HttpServletRequest și HttpServletResponse.

HttpServletRequest are metode care iti permit sa obtii datele dintr-un formular HTML. Acest argument permite accesul servletului la informații cum ar fi numele parametrilor trimiși de client, numele host-ului care face cererea către servlet, etc dar și la fluxul de intrare (stream) de la client, prin care sunt transmise variabile prin metodele POST și GET. Interfețele care extind ServletRequest permit structurarea datelor de intrare în funcție de protocolul folosit. Un exemplu de interfață de acest gen: HttpServletRequest conține metode care prelucrează date ce vin prin intermediul protocolului HTTP.

HttpServletResponse are metode care iti permit sa specifici linia de raspuns HTTP, headerele raspuns (Content-Type, Set-Cookie, etc.) și, cel mai important, te lasa sa obtii un obiect PrintWriter folosit pentru a trimite inapoi documente clientului (în fomatul MIME specificat).

Metodele doGet() și doPost() arunca 2 exceptii, asa ca este necesar sa fie incluse în declaratia clasei. De retinut este ca trebuie sa se importe java.io (pentru PrintWriter), javax.servlet (pentru HttpSevlet) și javax.servlet.http (pentru HttpServleRequest și HttpServletResponse). Metodele doPost() și doGet() sunt chemate de metoda service(), și uneori trebuie suprascrisa direct metoda service(), de exemplu, pentru servleturile care intercepteaza în acelasi timp cereri GET și POST.

Sesiuni

Obiectele HTTPSession au fost introduse pentru a permite, prin intermediul servleturilor, să se asigure comunicare „statefull” între clienți și serverul Web. Formal, un obiect de tip HTTPSession poate reține informații între două invocări succesive ale servletui din cadrul aceleiași lansări a browserului.

Informațiile sunt păstrate la server sub forma unor perechi (nume , obiect). Un obiect HTTPSession poate desfășura, printre altele, acțiunile:

răspunde dacă este un obiect nou sau nu (metoda isNew),

se pot depune obiecte cărora li se asociază nume (metoda setAttribute),

se opt extrage obiecte din el invocându-se numele asociat (metoda getAttribute), etc.

Modalitățile prin care se obișnuiește asigurarea comunicării Web „statefull”:

Intreținerea unui mecanism cookies cu fiecare navigator.

Simularea unei sesiuni prin intermediul construcțiilor „ascunse” la client, sub forma: <input type=”hydden” name=”session” value=”…”> Aceste informații ajung la server care le poate interpreta ca și obiecte de tip session.

Adăugarea la URL de către client a unor câmpuri cu rol de informații de tip session.

Obiecte HTTPSession

Este evident că ultima soluție este cea veritabilă, toate celelalte fiind, într-un fel sau altul dependente de client.

Ciclul de viata al unei sesiuni

Ciclul de viata al unei sesiuni este simplu. Sesiunea este creata pe server ca raspuns al unei crereri a cientului și i se asigneaza un sessionId iar acest Id este trimis clinetului. Sesiunea insasi, este cumva considerata ca “noua” până când clientul returneaza sessionId-ul la server indicand ca sesiunea a fost stabilita. Aceasta asociaza clientul cu un anumit obiect sesiune. O sesiune exista pe server până când este ori oprita ori invalidata.

2.3 JDBC API

JDBC API este un API Java pentru a accesa virtual orice tip de date sub forma de tabel.(ca un punct de interes JDBC este un nume comercial și nu un acronim ;totusi JDBC este adesea considerat ca venind de la “Java Databrowse Connectivity”). JDBC API consta dintr-un set de clase scrise în limbajul de programare Java ce furnizeaza un standard API pentru utilizatorii bazelor de date și face posibila scrierea de aplicatii pe baze de date, folosind un intreg API Java.

JDBC API usureaza trimiterea de mesaje SQL către sisteme de baze de date relationale și sprijina toate dialectele SQL. Dar JDBC 3.0 API merge încă și mai departe , facand posibila interactiunea cu alte tipuri de surse de date , cum ar fi de exemplu fisierele , care nu tin d baze de date.

Valoarea JDBC API este aceea ca o aplicatie poate accesa virtual orice fel de surse de date și sa foloseasca orice platforma cu o masina virtuala Java.Cu alte cuvinte, cu JDBC API nu mai este necesar sa scrii un program pentru a accesa o baza de date Sybase, un alt program pentru a accesa o baza de date Oracle, un altul pentru a accesa o baza de date IBMDB2 și asa mai departe. Poti scrie un singur progrm folosind JDBC API, și acesta va fi capabil sa trimita SQL sau alte informatii sursei de date potrivite. Și mai mult cu o aplicatie scrisa în limbajul de programare Java , nu mai trebuie sa-ti faci griji ca trebuie sa scrii mai multe aplicatii pentru a putea folosi diferite platforme. Combinatia dintre platforma Java și JDBC API permite unui programator “sa scrie o data și sa poata accesa orice doreste”.

Limbajul de programare Java, fiind sigur, usor de folosit, usor de inteles și în mod automat usor de introdus intr-o retea, este o excelenta baza lingvistica pentru aplicatii de baze de date. Ceea ce este necesar este o cale ca aplicatiile Java sa “vorbeasca” unei varietati de surse de date.

JDBC este mecanismul necesar pentru aceasta.

JDBC API extinde ceea ce poate fi facut cu platforma Java. De exemplu face posibila publicarea unei pagini în web continand o aplicatie care foloseste informatii obtinute de la o sursa de date indepartata. Sau o intreprindere poate folosi JDBC API pentru a-și conecta toti angajatii (chiar dacă acestia folosesc o conglomeratie de masini Windows, Macintosh și UNIX) la una sau mai multe baze de date interne prin intermediul unei retele interne. Cu programatorii care folosesc din ce în ce mai mult limbajul de programare Java nevoia de acces facil și universal la baze de date oferita de JDBC API continua sa creasca.

Ce face JDBC API?

În termenii cei mai simpli din driver bazat pe tehnologia JDBC (JDBC driver) face posibile 3 lucruri , și anume:

1.Stabilirea unei legaturi cu o sursa de date.

2.Trimiterea de informatii actualizate către sursa de date.

3.Procesarea rezultatelor.

Urmatorul fragment de cod este un exemplu simplu al acestor 3 pasi:

Context ctx = new InitialContext();

DataSource ds = (DataSource)ctx.lookup("jdbc/AcmeDB");

Connection con = ds.getConnection("myLogin", "myPassword");

Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");

while (rs.next()) {

int x = rs.getInt("a");

String s = rs.getString("b");

float f = rs.getFloat("c");

}

SQL este limbajul standard pentru a accesa baze de date relationale. Din nefericire, SQL nu este atât de standardizat pe cât s-ar dori. O zona de dificultate o constituie aceea ca tipurile de date folosite de diferite DBMS (Data Base Management System) variaza uneori și variatiile pot fi semnificative. JDBC se ocupa de acest lucru prin definirea unui set de identificatori generici de tip SQL în clasa java.sql.Types.

O alta zona de dificultate a SQL este aceea ca desi majoritatea DBMS-urilor folosesc o forma standard de SQL pentru functionalitatea de baza, ele nu se conformeaza celor mai recent definite standarde de sintaxa sau semantica SQL pentru o functionalitate mai avansata. De exemplu, nu toate bzele de date sprijina procedurile de stocare sau legaturile exterioare, precum și pe cele care nu sunt intotdeauna consecvente unele fata de celelalte .

Un mod în care JDBC API se ocupa de aceasta problema este ca permite trecerea printr-un driver DBMS inferior. Aceasta inseamna ca o aplicatie este libera sa foloseasca oricata functionalitate SQL doreste, dar o pandeste riscul de a capata o eroare pe anumite sisteme DBMS. De fapt, o cerere de aplicatie poate fi altceva decât SQL sau poate fi o derivata specializata a SQL desemnata pentru sisteme DBMS specifice(pentru documente sau imagini ).

O a doua modalitate în care JDBC se ocupa de problemele de conformanta SQL este aceea de a furniza propozitii de tip ODBC. Acest tip de sintaxa furnizeaza o sintaxa JDBC standard pentru cateva din cele mai comune arii de divergenta SQL.

Pentru aplicatii complexe, JDBC se ocupa de conformanta SQL intr-un al treilea mod. El furnizeaza informatii descriptive despre DBMS prin intermediul formulei DatabaseMetaData, astfel incat aplicatiile se pot adapta cerintelor și capacitatilor fiecarui sistem DBMS .

Driver manager

Clasa Driver Manager este nivelul de conducere traditional al JDBC, făcând legătura între utilizatori și drivere. El inregistreaza programele disponibile și stabileste o legatura intre o baza de date și driver-ul potrivit.

javax.sql furnizeaza interfata DataSource ca un mijloc preferential de conectare la o sursa de date. Totusi facilitatea Driver Manager poate fi încă folosita de driverele care sprijina implementarile DataSource .

Clasa Driver Manager mentine o lista de clase Driver care s-au înregistrat sub numele de Driver Manager.registerDriver. În continuare este prezentata o modaliate de a incarca un Driver: folosind metoda Class.forName. Acesta incarca în mod explicit clasa driver. Din moment ce nu depinde de nici o stare externa, aceasta cale este recomandata pentru a folosi fereastra Driver Manager.Urmatorul cod incarca clasa acme.db.Driver:

Class.forName("acme.db.Driver");

Este responsabilitatea Driver-ului nou incarcat sa se auto-inregistreze ca Driver Manager.registerDriver. Cum am mentionat deja aceasta se intampla automat când clasa este incarcata.

Stabilirea unei legaturi

Odata ce clasele Driver au fost incarcate și înregistrate cu clasa DriverManager , acestea pot sa stabileasca o legatura cu baza de date.

Când se cere o legatura prin intermediul metodei DriverManager.getConnection, DriverManager testeaza fiecare driver pe rand pentru a vedea dacă poate stabili o legatura. Uneori se poate intampla ca mai mult de un driver sa fie capabil de o legatura URL. De exemplu, când se conecteaza la o baza de date la distantă , s-ar putea sa foloseasca un driver JDBC-ODBC sau un driver JDBC –to generic –network-protocol sau altul furnizat de baze de date. În asemenea cazuri ordinea în care se face testarea este semnificativa pentru ca Driver Manager va folosi primul driver pe care-l gaseste și care se poate conecta cu succes la URL-ul respectiv.

Mai întâi DriverManager incearca sa foloseasca fiecare driver în ordinea în care a fost înregistrat (driver-ele din jdbc.drivers sunt intotdeauna înregistrate primele). Driverele sunt testae prin metoda Driver.connect. Primul driver care recunoaste URL-ul face legatura.

La prima vedere , metoda poate parea ineficienta dar necesita doar cateva proceduri și comparatii per legatura , din moment ce e neplacut ca zeci de drivere sa fie incarcate concomitent. Urmatorul cod este un exemplu pentru ceea ce necesita o legatura cu un driver precum JDBC-ODBC:

Class.forName("jdbc.odbc.JdbcOdbcDriver"); //loads the driver

String url = "jdbc:odbc:fred";

Connection con = DriverManager.getConnection(url, "userID", "passwd");

Variabilele con reprezinta o legatura cu sursa de date fred , care poate fi folosita pentru a crea și executa declaratii SQL.

Prin adaugarea pachetului javax.sql , un obiect DataSource poate fi folosit pentru a stabili o legatura cu o sursa de date. Și Driver Manager poate fi folosit , dar un obiect DataSource ofera mai multe avantale și este alternativa preferata. Cei care scriu componente Enterprise JavaBeans , ar trebui sa foloseasca un obiect DataSource în locul unui Driver Manager . Folosind un obiect DataSource implementat în mod adecvat , se produc legaturi care pot fi folosite la tranzacții raspandite.

DataSouce

Un obiect DataSource este reprezentarea unei surse date în limbajul de programare Java.În termeni comuni , o sursa de date este o facilitate pentru a stoca date.Poate fi la fele de sofisticata ca o baza de date completa pentru o mare corporatie sau la fel de simpla ca un fisier cu randuri și coloane.

O sursa de date se poate gasi intr-un server izolat sau intr-un desktop local. Aplicatiile acceseaza o sursa de date folosind o legatura și un obiect DataSource poate fi considerat ca un factor pentru legaturi cu anumite surse de date.Interfata DataSource furnizeaza 2 metode pentru stabilirea unei legaturi cu o sursa de date. Folosirea unui obiect DataSource este alternativa preferata în detrimentul utilizarii unui Driver Manager pentru a stabili o legatura cu o sursa de date. Ele sunt similare ca și extensie pentru ca ambele detin metode de creare a unei conexiuni , metode de stabilire a unei limite pentru a face o legatura.

Totusi diferentele sunt mai semnificative decât asemanarile. Spre deosebire de un Driver Manager o DataSource are proprietatile care identifica și descriu sursa de datepe care o reprezinta . De asemenea , un obiect DataSource lucreaza cu un serviciu JDNI și este creat și dezvoltat separat fata de aplicatiile care-l utilizeaza. Faptul ca este înregistrat cu un serviciu JNDI , ii confera 2 avantaje majore , și anume:

-o aplicatie nu necesita codarea informatiei ca în cazul unui Driver Manager. Un programator poate alege un nume logic pentru sursa de date pe care sa-l inregistreze cu ajutorul serviciului JNDI .Aplicatia foloseste acest nume și serviciul JNDI va furniza obiectul DataSOurce asociat cu numele logic. Obiectul DataSource poate fi folosit apoi pentru a crea o conexiune cu sursa de date pe care o reprezinta.

-al doilea avantaj major este acela ca facilitatea DataSource permite implementarea unei clase DataSource . Legatura poate creste performanta în mod dramatic .Capacitatea de a folosi tranzacții variate da unei aplicatii posibilitatea de a în meritele intreprinderii.

Desi o aplicatie poate folosi fie un Driver Manager fie un obiect DataSource , pentru a obtine o legatura , folosirea unui obiect DataSource ofera avantaje semnificative și este recomandabila în stabilirea unei conexiuni.

Statement

Un obiect statement este folosit pentru a trimite declaratii SQL către o baza de date . Exista trei tipuri de obiecte Statement și toate actioneaza ca și recipienti pentru a executa declaratii SQL pentru o anumita legatura: Statement , Prepared Statement care vine de la Statement și Callable Statement care se mosteneste de la Prepared Statement . Ele sunt specializate în trimiterea unor tipuri speciale de declaratii SQL ; un obiect Statement este folosit pentru a executa o afirmatie simpla SQL fără parametri ; un obiect Prepared Statement –pentru a executa o afirmatie SQL cu sau fără parametri ÎN și un obiect Callable Statement –pentru a efectua un apel către o baza de date.

Interfata Statement furnizeaza metode de baza pentru a face declaratii și a prezenta rezulatte . Interfata Prepared Statement adauga metode pentru a se ocupa de parametrii ÎN ;interfata Callable Statement adauga metode pentru a se ocupa de parametrii OUT

Crearea obiectelor Statement

Odata ce se stabileste legatura cu o anumita baza de date , aceasta poate fi folosita pentru a trimite declaratii SQL . Un obiect Statement este creat cu metoda createStatement , ca în urmatorul cod:

Connection con = DriverManager.getConnection(url, "sunny", "");

Statement stmt = con.createStatement();

Declaratia SQL ce vafi trimisa bazei de date este furnizata ca un argument pentru una din metodele execute . Acest lucru este demonstrat în urmatorul exemplu care utilizeaza metoda executeQuery :

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table2");

Variabila rs se refera la un set de rezultate care nu pot fi actualizate și unde cursorul se poate deplasa doar inainte. Exista de asemenea versiuni ale metodei Connection.createStatement care creaza obiecte de tip Statement ce produc obiecte ResultSet , ce pot fi actualizate și care raman deschise dupa ce s-a efectuat o tranzacție .

Executarea declaratiilor folosind obiecte Statement

Interfata Statement furnizeaza trei metode diferite pentru a executa declaratii SQL: executeQuery, executeUpdate și execute. Metoda corecta este determinata de ceea ce produce declaratia SQL .

Metoda executeQuery este folosita pentru declaratiile care produc un singur set de rezultate, ca declaratiile Select.

Metoda executeUpdate este folosita oentru a executa declaratii insert, update, delete sau create table, drop table , alter table. Efectul unei taste insert update sau delete il constituie modificarea uneia sau a mai multor coloane în zero dintr-un tabel.

Trebuie notat ca interfata Prepared Statement care mosteneste toate metodele din interfata Statement are propriile versiuni ale metodelor executeQuery , executeUpdate și execute. Obiectele Prepared Statement nu furnizeaza declaratii SQL ca parametri pentru aceste metode pentru ca ele contin deja o declaratie SQL. Obiectele Callable Statement mostenesc formele Prepared Statement ale acestor metode. Furnizand o declaratie SQL pentru versiunile Prepared Statement sau Callable Statement ale metodelor executeQuery , executeUpdate sau execute se va produce o SQL Exception.

Componenetele JavaBeans în paginile JSP

Componentele JavaBeans sunt clase Java care pot fi usor refolosite și transformate în aplicatii.Orice clasa Java care se ia dupa anumite conventii de design poate fi o componenta JavaBeans.

Tehnologia JSP sprijina în mod nemijlocit folosirea componentelor JavaBeans cu elemente de limbaj JSP .Poti crea și initia cu usurinta programe și poti obtine și stabiliza valorile proprietatilor acestora.

Conventiile de design ale componentelor Java Beans guverneaza proprietatile clasei și metodele care confera accesul la proprietati.

Oproprietate a unei componente JavaBeans poate fi:

-Citit/scris , numai date sau numai scris;

-Simpla, ceea ce inseamna ca ea conține o singura valoare ,sau indexata, ceea ce inseamna ca reprezinta o multitudine de valori.

Nu exista nici o cerinta ca o proprietate sa fie implementata de o variabila instanta ;proprietatea trebuie sa fie accesibila pur și simplu doar prin folosirea metodelor publice care se conformeaza anumitor conventii.

-Pentru fiecare proprietate readable bean-ul trebuie sa contina o metoda a formei PropertyClass getProperty() { … }

-Pentru fiecare proprietate scrisa bean-ul trebuie sa contina o metoda a formei setProperty(PropertyClass pc) { … }

Ca o adaugare la aceste metode o componenta JavaBean trebuie sa defineasca o constructie care nu conține parametri

O pagina JSP poate crea și folosi orice tip de limbaj Java în cadrul în cadrul unei declaratii sau al unui scriptlet. Urmatorul scriptlet creaza cosul de cumparaturi dintr-un magazin și il stocheaza ca pe un atribut:

<%

ShoppingCart cart = (ShoppingCart)session.

getAttribute("cart");

// If the user has no cart, create a new one

if (cart == null) {

cart = new ShoppingCart();

session.setAttribute("cart", cart);

}

%>

Dacă acest element creat este conform cu regulile JavaBeans, paginile JSP pot folosi elemente pentru a crea și a accesa obiectul

<jsp:useBean id="cart" class="cart.ShoppingCart"

scope="session"/>

2.4 JavaBeans

Cum sa creezi și sa folosesti o componenta JavaBeans

Declari ca pagina ta JSP va folosi o componenta JavaBeans utilizand una dintre urmatoarele formate:

<jsp:useBean id="beanName"

class="fully_qualified_classname" scope="scope"/>

sau

<jsp:useBean id="beanName"

class="fully_qualified_classname" scope="scope">

<jsp:setProperty …/>

</jsp:useBean>

Al doilea format este folosit când vrei sa incluzi declaratii jsp:setProperty descrise în sectiunea urmatoare, pentru a initia proprietatile bean-ului.

Elementul jsp:useBean inseamna ca pagina va folosi o informatie care este stocata în interior și accesibila din domeniul specfic ce poate fi “aplication , session , request” sau “page”.

Dacă nu exista o asemenea informatie, ea este creata și stocata ca un atribut al domeniului respectiv.

Valoarea atributului id determina numele (name) campului din domeniul respectiv și identificatorul folosit pentru a face referire la acest camp în alte declaratii și scriptleti JSP.

Stabilirea proprietatilor componentelor JavaBeans

Exista doua moduri pentru a stabili proprietatile componentelor JavaBeans intr-o pagina JSP: cu elementul jsp:setProperty sau cu un scriptlet

<% beanName.setPropName(value); %>

Sintaxa elementului jsp:setProperty depinde de sursa valorii .Tabelul urmator cuprinde modurile variate pentru a stabili o proprietate a unei componente JavaBeans folosind elementul jsp:setProperty.

Recuperarea proprietatilor componentelor JavaBeans

Exista cateva moduri de a recupera proprietatile componentelor JavaBeans.Doua dintre acestea (elementul jsp:getProperty și o expresie )transforma valoarea proprietatii intr-un string și introduc valoarea în obiectul curent implicit:

<jsp:getProperty name="beanName" property="propName"/>

<%= beanName.getPropName() %>

Pentru ambele metode beanName trebuie sa fie acelasi cu cel specificat pentru atributul id intr-un element useBean și de asemenea este necesar sa existe o metoda getPropName în componenta JavaBeans. Dacă este necesar sa recuperezi valoarea unei proprietati fără sa o transformi și sa o introduci în obiectul out trebuie sa folosesti un scriptlet.

<% Object o = beanName.getPropName(); %>

Capitolul III – Prezentare site-ului

Situl eAntiques este un site de licitații online specializat în listarea produselor unor vânzători independenți și actionează ca un intermediar între vânzator și cumpărător, permitându-le acestora sa înregistreze produsele proprii și să le liciteze în beneficiul lor.

Dacă doriti sa cumparati sau să vindeti ceva, nu mai trebuie sa apelați la anunturile din ziare, sa dati sau sa primiti sute de telefoane sau faxuri, sa negociati ore în sir cu fiecare vanzator sau cumparator în parte, sau sa platiti comisioane pentru intermediari, eAntiques vă ofera cea mai facilă și accesibilă cale de a rezolva problemele dumneavoastră legate de tranzacții comerciale.

Pe site se găsește o largă paletă de articole(produse), grupate pe categorii, ceea ce permite găsirea cu usurință a produsului solicitat.

Pe situl eAntiques puteti obtine cel mai convenabil pret atât ca și cumparator, cât și ca ofertant.

Figura 3.1 – Pagina principala

Vanzarea unui articol la licitație

Dacă doriti sa vindeti articole pe site-ul eAntiques prin licitații electronice, trebuie sa parcurgeti urmatoarele etape:

Inscrierea ca nou utilizator selectand optiunea “Creare cont” din cadrul meniului din partea dreaptă superioara a paginii, completarea campurilor cerute în formularul de inscriere: nume utilizator, parola, adresa de e-mail, nume și prenume, adresa, oras, codul postal, judetul, telefonul.

Figura 3.2 – Formular Creare cont

Dacă sunteti deja utilizator, selectati optiunea “Login“ din cadrul meniului din partea dreaptă superioara a paginii, introduceti numele de utilizator în campul "Utilizator" și "Parola" apoi apasati butonul "Login".

Figura 3.3 –Autentificare utilizator existent

În cazul în care utilizatorul și-a uitat parola, o poate recupera prin retrimiterea acesteia pe adresa de email cu care este înregistrat în cont.

Odata înregistrat în sistem, puteti fi simultan atât cumparator cât și ofertant, însă nu pentru acelasi articol.

În urma autentificarii utilizatorul, este redirectat catre o pagină personală în care are următoarele opțiuni: vizualizarea licitațiilor la care a participat, posibilitatea adăugării unei noi licitații, modificarea parolei sale.

Urmatorul pas consta din alegerea categoriei din care fac parte produsele care se doresc a fi vizualizate.

Figura 3.4 – Vizualizarea produselor

Pentru orice produs se pot vizualiza detalii complete despre acesta prin apăsarea butonului Detalii din dreptul produsului.

La fel ca și în cazul inscrierii unui produs la o licitație spre vanzare și în cazul cumpararii utilizatorul trebuie să existe în baza de date și să fie autentificat.

În urma localizarii unui produs utilizatorul este redirectionat către o pagina care contine toate informatiile necesare despre licitația produsului respectiv și în acelasi timp îi permite acestuia sa faca o ofertă.

Astfel, utilizatorul interesat poate sa afle informatii referitoare la produs, categoria din care face parte, oferta curenta, pretul de start, pasul de licitare, data inceperii și incheierii licitației.

Figura 3.5 – Detaliile despre un produs

Licitația Standard

Organizatorul licitației (ofertantul) va introduce pretul de pornire al licitației, și pasul de licitare care la fel ca și pretul de pornire va fi cunoscut tuturor participantilor (cumparatorilor). Participantii la licitație vor furniza o oferta care trebuie să fie mai mare sau egală cu prețul maxim oferit până în acel moment pentru respectivul produs, plus pasul de licitare. Cumparatorul va licita pentru intreaga cantitate de articole pusa în vanzare de catre ofertant. În cazul existentei mai multor preturi maxime egale, castigatorul se va alege functie de vechimea ofertei (cele mai vechi avand prioritate).

Figura 3.6 – Licitarea unui produs

Pentru a putea vedea în orice moment care a fost evolutia ofertelor pentru un anumit produs utilizatorul are un link în cadrul paginii unde se desfășoară licitația către o pagină istoria licitațiilor unde se regasesc informatii cu privire la utilizatorul, oferta acestuia și momentul când aceasta licitație a avut loc.

Incheierea unei tranzacții

Tranzactia este procesul pornit automat de catre sistem în momentul în care termenul de valabilitate al licitației expira și licitația este declarata închisă. Urmeaza procedura de incheiere prin care atât organizatorul cât și participantul castigator vor primi un mesaj de e-mail prin care vor fi anuntati de incheierea licitației. Ei vor putea sa ia legatura unul cu celalalt și sa perfecteze datele contractului.

Mesajul trimis contine numele, prenumele, adresa de email și adresa exacta a celeilalte părți implicate în tranzacție.

Concluzii

Licitațiile electronice au câteva avantaje comparativ cu licitațiile tradiționale. Primele au o răspândire mult mai mare atât în spațiul geografic cât și în timp. În loc să participe fizic prin prezența la locul unde are loc licitația, cel interesat poate să liciteze de acasă sau de oriunde altundeva. Licitațiile tradiționale presupun participarea în acelasi timp a tuturor licitatorilor, fiecare dintre ei încercând să îl supraliciteze pe celălalt pe parcusul întregii licitații, spre deosebire de licitațiile electronice care sunt asincrone, adică pot dura zile sau săptămâni, având o flexibilitate mai mare în ceea ce privește momentul în care se poate licita. Aceasta caracteristică îl favorizează și pe vânzător, prin faptul că permite lărgirea pieții pentru bunul scos la licitație.

Pe Internet se poate obține foarte ușor un grup mare de licitatori, față de programarea unei licitații cu o luna înainte și restricționarea geografică la licitatorii din zonă. Mai mult decât atât, găsirea unui anumit produs este mult mai ușor de realizat folosind motoarele de căutare sau prin navigarea în cadrul categoriilor unui site de licitații electronice.

Site-ul eAntiques a fost realizat utilizând elemente de Java EE pentru partea de funcționalitate, HTML pentru interfață și o bază de date MySQL pentru gestionarea datelor.

Pe situl eAntiques veți găsi o largă paletă de articole(produse), grupate pe categorii, ceea ce permite găsirea cu ușurință a produsului solicitat și de asemenea puteți obține cel mai convenabil preț, atât ca și cumparator cât și ca ofertant. Puteti fixa un termen de valabilitate a ofertei sau cererii dumneavoastră. La fel se procedează și în cazul condițiilor comerciale (preț, condiții de plată, livrare, etc.). Încheierea unei licitatii in care dumneavoastra deveniti castigator vă pune in legatura cu organizatorul licitatiei pentru perfectarea și finalizarea contractului.

Bibliografie

ALOK GUPTA, RAVI BAPNA, Online Auctions: A Closer Look, Handbook of Electronic Commerce in Business and Society, Boca Raton, FL: CRC Press, 2002

DANIEL HOUSER, JOHN WOODERS, Reputation in Auctions: Theory, and Evidence from eBay, http://bpaosf.bpa.arizona.edu/~jwooders/ebay.pdf

DAVID LUCKING-REILEY, Auctions on the Internet: What's beeing auctioned, how?, http://www.vanderbilt.edu/econ/reiley/papers/InternetAuctions.pdf

MANOJ KUMAR, STUART FELDMAN, Internet Auctions, http://www.ibm.com/iac/papers/auctions_fp.pdf

SABIN BURAGA, Proiectarea siturilor Web. Design și functionalitate, Editura Polirom, 2002

ANTONIO GONCALVES, Beginning Java EE 7, Apress, 2013

ARUN GUPTA, Java EE 7 Essentials, O’Reilley, 2013

http://www.oracle.com/technetwork/java/javaee/documentation/index.html

ELIZABETH CASTRO, HTML pentru World Wide Web cu XHTML și CSS – Ghid de invatare repida prin imagini, Ed. Corint, 2003

JASON BEAIRD, Principii de webdesign atractiv, Ed. 3D Fortis Expert, 2014

Similar Posts