Elaborarea Unui Portal Internet cu Utilizarea Tehnologiilor Open Source
Teză de licență
Elaborarea unui portal internetcu utilizarea tehnologiilor Open Source
Cuprins
INTRODUCERE
CAPITOLUL I. JAVA
1.1 Ce este Java
1.2 Garbeage Collector
1.3 Medii integrate
1.4 Biblioteci si framework-uri
CPITOLUL II. FRAMEWORK-URI JAVA
2.1 Spring
2.2 Spring MVC
2.3 JavaServer Pages (JSP)
2.4 Spring Security
2.5 Tiles
2.6 Hibernate Java ORM Framework
CPITOLUL III. APLICAREA TEHNOLOGIILOR JAVA IN PRACTICA
3.1 Medii Open Source aplicate in practica
3.2 EER Diagrama a Bazei de Date Relaționale
3.3 Obiecte persistente in framework-ul ORM Hibernate
3.4 Autentificarea utilizatorilor cu ajutorul Spring Security
CONCLUZII
BIBLIOGRAFIE
ANEXE
Anexa 1. Reprezentarea paginii web ce contine forma pentru autentificarea utilizatorilor cu ajutorul Spring Security
Anexa 2. Reprezentarea paginii web cu rol de admin dupa autentificare
Anexa 3. Reprezentarea paginii web cu rol de admin pentru crearea unui client
Anexa 4. Reprezentarea paginii web cu rol de admin pentru vizualizarea profilului unui client
Anexa 5. Reprezentarea paginii web cu rol de admin pentru editarea unui client
Anexa 6. Reprezentarea paginii web cu rol de admin vizualizare tuturor account-uri din baza de date
Anexa 7. Reprezentarea paginii web cu rol de admin cu vizualizarea user-lor
Anexa 8. Reprezentarea paginii web cu rol de user pentru vizualizarea profilului fara drepturi de redactare
Anexa 9. Scripturile Bazei de Date Relationale
Anexa 10. Codul Sursa
INTRODUCERE
Înprezent, Internet-ul constituie una din cele mai mari inventii ale lumii moderne. El pune lumea lapicioarele noastre, oferindu-ne informatia de care avem nevoie in cel mai scurt timp. Numarul
utilizatorilor este in crestere in fiecare zi,astfel cerintele Web site-urilorse schimba in timp si in consecinta se modifica si abordarile folosite pentru crearea lor.În prezent, cele mai populare sunt site-uri dinamice. Comparativ cu cele statice (în prezent nu sunt actuale,deja), dinamice oferă mult mai multe oportunități pentru crearea și completarea paginilor web. Daca informațiile de pe un site static trebuie sa fie adaugata si redactata manual,atunci in celdinamic redactarea si adaugarea informatiilor se efectuiaza prin extragerea conținutului din baze dedate la cererea utilizatorului. Acest lucru este foarte util la efectuarea unui sitemare (portal), cu un număr mare de pagini.
O data cu dezvoltarea, atit de rapida a tehnologiilor web,apar multe aplicatii web ce usureaza lucrulprogramatorilor,ca de exemplu CMF, CMS. Dar si nu in ultimul rind, limbajele de programare ca PHP, JavaScript, Phyton, Java ramin a fi instrumente de baza pentru dezvoltarea tehnologiilor si dezvoltarea a numeroaselor aplicatii de calitate.
Cele mai multe aplicatii in zilele noastre sunt scrise in Java, limbaj de programare care se utilizează pentru producerea și dezvoltarea unui număr mare de aplicații software și pentru implementarea acestora în cele mai diferite medii multi-platforms. Iar noile evolutii tehnologice permit utilizarea sa si pe dispozitive mobile de gen ca telefon, mp3 palyere, agenda electronica, laptop, tabletși ajungând până la servere Web complexe și aplicații corporative complexe. In felul acesta se creeaza o platforma unica, la nivelul programatorului, deasupra unui mediu extrem de divers. Acesta este utilizat in prezent cu succes si pentru programarea aplicatiilor destinate intranet-urilor.
Java este un limbaj de programare orientat pe obiect, puternic tipizatce împrumută o mare parte din sintaxă de la C și C++, dar are un model al obiectelor mai simplu și prezintă mai puține facilități de nivel jos. Programare orientate pe obiecte este unul din cei mai importanți pași făcuți în evoluția limbajelor de programare spre o mai puternică abstractizare în implementarea programelor.Un program Java compilat, corect scris, poate fi rulat fără modificări pe orice platformă care e instalată o mașină virtuală Java (engleză Java Virtual Machine, prescurtat JVM)deci este un limbaj Cross Platform. Acest nivel de portabilitate (inexistent pentru limbaje mai vechi cum ar fi C) este posibil deoarece sursele Java sunt compilate într-un format standard numit cod de octeți (engleză byte-code) care este intermediar între codul mașină (dependent de tipul calculatorului) și codul sursă.
Java este un limbaj de programare de nivel înalt, dezvoltat de JavaSoft, companie în cadrul firmei Sun Microsystems ce este in continuua dezvoltare si cu un viitor imens.
Pentru teza data am urmarit sa realizez urmatorele scopuri principale:
studiul framework-urilor ca Hibernate, Spring, Spring Mvc, Tiles bazate pe Java
cercetarea bibliotecilor, dependentelor (jar-urilor) si limbajelor aditionale ca HTML, CSS, Java Script ce se folosesc pentru stilizare si design
elaborarea bazei de date pentru portalul web
elaborarea unui portalweb pe bazaOpen Source frameworks ca Hibernate, Spring, Spring Mvc, Tiles.
CAPITOLUL I. JAVA
1.1 Ce este Java
Java este un limbaj de programare orientat pe obiect, puternic tipizat ce împrumută o mare parte din sintaxă de la C și C++, dar are un model al obiectelor mai simplu și prezintă mai puține facilități de nivel jos. Programare orientate pe obiecte este unul din cei mai importanți pași făcuți în evoluția limbajelor de programare spre o mai puternică abstractizare în implementarea programelor.Un program Java compilat, corect scris, poate fi rulat fără modificări pe orice platformă care e instalată o mașină virtuală Java (engleză Java Virtual Machine, prescurtat JVM)deci este un limbaj Cross Platform. Acest nivel de portabilitate (inexistent pentru limbaje mai vechi cum ar fi C) este posibil deoarece sursele Java sunt compilate într-un format standard numit cod de octeți (engleză byte-code) care este intermediar între codul mașină (dependent de tipul calculatorului) și codul sursă.
O caracteristică a Java este portabilitatea, ceea ce înseamnă că programele de calculator scrise în limbajul Java trebuie să ruleze la fel pe orice platformă hardware / sistem de operare. Acest lucru este realizat prin compilarea codului de limbajul Java pentru o reprezentare intermediara numita Java bytecode , în loc de direct la platforma-specifice de cod mașină . Instrucțiuni Java bytecode sunt analoage cu cod mașină , dar ele sunt destinate să fie interpretate de către o mașină virtuală ( VM ) scris special pentruhardware gazdă . Utilizatorii finali folosesc de obicei un Java Runtime Environment ( JRE ) instalat pe propria mașină pentru aplicații Java standalone , sau într- un browser Web pentru applet-uri Java .Biblioteci standardizate oferă un mod generic pentru a accesa caracteristici specifice gazdă, cum ar fi grafica , filetare , și crearea de rețele .
Un beneficiu major de a folosi bytecode este de portare . Cu toate acestea , aeriene de interpretare înseamnă că programele interpretate rula aproape întotdeauna mai lent decât programele compilate pentru executabile native ar fi. Just – in -Time au fost introduse ( JIT ), compilatoare de la un stadiu incipient care compila bytecodes de cod mașină în timpul rulării.
De programare Java este un vast domeniu , bine stabilit , care este încă în expansiune ca capacitățile de limbași biblioteci asociate crește . De la lansarea sa, creșterea de Java ca limbaj orientat-obiect dealegere pentru programare internet, aplicatii cross-platform, și de predare a fost fenomenal . în meapoti vedea asta se datorează trei lucruri : natura – sistem independent de Java , simplitatea și puterea de alimba , și gama extraordinara de sarcini de programare pentru care Java este un instrument eficace și ușor de utilizat . Java este limbajul de alegere a multor programatori pentru dezvoltare majoră aplicații , oferindavantaje în ușurința de dezvoltare și de întreținere în comparație cu alte limbaje , precum și încorporat capa – bilitatea de a rula pe o varietate de calculatoare și sisteme de operare , fără modificări de cod . Cu Java , puteți face unmult mai mult , mai repede , și mai ușor .
În această carte am scopul de a vă oferi o înțelegere cuprinzătoare a limbii , plus o experiență de
de programare într-o gamă de contexte de aplicații Java pentru a vă oferi o bază solidă în fiecare dintre aceste domenii de bază .Fiecare aspect de Java , care este acoperit în cartea este ilustrată prin exemple de program complet de lucru pe care lepot și ar trebui să creeze și să rulați pentru tine . Există, de asemenea, exercită lasfârșitul fiecărui capitol pentru a davă posibilitatea de a încerca ceea ce ați învățat. Cu o înțelegere dintre subiectele din această carte , văpoate începe să scrie programe Java complet recomandate și eficiente .Cuvântul Beginningin titlul se referă mai mult la stilul de predare cărții decât la nivelul de calificare ,eaar putea la fel de bine să fie numit drept în Java , pentru că am proiectat structura tutorial astfel încât , dacăesti un programator maturate de la o altă limbă sau un nou venit la programare , în general , carteava găzdui nivelul de cunoștințe .Am presupus ca un minim care știți ceva despre programare , în care ați înțelescel puțin conceptele fundamentale de modul în care funcționează programe.Mai întâi de toate , Java vă permite să scrie programe mici numit applet-uri . Acestea sunt programe care vă pot încorpora în paginile web pentru a oferi o inteligență . Fiind capabil de a încorpora cod executabil într-o pagină web introduce o gamă largă de posibilități interesante . În loc de a fi o prezentare pasiv de text și grafică, o pagina web poate fie interactiv , în orice mod pe care îl doriți . Puteți include animații , jocuri , tranzacție interactive prelucrare – posibilitățile sunt aproape nelimitate . Desigur , integrarea de cod de program într-o pagină web creează cerințe speciale de securitate . Ca Utilizator de Internet accesează o pagină cu încorporat cod Java , aveți nevoie pentru a fi sigur că nu va face ceva care ar putea interfera cu funcționarea computerului sau deteriora datele pe care le au asupra sistemul dumneavoastră . Acest lucru implică faptul că executareacodului încorporat trebuie să fie controlată în așa fel încât previne deteriorarea accidentală a mediului de computer , precum și să asigure că orice cod Java care a fost creat cu intenția de malware este inhibată în mod eficient . Java include implicit măsuri de a minimiza posibilitatea de astfel de evenimente care apar cu un applet Java .
1.2 Garbeage Collector
Java utilizeaza un colector automat de gunoi pentru a gestiona memoria în ciclul de viață al obiectului . Programatorul determină când sunt create obiecte , și runtime Java este responsabil pentru recuperarea memoriei odată obiecte nu mai sunt în uz . Odată ce nici o referire la un obiect rămâne , memoria de neatins devine eligibil pentru a fi eliberat automat de gunoier . Ceva similar cu o scurgere de memorie pot să apară în cazul în care codul de un programator deține o referință la un obiect care nu mai este nevoie , de obicei, atunci când obiectele care nu mai sunt necesare sunt stocate în containere care sunt încă în uz . În cazul în care sunt numite metode pentru un obiect inexistent , o " excepție pointer nul " este aruncat .
Una dintre ideile din spatele modelului automat de gestionare a memoriei Java este că programatorii pot fi scutit de povara de a avea pentru a efectua de gestionare a memoriei manual . În unele limbi , memorie pentru crearea de obiecte este alocat implicit pe stiva , sau împărțite în mod explicit și dealocate de heap . În acest ultim caz, responsabilitatea de gestionare a memoriei locuiește cu programator . În cazul în care programul nu dealoca un obiect , o irosire de memorie apare . În cazul în care încercările de program pentru a accesa sau de memorie dealoca care a fost deja dezafectate , rezultatul este nedefinit și dificil de prevăzut , iar programul este probabil să devină instabil și / sau accident . Acest lucru poate fi remediată parțial prinutilizarea indicii inteligente , dar aobiecte , și runtime Java este responsabil pentru recuperarea memoriei odată obiecte nu mai sunt în uz . Odată ce nici o referire la un obiect rămâne , memoria de neatins devine eligibil pentru a fi eliberat automat de gunoier . Ceva similar cu o scurgere de memorie pot să apară în cazul în care codul de un programator deține o referință la un obiect care nu mai este nevoie , de obicei, atunci când obiectele care nu mai sunt necesare sunt stocate în containere care sunt încă în uz . În cazul în care sunt numite metode pentru un obiect inexistent , o " excepție pointer nul " este aruncat .
Una dintre ideile din spatele modelului automat de gestionare a memoriei Java este că programatorii pot fi scutit de povara de a avea pentru a efectua de gestionare a memoriei manual . În unele limbi , memorie pentru crearea de obiecte este alocat implicit pe stiva , sau împărțite în mod explicit și dealocate de heap . În acest ultim caz, responsabilitatea de gestionare a memoriei locuiește cu programator . În cazul în care programul nu dealoca un obiect , o irosire de memorie apare . În cazul în care încercările de program pentru a accesa sau de memorie dealoca care a fost deja dezafectate , rezultatul este nedefinit și dificil de prevăzut , iar programul este probabil să devină instabil și / sau accident . Acest lucru poate fi remediată parțial prinutilizarea indicii inteligente , dar acestea adăugați deasupra capului și complexitate . Rețineți că de colectare a gunoiului nu împiedică " logice " pierderi de memorie , adică cele în care memoria este încă referire , dar nu a folosit niciodată .
De colectare a gunoiului se poate întâmpla în orice moment . În mod ideal , aceasta va avea loc atunci când un program este inactiv . Acesta este garantat de a fi declanșată în cazul în care există o memorie liber insuficient pe heap pentru a aloca un nou obiect ; acest lucru poate provoca un program pentru a bloca momentan . De gestionare a memoriei explicite nu este posibilă în Java .
1.3 Medii integrate
– Eclipse (http://www.eclipse.org) Mediu integrat dezvoltat in principal de catre IBM. Este de asemenea folosit de catre multe firme pentru a dezvolta propriile solutii (open source sau comerciale) prin adaugarea de plugin-uri.
– NetBeans (http://www.netbeans.org) Mediu integrat produs de catre firma Sun Microsystems. Mi s-a parut destul de usor de utilizat, intuitiv si foarte robust.
– IntelliJ IDEA (http://www.jetbrains.com/idea/) Produs de catre firma JetBrains. Este un produs comercial, dar are o versiune de baza ce poate fi folosita in mod gratuit.
– BlueJ (http://www.bluej.org) Un IDE destinat dezvoltatorilor Java incepatori, extrem de usor de utilizat dar fara prea multe facilitati.
1.4 Biblioteci si framework-uri
O list minimala de biblioteci si framework-uri utilizate pe scara larga in aplicatii Java sunt:
– GUI – Platforma Java ofera solutii si posibilitatea de a dezvolta interfetea grafice folosind SWING si AWT. Acestea sunt integrate in JDK. Si pentru aplicatii web – VAADIN.
De asemenea, un al toolkit major pentru dezvoltarea de interfete grafice in Java este SWT (Standard Widget Toolkit). Acesta este toolkit-ul folosit de catre Eclipse si de catrea aplicatiile bazate pe Eclipse RCP.
– Aplicatii web – Aplicatiile web in Java pot fi dezvoltate folosind solutiile "clasice" (Servlets & JSP, JSF) sau se pot folosi unul din zecile de framework-uri existente: Struts, Tapestry, Wicket, Stripes, Shale, Eclipse RAP, Google GWT, Spring , Spring MVC etc.
– Unit testing – Solutile uzuale pentru unit testing sunt JUnit si TestNG, Mock ,JMock , EasyMock
– Build – Solutiile sunt Ant si Maven2
– ORM (Object Relational Mapping) – Printre cele mai complete solutii ORM este Hibernate. Alte solutii uzuale sunt: iBATIS si JPA. De asemenea, meritade mentionat faptul ca Java ofera facilitati integrate de conectare la baze de date prin intermediul JDBC(Java Database Connectivity).
– Aplicatii client-server –Java ofera facilitati integrate de comunicare in retea prin intermediul socket-urilor TCP/UDP. Daca se doreste utilizarea unui framework pentru dezvoltarea de aplicatii pentru retea, se poate utiliza Apache MINA.
Daca o aplicatie are nevoie sa acceseze diverse protocoale uzuale (HTTP, FTP, etc), se poate utiliza Jakarta Commons Net.
CPITOLUL II. FRAMEWORK-URI JAVA
2.1 Spring
SpringFramework este un cadru aplicație open source și inversiune de container de control pentru platforma Java. Caracteristici-cadru de bază poate fi utilizat de către orice aplicație Java, dar există extensii pentru construirea de aplicații web pe partea de sus a platformei Java EE. Deși cadrul nu impune nici un model de programare specifice, acesta a devenit popular în comunitatea Java ca o alternativă la, înlocuitor pentru, sau chiar plus față de modelul Enterprise JavaBean (EJB).
Central la Cadrul de primăvară este inversarea sa de control ( IOC) container , care oferă un mijloc consistente de configurarea și gestionarea obiectelor Java folosind reflecție. Containerul este responsabil pentru gestionarea cicluri de viață de obiecte de obiecte specifice : crearea acestor obiecte , de asteptare metodele lor de inițializare , și configurarea acestor obiecte prin conectarea lor împreună.
Obiectele create decontainer se mai numesc obiecte administrate sau beenuri. Containerul poate fi configurat prin încărcarea de fișiere XML sau detectarea adnotări Java specifice pe clase de configurare. Aceste surse de date conțin definițiile de bean , care oferă informațiile necesare pentru a crea fasole .Obiectele pot fi obținute prin intermediul fie dependență căutare sau injecție dependență . Dependența de căutare este un model în care un apelant solicităobiectului container pentru un obiect cu un anumit nume sau de un anumit tip . Dependență injecție este un model în care recipientul trece de obiecte dupa denumire către alte obiecte , prin intermediul fie constructori , proprietăți , sau metode fabrică .
În multe cazuri, cineva nu trebuie să folosiți recipientul atunci când se utilizează alte părți ale cadrului de primăvară , deși folosindu-l va face probabil o aplicație ușor de configurat și de a personaliza . Containerul de primăvară oferă un mecanism consistent pentru a configura aplicatii si se integreaza cu aproape toate mediile Java , de la aplicatii de dimensiuni mici până la aplicații de întreprinderi mari.
Spring Framework conține o mulțimede caracteristici, caresuntbine organizateînșapte moduleprezentateîndiagrama de mai jos. Acest capitoldiscutăfiecaredintre modulele, la rândul său.
Fig.1 Caracteristici Spring
2.2 Spring MVC
Framework web SpringMVC oferă arhitectura Model-View-controler șicomponentegata, care pot fifolosite pentru a dezvolta aplicatii web flexibile și slab cuplate. ModelulMVCduce lasepararea diferitelo r aspecte alecererii(logica de intrare, logica de afaceri, șilogicaUI), oferind în același timpun cuplaj pierde între aceste elemente.
Modelul încapsulează datele aplicațieiși, în general, va consta dinPOJO.
View este responsabil pentrua cordarea datelor modeluluiși, în general, generează ieșire HTML căbrowser-ul clientuluip oateinterpreta.
Controller este responsabil pentru procesarea cererilorde utilizator și construireamodel adecva tși trece-l la ecranul deredare
Spring Web model-view-controller (MVC) frameworkeste conceputîn juruloDispatcherServletcarese ocupă de toate cererile HTTPșirăspunsuri.Fluxul de lucru de prelucrare cerereade spring WebMVCDispatcherServlete steilustrat în diagrama de mai jos:
Fig.2 Spring MVC Pattern
În urma este succesiunea de evenimente care corespund la o cerere HTTP de intrare la DispatcherServlet:
După ce a primit o cerere HTTP, DispatcherServlet consultă HandlerMapping pentru a apela Controller adecvat.
Controller ia cererii și solicită și metodele de serviciu bazat pe Obisnuieste-te sau metoda POST. Metoda de servicii va stabili date model bazat pe logica de business definită și se întoarce vizualiza nume DispatcherServlet.
DispatcherServlet va lua ajutor de la ViewResolver la pickup de vedere definit pentru cererea.
Odată ce punct de vedere este finalizată, DispatcherServlet trece datele modelului de vedere, care este în cele din urmă făcut pe browser-ul.
Toate componentele de mai sus, adică. HandlerMapping, controler și ViewResolver sunt părți ale WebApplicationContext, care este o extensie a ApplicationContext simplu, cu unele caracteristici suplimentare necesare pentru aplicatii web.
2.3 JavaServer Pages (JSP)
Pagini JavaServer (JSP) sunt server-side Java EE componente care generează răspunsuri, de obicei, pagini HTML, la cereri HTTP de la clienti. JSP-uri embed cod Java într-o pagină HTML folosind delimitatorii speciale <% si%>. Un JSP este compilat pentru un servlet Java, o aplicație Java în sine, prima dată când este accesat. După aceea, servlet generat creează răspunsul.
2.4 Spring Security
Spring Security oferă o soluție de securitate completă pentru intreprinder iaplicații software bazate peJ2EE.
Spring Security is a framework care se concentrează pe furnizarea atâtde autentificare și autorizare pentru aplicații Java. La fel catoate proiectelede primăvară, puterea realădeprimăvarăde securitatese găseșteîncât de ușorpoatefi extins pentru a satisface cerințele personalizate, Suport complet și extensibilat ât pentru autentificare și autorizare; protectie impotriva atacuriloe.
Puteți face rost de primăvarăde securitateîn mai multe moduri. Puteți descă rcao distribuți eambalate de pe pagina principală de download de primăvară, descărcați borcane individuale (și fișierele eșantionde WAR)de la depozitul central Maven(sau un depozit Spring Source Maven pentru in stantaneu și piatră de hotarde presă) sau, alternativ, puteți construi proiectul de lasursăte. Vezisite-ul proiectului pentru mai multedetalii.
Fig.3 Spring Security
Această va continua cufiltrele, este esențială pentru securitatea de primăvară, și de aceeaea faceatât de flexibil, pentru căeste complet separatde lamodelul de afaceri, asta e ceea ceo faceatât de mare, pentru căîn cazul în caremâinese întâmplă pentru a schimbatoate de securitate, sistemul dvs.nuva suferi modificări majore. Filtrele sunt responsabile pentru securitatea cererii. Există treifiltre principale sunt legate împreunădeun obiect numit"filterChainProxy", care creează și inițializează cele trei filtre; așa cum se arată în diagrama de mai jos.
Fig.4 Web/HTTP Security
2.5 Tiles
Un framework gratuit provenind deschis templating pentrua plicații Java moderne. Pe baza modelului compozit este construit pentru asimplifica dezvoltarea de interfețe utilizator.
Pentru site-uri web complexe rămâne cel mai simplu și maielegant mod de a lucra alături de orice tehnologie MVC.
Tiles permite autorilorde a defini fragmente de pagini care pot fi asamblate într-un complet de paginila rulare. Aceste fragmente, sau placi, poate fi utilizatla fel de simplu include, pentru a reduce suprapunerea elementelor comunede pagină sau încorporat înalte componente pentru a se dezvolta oserie de șabloane reutilizabile. Aceste template-uri simplifica dezvoltarea unuia spect consistentșise simt pe o aplicație întreg.
Tiles este o punere în aplicarea Composite Viewmodel. Gresi ea daugă la acest model propriile concepte pentru a face beton model. Punerea în aplicareaTilesjurulCompositeVezi modeluleste formatdinconcepteleFormat, atribut șidefiniție.ModelulViewHelpereste implementatde cătreconceptul ViewPreparer.ÎnTiles, un șablonesteo parteasp ectulunei pagini.Puteți vedeacaostructură depagină cuunele lacune, numite atribute, pentru afi umplutor.
Fig.5 Sablon Tiles
Aceast sablon poate fi reproducea ceastă structură prin crearea unei pagini JSP, după cum puteți vedea mai jos.
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<table>
<tr>
<td colspan="2">
<tiles:insertAttribute name="header" />
</td>
</tr>
<tr>
<td>
<tiles:insertAttribute name="menu" />
</td>
<td>
<tiles:insertAttribute name="body" />
</td>
</tr>
<tr>
<td colspan="2">
<tiles:insertAttribute name="footer" />
</td>
</tr>
</table>
O definiție este o compoziție de afi prestatela utilizatorul final; în esență,o definiție este compus dintr-un șablon și atribute umplute complet sau parțial.
Dacă toate atributele sale sunt ocupate, acesta poate fireda tlautilizatorul final.
Dacă nu toatea tributele sale sunt pline, aceasta se numește o definițiea bstractă, și poate fi folosit ca o definiție de bază pentru definiții extinse, sau atributele lor lipsă poate fi completatîn timpul rulării.
De exemplu, puteți crea opagină folosind aspectul clasic așa cum am văzut, prin modificarea fișierului de configurare Tiles ca de exemplu tiles.xml.
<definition name="myapp.homepage" template="/layouts/classic.jsp">
<put-attribute name="header" value="/tiles/banner.jsp" />
<put-attribute name="menu" value="/tiles/common_menu.jsp" />
<put-attribute name="body" value="/tiles/home_body.jsp" />
<put-attribute name="footer" value="/tiles/credits.jsp" />
</definition>
2.6 Hibernate Java ORM Framework
Hibernate este o înaltă performanță obiect/relationale persistența și serviciude interogare care este licențiat subopen source GNULesserGeneral Public License(LGPL) și este liber pentru a descărca. Hibernate are nunumai grijă deca rtografierede laclase Javala tabelede baze de date(și de latipurile de date Java pentru tipurile de dateSQL), daroferă, de asemenea interogarede date și facilități de recuperare. Acest tutorialvă va învățacumsă folosească Hibernate pentru a dezvolta aplicatii web bazate pebaze de datedvs.înpași simpliși ușor.
JDBC stand pentru Conectivitate Java Databaseși oferăun set de Java API pentru accesarea relațional baze de datede la program Java. Aceste API-uri Java permite programelorJavapentru a executa instrucțiuni SQL și interacționează cu oricebază de date compatibil SQL. JDBCoferăofle Arhitecturaxible pentru a scrieo aplicațiede baze de dateindependent, care poate rula pediferite platforme șiinteracționează cu diferite Baze de date, fără nici o modificare.
Fig.6 ORM/Hibernate
Fig.7 Spring3 Hibernate Application Architecture
CPITOLUL III. APLICAREA TEHNOLOGIILOR JAVA IN PRACTICA
3.1 Medii Open Source aplicate in practica
Pentru un programator, pentru a incepe lucrul este nevoie de medii de lucru, adica IDE-ri ca ECLIPSE sau NETBEANS ,ce sunt open source , ce se folosesc pentru organizarea proiectelor, dezvoltarea propriilor solutiilor prin adaugarea de plugin-uri.
Pentru lucrul cu baza de date se recomanda Mysql Workbench in cazul mysql, deorece pe parcurs o sa aveti nevoie de o organizare mult mai precisa a datelor in baza de date plus ca fara o "legatura" vizuala intre tabele o sa uitati ce si de unde se leaga sau ce este intr-un tabel.MySQL Workbench este un instrument vizual unificat pentru arhitecti, dezvoltatori de baze de date, și DBA. MySQL Workbench ofera modelarea datelor, dezvoltare SQL, și instrumente de administrare complete de configurare a serverului, administrarea utilizatorilor, de backup, și mult mai mult. MySQL Workbench este disponibil pe Windows, Linux și Mac OS X.
Pentru proiectul dat am folosit IDE Eclipse pentru elaborarea proiectului, pentru scrierea codului. Iar pentru crearea Bazei de Date si EER Diagrame am folosit Mysql Workbench 6.
In calitate de server pentru aplicatia data am instalat Tomcat 7 – Open Sourse Web Server si Servlet Container , ce implementeaza Java Server Page (JSP) si Servlete in web browser si ofera un mediu de server HTTP web pentru a rula Java Cod. În cel mai simplu de configurare Tomcat se execută într-un singur proces de sistem de operare. Procesul rulează o mașină virtuală Java (JVM). Fiecare cerere HTTP de la un browser la Tomcat este prelucrat în procesul de Tomcat într-un fir separat.Apache Tomcat include instrumente de configurare si management, dar poate fi, de asemenea, configurat prin editarea de fișiere de configurare XML.
3.2 EER Diagrama a Bazei de Date Relaționale
EER (enhanced entity–relationship) Diagrama este o Diagrama Relationala, un model conceptual a datelor ce se foloseste pentru design –ul a unei scheme a bazei de date.
Fig.8 EER Diagrama
3.3 Obiecte persistente in framework-ul ORM Hibernate
O entitate este un obiect al unui domeniu de persistent. O entitate reprezintă un tabel într-o bază de date relațională, și fiecare instanță entitate corespunde la un rand din acea tabela. Artefactul de programare primară a unei entități este clasa entitate, deși entități pot folosi clase helper.
Starea persistentă a unei entități este reprezentat fie prin câmpuri persistente sau proprietăți persistente. Aceste câmpuri sau proprietăți folosi obiect / relationale adnotări de mapare a entităților și relațiile entității la datele relaționale, în depozitul de date care stau la baza.
În contextul Java Enterprise, persistența se referă la actul de stocare automată a datelor conținute în obiecte Java într-o bază de date relațională.Java Persistence API (JPA) este o cartografiere (ORM) tehnologie obiect-relational care permite aplicații pentru a gestiona date între obiecte Java și o bază de date relațională într-un mod care este transparent pentru dezvoltator. Acest lucru înseamnă că puteți aplica JPA la proiectele dvs., prin crearea și configurarea unui set de clase Java (unități) care reflecta modelul de date. Cererea dumneavoastră pot accesa apoi aceste entități ca și cum ar fi accesarea direct în baza de date.
O clasă entitate ar trebui să respecte următoarele cerințe:
Clasa trebuie să fie adnotat cu adnotarea javax.persistence.Entity.
Clasa trebuie să aibă un constructor, nu-argument constructor publice sau protejate. Clasa poate avea alți constructori.
Clasa nu trebuie declarată final. Metode sau variabile persistente instanță trebuie să fie declarate finale.
În cazul în care o instanță entitate fi transmise prin valoare, ca un obiect detașat, cum ar fi prin intermediul interfeței de afaceri de la distanță o sesiune de bean lui, clasa trebuie să implementeze interfața Serializable.
Entitățile contractante pot extinde atât entitate și clase de non-entitate, și clase de non-entitate poate extinde clase de entitate.
Variabile de instanta persistente trebuie să fie declarate privat, protejat, sau pachet privat, și pot fi accesate numai direct prin metode clasa entității. Clientii trebuie să acceseze de stat a entității prin accesor sau metode de afaceri.
Exemplu de clasa entitate cu cîmpuri persistente:
@Entity
@Table(name = "clients")
public class Client implements BaseEntity<Integer> {
private static final long serialVersionUID = 36619953205900680L;
@Id
@Column(name = "id")
@GeneratedValue
private Integer id;
@Column(name = "lastName")
private String lastName;
@Column(name = "firstName")
private String firstName;
@Column(name = "address")
private String address;
@Column(name = "email")
private String email;
@Column(name = "connectionDate")
private Date connectionDate;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "client")
private Set<Account> accounts;
@OneToOne
@PrimaryKeyJoinColumn
private User user;
public Client() { }
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public Integer getId() {
return id;
}
@Override
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getConnectionDate() {
return connectionDate;
}
public void setConnectionDate(Date connectionDate) {
this.connectionDate = connectionDate;
}
public Set<Account> getAccounts() {
return accounts;
}
public void setAccounts(Set<Account> accounts) {
this.accounts = accounts;
}
@Entity – indind anotatia data, aratam ca obiectul dat (clasa POJO) este o entitate.
@Id – indica cheia primara din baza de date relationala.
@Table – indica tabela la care se refera in baza de date.
@Column – indica coloana din baza de date.
@One-To-One – Fiecare instanță entitate se referă la un singur exemplu de o altă entitate. De exemplu, pentru a modela un depozit fizic în care fiecare bin de stocare conține un singur widget, StorageBin și Widget ar avea o relație unu-la-unu. One-la-unu relații folosesc adnotarea javax.persistence.OneToOne pe proprietatea persistente corespunzător sau domeniu.
@One-to-many: Un exemplu entitate poate fi legate de mai multe instanțe ale altor entități. O comandă de vânzări, de exemplu, poate avea mai multe elemente de linie. În cererea de ordine, Ordinul ar avea o relație unu-la-mai-mulți cu LineItem. Unul-la-mai-mulți relații folosi adnotarea javax.persistence.OneToMany pe proprietatea persistente corespunzător sau domeniu.
@Many-to-one: Mai multe instanțe ale unei entități pot fi legate la o singură instanță a celeilalte entități. Aceasta multiplicitate este opusul o relație unu-la-mai-mulți. În exemplul de mai sus, din punctul de vedere al LineItem relația cu Ordinul este de multe-la-unu. -Multe-la-unu relații folosesc adnotarea javax.persistence.ManyToOne pe proprietatea persistente corespunzător sau domeniu.
Opțiunea "Creare Persistence Unit" este selectată în mod implicit. O unitate de persistență este o colecție de clase de entitate care există într-o aplicație. Unitatea de persistență este definit de către un fișier de configurare persistence.xml, care este citit de către furnizorul de persistență. Prin urmare, care să permită această opțiune înseamnă că expertul va genera, de asemenea, un fișier persistence.xml și popula-l cu setările.
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="entityManagerFactory" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://localhost:3306/planet_mobile_data_base" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="admin" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.hbm2ddl.auto" value="validate" />
</properties>
</persistence-unit>
</persistence>
Fig.9 Obiecte persistente (entități) Java si persistence.xml
3.4 Autentificarea utilizatorilor cu ajutorul Spring Security
În această secțiune vom trece prin configurația cea mai de bază de securitate bazate pe web. Acesta poate fi împărțită în mai multe etape:
Actualizarea dependentelor in pom.xml
<!– Spring Security –>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
A furniza configuratia Spring Security cu ajutorul clasei WebSecurityConfigurerAdapter
@ EnableWebSecurity adnotare și WebSecurityConfigurerAdapter lucreze împreună pentru a oferi securitate bazate pe web. Prin extinderea WebSecurityConfigurerAdapter și doar câteva linii de cod, suntem capabili să facă următoarele:
Cere utilizatorului să fie autentificat înainte de a accesa orice adresă URL în cererea noastră
A crea un utilizator cu numele de utilizator "utilizator", parola "password", și rolul de "ROLE_USER"
Activează HTTP de bază și autentificare pe bază de formular,
Spring Security va face în mod automat o pagină de login și logout pagina succes.
@Configuration
@EnableWebSecurity
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
@Qualifier("customAuthenticationProvider")
private AuthenticationProvider authenticationProvider;
@Autowired
private UserService userService;
@Autowired
@Qualifier("customAuthenticationHandler")
private AuthenticationSuccessHandler successHandler;
@Override
public void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth
.authenticationProvider(customAuthenticationProvider());
}
Ignora orice solicitare care începe cu "/ resurces /". Acest lucru este similar cu configurarea http
@ security = none atunci când se utilizează configurația namespace XML.
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**");
}
Pentru referință, acest lucru este similar cu următoarea configurație XML, cu câteva excepții: Arc de securitate va face autentificare, eșec de autentificare URL-ul, și logout URL-uri de succes. De prelucrare de conectare-url-ul va fi prelucrate doar pentru HTTP POST Autentificare, pagina va fi prelucrate doar pentru HTTP GET. Permite oricine (inclusiv utilizatorilor neautentificați) pentru accesul la URL-uri "/login " și "/login?login_error=1".PermitAll (), în acest caz, înseamnă, permite accesul la orice adresă URL care utilizează formLogin ().
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests() .anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.failureUrl("/login?login_error=1")
.successHandler(successHandler)
.and()
.csrf()
.disable()
.headers()
.disable()
.logout().logoutSuccessUrl("/login");
}
@Bean
public AuthenticationProvider customAuthenticationProvider() {
CustomAuthenticationProvider provider = new CustomAuthenticationProvider();
provider.setUserService(userService);
return provider;
}
}
Configurarea springSecurityFilterChain in web.xml
<!– Enables Spring Security –>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
Configurarea CustomAuthentificationHandler cu ajutorul SimpleUrlAuthentificationSuccesHandler – aceasta configurare permite redirectionarea pe paginile corespunzatoare in dependenta de roluri. Ca de exemplu daca un user careva se logheaza ca admin, rolul dat se redirectioneaza pe pagina Admin Dasboard, dar daca se autentifica ca un simplu user atunci il redirectioneaza pe pagina cu UserProfile.
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException {
String userTargetUrl = "/protected/welcomePage";
String adminTargetUrl = "/protected/dashboard";
Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities());
if (roles.contains("admin")) {
getRedirectStrategy().sendRedirect(request, response, adminTargetUrl);
} else if (roles.contains("user")) {
getRedirectStrategy().sendRedirect(request, response, userTargetUrl);
} else {
super.onAuthenticationSuccess(request, response, authentication);
return;
}
Asa arata o forma de logare implicit la Spring Security:
Fig.10 Forma de logare implicita
Forma de autentificare stilizata cu Bootstrap:
Fig.11 Custom Login Form
Forma de autentificare in Pagina JavaServer (JSP):
<form class="navbar-form navbar-right" data-role="form" th:action="@{/login}" method="post">
<div class="form-group">
<input type="text" placeholder="Username" class="form-control" id="username" name="username">
</div>
<div class="form-group">
<input type="password" placeholder="Password" class="form-control" id="password" name="password">
</div>
<button type="submit" class="btn btn-success">Sign in</button>
</form>
Spring Security are propria taglib, care oferă suport de bază pentru accesarea informațiilor de securitate și aplicarea restricțiilor de securitate în JSP-uri. Pentru a utiliza oricare cuvant, trebuie să aveți siguranța taglib declarat în JSP-ul:
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
Această etichetă este utilizată pentru a determina dacă conținutul său ar trebui să fie evaluată sau nu. In Spring Security 3.0, acesta poate fi utilizat în două moduri. Prima abordare folosește o expresie web-securitate, specificată în atributul de acces de tag-ul. Evaluarea expresie va fi delegată WebSecurityExpressionHandler definit în contextul de aplicare (ar trebui să aveți expresii web activat în configurația spațiului de nume <http> pentru a vă asigura acest serviciu este disponibil).
<security:authorize ifAnyGranted="admin">
<ul class="nav nav-sidebar">
<li>
<a class="hoverGreen" href="clients"><spring:message code='clients'/></a>
</li>
<li>
<a class="hoverGreen" href="users"><spring:message code='users'/></a>
</li>
<li>
<a class="hoverGreen" href="accounts"><spring:message code='accounts'/></a>
</li>
</ul>
</ security:authorize>
<security:authorize ifAnyGranted="user">
<ul class="nav nav-sidebar">
<li>
<a class="hoverGreen" href="profile"><spring:message code='profile'/></a>
</li>
</ul>
</security:authorize>
CONCLUZII
Java este un limbaj de programare care se utilizează pentru producerea și dezvoltarea unui număr mare de aplicații software și pentru implementarea acestora în cele mai diferite medii multi-platforms. Platformele Java au o utilizare largă în programare și în soluțiile software aplicate, începând de la cele mai simple dispozitive digitale – mp3 palyere, telefoane mobile – și ajungând până la servere Web complexe și aplicații corporative complexe.
BIBLIOGRAFIE
http://en.wikipedia.org/wiki/Java_%28programming_language%29
http://www.link-academy.com/Academy-_976__77_233
http://www.bitcell.info/resurse-java-pentru-incepatori-t320.html
http://ro.wikipedia.org/wiki/Programare_orientat%C4%83_pe_obiecte
http://www.tutorialspoint.com/spring/spring_web_mvc_framework.htm
Ivor Horton – Beginning Java – O’Reilly Media, Java 7 Edition
http://www.cnblogs.com/fangwenyu/archive/2012/10/11/2716665.html
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html
http://docs.spring.io/spring/docs/2.0.x/reference/introduction.html
http://tiles.apache.org/
http://docs.spring.io/spring-security/site/docs/3.0.x/reference/preface.html
http://projects.spring.io/spring-security/
http://docs.oracle.com/javaee/5/tutorial/doc/bnbqa.html
https://netbeans.org/kb/docs/javaee/ecommerce/entity-session.html
http://docs.oracle.com/javaee/5/tutorial/doc/bnbqa.html
http://docs.spring.io/spring-security/site/docs/3.0.x/reference/taglibs.html
ANEXE
Anexa 1. Reprezentarea paginii web ce contine forma pentru autentificarea utilizatorilor cu ajutorul Spring Security
Fig. 12 Pagina principal
Anexa 2. Reprezentarea paginii web cu rol de admin dupa autentificare
Fig.13 Admin Page
Anexa 3. Reprezentarea paginii web cu rol de admin pentru crearea unui client
Fig.14 Crearea unui client nou
Anexa 4. Reprezentarea paginii web cu rol de admin pentru vizualizarea profilului unui client
Fig. 15 Profilul clientului in pagina cu rol de admin
Anexa 5. Reprezentarea paginii web cu rol de admin pentru editarea unui client
Fig. 16 Editarea clientului in pagina cu rol de admin
Anexa 6. Reprezentarea paginii web cu rol de admin vizualizare tuturor account-uri din baza de date
Fig.17 Admin Page cu vizualizarea account-rilor
Anexa 7. Reprezentarea paginii web cu rol de admin cu vizualizarea user-lor
Fig.18 Admin Page cu vizualizarea user-rilor
Anexa 8. Reprezentarea paginii web cu rol de user pentru vizualizarea profilului fara drepturi de redactare
Fig.19 User Page cu vizualizarea profilului
Anexa 9. Scripturile Bazei de Date Relationale
Anexa 10. Codul Sursa
import java.util.List;
import java.util.Properties;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity;
import org.springframework.security.web.bind.support.AuthenticationPrincipalArgumentResolver;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
import org.springframework.web.servlet.view.tiles2.TilesConfigurer;
import org.springframework.web.servlet.view.tiles2.TilesView;
@Configuration
@ComponentScan(basePackages = {"com.endava.planet.mobile"})
@EnableWebMvc
@EnableWebMvcSecurity
@EnableTransactionManagement
@PropertySource("classpath:application.properties")
@Import({SecurityConfig.class})
public class WebAppConfig extends WebMvcConfigurerAdapter {
private static final String DATABASE_DRIVER = "jdbc.driverClassName";
private static final String DATABASE_PASSWORD = "jdbc.password";
private static final String DATABASE_URL = "jdbc.url";
private static final String DATABASE_USERNAME = "jdbc.username";
private static final String HIBERNATE_DIALECT = "hibernate.dialect";
private static final String HIBERNATE_SHOW_SQL = "hibernate.show_sql";
private static final String ENTITYMANAGER_PACKAGES_TO_SCAN = "com.endava.planet.mobile.enteties";
private static final String HIBERNATE_HBM2DDL = "hibernate.hbm2ddl.auto";
@Resource
private Environment env;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getRequiredProperty(DATABASE_DRIVER));
dataSource.setUrl(env.getRequiredProperty(DATABASE_URL));
dataSource.setUsername(env.getRequiredProperty(DATABASE_USERNAME));
dataSource.setPassword(env.getRequiredProperty(DATABASE_PASSWORD));
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws ClassNotFoundException {
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource());
factoryBean.setPersistenceUnitName("planetMobile");
factoryBean.setJpaVendorAdapter(jpaVendorAdapter());
factoryBean.setJpaProperties(hibProperties());
factoryBean.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN);
return factoryBean;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
adapter.setShowSql(true);
adapter.setGenerateDdl(true);
adapter.setDatabase(Database.HSQL);
return adapter;
}
private Properties hibProperties() {
Properties properties = new Properties();
properties.put(HIBERNATE_DIALECT, env.getRequiredProperty(HIBERNATE_DIALECT));
properties.put(HIBERNATE_SHOW_SQL, env.getRequiredProperty(HIBERNATE_SHOW_SQL));
properties.put(HIBERNATE_HBM2DDL, env.getRequiredProperty(HIBERNATE_HBM2DDL));
return properties;
}
@Bean
public JpaTransactionManager transactionManager() throws ClassNotFoundException {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
return transactionManager;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("resources/");
registry.addResourceHandler("/css/**").addResourceLocations("resources/css/").setCachePeriod(31556926);
registry.addResourceHandler("/js/**").addResourceLocations("resources/js/").setCachePeriod(31556926);
registry.addResourceHandler("/fonts/**").addResourceLocations("resources/fonts/").setCachePeriod(31556926);
registry.addResourceHandler("/img/**").addResourceLocations("resources/img/").setCachePeriod(31556926);
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public ViewResolver viewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
//InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setViewClass(TilesView.class);
//resolver.setPrefix("/WEB-INF/views/");
//resolver.setSuffix(".jsp");
resolver.setOrder(0);
//resolver.setViewClass(JstlView.class);
return resolver;
}
// @Override
// public void addViewControllers(ViewControllerRegistry registry) {
//registry.addViewController("/welcomePage").setViewName("welcomePage");
// registry.addViewController("/").setViewName("login");
// registry.addViewController("/protected/dashboard").setViewName("protected/dashboard");
// registry.addViewController("/protected/displayClients").setViewName("protected/displayClients");
// registry.addViewController("/admin/list").setViewName("admin/list");
// registry.addViewController("/user/profile").setViewName("user/profile");
// registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
// }
@Bean
public TilesConfigurer tilesConfigurer() {
TilesConfigurer tilesConfig = new TilesConfigurer();
tilesConfig.setDefinitions(new String[] {"/WEB-INF/tiles.xml"});
//tilesConfig.setCheckRefresh(true);
return tilesConfig;
}
@Bean
public ResourceBundleMessageSource messageSource() {
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.setBasename("i18n/messages"); //i18n � name of the folder, messages � name of the property file
source.setUseCodeAsDefaultMessage(true);
return source;
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new AuthenticationPrincipalArgumentResolver());
}
}
BIBLIOGRAFIE
http://en.wikipedia.org/wiki/Java_%28programming_language%29
http://www.link-academy.com/Academy-_976__77_233
http://www.bitcell.info/resurse-java-pentru-incepatori-t320.html
http://ro.wikipedia.org/wiki/Programare_orientat%C4%83_pe_obiecte
http://www.tutorialspoint.com/spring/spring_web_mvc_framework.htm
Ivor Horton – Beginning Java – O’Reilly Media, Java 7 Edition
http://www.cnblogs.com/fangwenyu/archive/2012/10/11/2716665.html
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html
http://docs.spring.io/spring/docs/2.0.x/reference/introduction.html
http://tiles.apache.org/
http://docs.spring.io/spring-security/site/docs/3.0.x/reference/preface.html
http://projects.spring.io/spring-security/
http://docs.oracle.com/javaee/5/tutorial/doc/bnbqa.html
https://netbeans.org/kb/docs/javaee/ecommerce/entity-session.html
http://docs.oracle.com/javaee/5/tutorial/doc/bnbqa.html
http://docs.spring.io/spring-security/site/docs/3.0.x/reference/taglibs.html
ANEXE
Anexa 1. Reprezentarea paginii web ce contine forma pentru autentificarea utilizatorilor cu ajutorul Spring Security
Fig. 12 Pagina principal
Anexa 2. Reprezentarea paginii web cu rol de admin dupa autentificare
Fig.13 Admin Page
Anexa 3. Reprezentarea paginii web cu rol de admin pentru crearea unui client
Fig.14 Crearea unui client nou
Anexa 4. Reprezentarea paginii web cu rol de admin pentru vizualizarea profilului unui client
Fig. 15 Profilul clientului in pagina cu rol de admin
Anexa 5. Reprezentarea paginii web cu rol de admin pentru editarea unui client
Fig. 16 Editarea clientului in pagina cu rol de admin
Anexa 6. Reprezentarea paginii web cu rol de admin vizualizare tuturor account-uri din baza de date
Fig.17 Admin Page cu vizualizarea account-rilor
Anexa 7. Reprezentarea paginii web cu rol de admin cu vizualizarea user-lor
Fig.18 Admin Page cu vizualizarea user-rilor
Anexa 8. Reprezentarea paginii web cu rol de user pentru vizualizarea profilului fara drepturi de redactare
Fig.19 User Page cu vizualizarea profilului
Anexa 9. Scripturile Bazei de Date Relationale
Anexa 10. Codul Sursa
import java.util.List;
import java.util.Properties;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity;
import org.springframework.security.web.bind.support.AuthenticationPrincipalArgumentResolver;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
import org.springframework.web.servlet.view.tiles2.TilesConfigurer;
import org.springframework.web.servlet.view.tiles2.TilesView;
@Configuration
@ComponentScan(basePackages = {"com.endava.planet.mobile"})
@EnableWebMvc
@EnableWebMvcSecurity
@EnableTransactionManagement
@PropertySource("classpath:application.properties")
@Import({SecurityConfig.class})
public class WebAppConfig extends WebMvcConfigurerAdapter {
private static final String DATABASE_DRIVER = "jdbc.driverClassName";
private static final String DATABASE_PASSWORD = "jdbc.password";
private static final String DATABASE_URL = "jdbc.url";
private static final String DATABASE_USERNAME = "jdbc.username";
private static final String HIBERNATE_DIALECT = "hibernate.dialect";
private static final String HIBERNATE_SHOW_SQL = "hibernate.show_sql";
private static final String ENTITYMANAGER_PACKAGES_TO_SCAN = "com.endava.planet.mobile.enteties";
private static final String HIBERNATE_HBM2DDL = "hibernate.hbm2ddl.auto";
@Resource
private Environment env;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getRequiredProperty(DATABASE_DRIVER));
dataSource.setUrl(env.getRequiredProperty(DATABASE_URL));
dataSource.setUsername(env.getRequiredProperty(DATABASE_USERNAME));
dataSource.setPassword(env.getRequiredProperty(DATABASE_PASSWORD));
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws ClassNotFoundException {
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource());
factoryBean.setPersistenceUnitName("planetMobile");
factoryBean.setJpaVendorAdapter(jpaVendorAdapter());
factoryBean.setJpaProperties(hibProperties());
factoryBean.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN);
return factoryBean;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
adapter.setShowSql(true);
adapter.setGenerateDdl(true);
adapter.setDatabase(Database.HSQL);
return adapter;
}
private Properties hibProperties() {
Properties properties = new Properties();
properties.put(HIBERNATE_DIALECT, env.getRequiredProperty(HIBERNATE_DIALECT));
properties.put(HIBERNATE_SHOW_SQL, env.getRequiredProperty(HIBERNATE_SHOW_SQL));
properties.put(HIBERNATE_HBM2DDL, env.getRequiredProperty(HIBERNATE_HBM2DDL));
return properties;
}
@Bean
public JpaTransactionManager transactionManager() throws ClassNotFoundException {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
return transactionManager;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("resources/");
registry.addResourceHandler("/css/**").addResourceLocations("resources/css/").setCachePeriod(31556926);
registry.addResourceHandler("/js/**").addResourceLocations("resources/js/").setCachePeriod(31556926);
registry.addResourceHandler("/fonts/**").addResourceLocations("resources/fonts/").setCachePeriod(31556926);
registry.addResourceHandler("/img/**").addResourceLocations("resources/img/").setCachePeriod(31556926);
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public ViewResolver viewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
//InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setViewClass(TilesView.class);
//resolver.setPrefix("/WEB-INF/views/");
//resolver.setSuffix(".jsp");
resolver.setOrder(0);
//resolver.setViewClass(JstlView.class);
return resolver;
}
// @Override
// public void addViewControllers(ViewControllerRegistry registry) {
//registry.addViewController("/welcomePage").setViewName("welcomePage");
// registry.addViewController("/").setViewName("login");
// registry.addViewController("/protected/dashboard").setViewName("protected/dashboard");
// registry.addViewController("/protected/displayClients").setViewName("protected/displayClients");
// registry.addViewController("/admin/list").setViewName("admin/list");
// registry.addViewController("/user/profile").setViewName("user/profile");
// registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
// }
@Bean
public TilesConfigurer tilesConfigurer() {
TilesConfigurer tilesConfig = new TilesConfigurer();
tilesConfig.setDefinitions(new String[] {"/WEB-INF/tiles.xml"});
//tilesConfig.setCheckRefresh(true);
return tilesConfig;
}
@Bean
public ResourceBundleMessageSource messageSource() {
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.setBasename("i18n/messages"); //i18n � name of the folder, messages � name of the property file
source.setUseCodeAsDefaultMessage(true);
return source;
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new AuthenticationPrincipalArgumentResolver());
}
}
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Elaborarea Unui Portal Internet cu Utilizarea Tehnologiilor Open Source (ID: 149776)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
