Limbajul de programare Java este unul dintre cele mai populare limbaje orientate obiect,având următoarele catacteristici: ​ Dinamicitate ​: retine… [611906]

LUCRARE DE LICENTA

CUPRINS

1.
INTRODUCERE

1. Tehnologii folosite

1.1 Java

Limbajul de programare Java este unul dintre cele mai populare limbaje orientate

obiect,având următoarele catacteristici:


Dinamicitate
​: retine cantități substantiale de infomatii la runtime


Simplitatea
​: sintaxă similară cu cea din C/C++, simplificată

​Robustetea : nu permite suprascrierea memoriei prin renuntarea la pointeri,

ceea

ce poate preveni coruperi de date. Nu permite moștenirea multiplă iar

dealocareamomeriei reprezintă o sarcină de care se ocupă o procedură ce

rulează în fundal („Garbage Collector”)


Complet orientat obiect


Portabilitatea
​: se poate executa pe orice platformă; poate fi transferat si pe

web

(appleturi)

Conceptul de pointer nu există în Java, însă se bazează pe referințe pentru a

păstraadresele de memorie ale obiectelor . Alt concept care lipsește este

acela de destructor , fiindintrodus Garbage Collector-ul. Desi monstenirea

multiplă este eliminată, programatorul poate simula acest lucru prin

mostenirea înlăntuită. Spre deosebire de multe limbaje, Java este și

interpretat și compilat, caracteristică ce îi redă portabilitatea. În procesul de

compilare Java prezintă doi pasi mari. În primul, codul sursă este transformat

în bytecode, urmând ca în al doilea pas, masina virtuală Java (JVM) să

interpreteze acest cod intermediar.

Sun Microsystems (achiziționat ulterior de Oracle) a dezvoltat patru ediții

Java, țintindspre diferite medii de dezvoltare :

Java Card, pentru carduri inteligente

Java Micro Edition, pentru medii cu resurse limitate

Java Standard Edition, pentru stațiile de lucru comune

Java Enterprise Edition, pentru aplicațiile enterprise

10

Figura 1: Java-portabilitate pe diferite platforme

1

1.2 Spring MVC Framework

Biblioteca Spring MVC este una dedicate W eb-ului, oferind o arhitectură

Model-V iew-Controller și componente ce ajută în crearea de aplicații web flexibile.

Șablonul MVC ajută în separarea diferitelor aspecte ale unei aplicații, în timp ce

menține un cuplaj slab între acesteelemente (nu există dependințe puternice).

Acestă bibliotecă se bazează pe un servlet, numit DispatcherServlet, care preia

toate cererile și răspunsurile HTTP . În diagrama de mai jos, se ilustrează cum

servletul procesează ocerere.

Figura 2: Fluxul realizat de DispatcherServlet

2

1
​Sursa
:
http://www.slideshare.n et/laxmanpuri71/java-byte-code-virtual-machine

2
​Sursa
:

http://www.tutorialspoint.com/spring/spring_web_mvc_framework.htm

11

1.3 Apache Tomcat

Apache Tomcat este un server-web si container de servleturi open-source.

Acestaimplementează diverse specificatii Java Enterprise Edition, precum Java

Servlet, Java ServletPages, W ebSocket, etc. Prezintă trei componente:


Catalina
​– este numele containerului de servlet, a cărui functionalitate este

de aimplementa specificațiile Sun Microsystems pentru servlet și JSP (Java

ServerPages). Catalina este integrat în orice tip de platformă unde informatiile

necesare autentificării sunt deja create și mentinute


Coyote
​– Această componentă ascultă pentru conexiuni noi la server pe un

port TCP si trimite cererea către motorul Tomcat pentru a o procesa, clientul

primitând astfel un răspuns. Ca și server web, suportă protocolul HTTP 1.1,

fiind componenta de conectare. Permie oricărui container JSP să se comporte

ca unserver web.


Jasper
​– cunoscut si ca „T omcat JSP Engine”, este motorul folosit de

Tomcatpentru fișierele JSP , în sensul că parsează le parsează si le

compilează în cod Java ca și servleturi ce pot fi folosite de Catalina.

Schimbările in JSP-uri suntdetectate, si salvate automat, ajutând

dezvoltatorul, întrucât serverul nu maitrebuie restartat.

1.4 Apache Maven

Maven este un instrument pentru automatizarea build-ului, utilizat în proiecte

Java. Acesta descrie constructia unei aplicatii, adresându-se totodată si

asupra dependentelor (pachetele de care are nevoie proiectul Java). Aplicatia

este construită pe baza unui fisier XML, numit POM (Project Object Model),

ce specifică dependentele către alte module sau componenteexterne. Asadar,

la build, toate bibliotecile necesare sunt preluate din cache-ul local iar în cazul

în care acestea lipsesc, sunt descăcate automat.

Spre deosebire de tehnologiile similare (Ant, Gradle), Maven introduce

conceptele deartifact, repository , ceea că ajută mult la depănare, versionare

și documentare a aplicatiei.

Orice proiect Maven are o structură predefinită, evidentiată mai jos:

12

1.5 ORM-ul Hibernate

Figura 3: Structura unui proiect Maven

Hibernate este o bibliotecă open-source ce simplifică dezvoltarea aplicațiilor Java

care interacționează cu bazele de date. Acesta oferă o soluție de mapare a unui

model orientat obiect în bazele de date clasice, fiind independent de sistemul de

gestiune a bazei de date. Reprezintă oimplementare a interfeței JP A (Java

Persistence API), însemnând că poate fi integrat în orice sistem ce suportă JP A

(aplicații pe platformele Java SE, EE, etc).

O caracteristică enetială o reprezintă performanță, hibernate având diverse strategii

defetching, precum inițializarea leneșă (un obiect este extras din baza de date, doar

atunci când estecerut).

Hibernate are de asemenea și propriul limbaj pentru interogări, numit HQL

(HibernateQuery Language), ce permite scrierea de cod SQL utilizând obiectele

Java. În plus, bibliotecagenerează majoritatea codului SQL în timpul instantierii

obiectului, nu la runtime.

1.6

JavaServer Pages (JSP)

Jsp este o tehnologie ce rulează pe partea de server și ajută în crearea dinamică de

conținut HTML. O particularitate a acestei tehnologii este că permite inserarea de

scriplet-uri (cod Java) prin delimitatorii <%= […] %>

Un compilator JSP este un program care parsează JSP-urile și le transformă în

servleturiJava executabile. Randarea codului HTML la nivel de server poate

reprezenta un avantaj,

13

întrucât vă avea aceleași performate indiferent de platforma clientului (dat fiind faptul

că pe mobil, operațiile DOM sunt mult mai lente).

1.7

jQuery

jQuery este unul dintre cele mai populare biblioteci de JavaScript, conceput pentru

aușura și îmbunătăți procese asupra arborelui DOM, cereri AJAX, animații, etc.

Javascript este un limbaj de programare orientat obiect bazat pe conceptul

prototipurilor , rulat direct în browser . Are rol în introducerea unor funcționalități în

paginile web.

Motivul alegerii jQuery se datorează faptului că scurtează substanțial atât timpul de

dezvoltare, precum și lungimea codului JavaScript.

1.8

Materialize CSS

Materialize este o bibliotecă de CSS, ce ajută în crearea de site-uri și aplicații

web.Conține șabloane bazate pe HTML si CSS pentru tipografie, formulare, butoane

navigare și alte elemente de interfață precum și extensii opționale JavaScript. Se

bazează pe ideea de „Material Design”, promovată de Google și utilizată în

majoritatea aplicațiilor lor .

1.9 Apache Tiles

Apache Tiles este un „templating framework” pentru aplicațiile Java moderne. Se

bazează pe șablonul de proiectare Composite și ajută la dezvoltarea paginilor web.

Șablonul Composite sugerează că un grup de obiecte similare să fie tratate ca

aceeași instanță a unui obiect. În cazul paginilor web, în layout (header și footer)

sunt introduse JSP-urile returnate de Controller.

<

tiles:insertAttribute

name

=

"body"

/>

Inserarea de JSP-uri se face prin:

<

put-attribute

name

=

"body"

value

=

"/WEB-INF/views/main/register.jsp"

/>
​Asadar, la schimbarea

continutului paginei web, header-ul si footer-ul nu vor mai fi reîncărcate.

14

2. Arhitectura aplicatiei

Aplicatia se bazează pe o arhitectură „server-side”. În modulul de server , se remarcă

3 maristraturi:


Presentation Layer


Business Layer


Data Access Layer

Fiecare strat „știe” foarte puțin din codul celorlalte, doar cât este suficient

pentru a realizasarcinile necesare. De menționat faptul că Presentation Layer

nu poate comunica direct cu DataAcces Layer (și invers). Comunicarea se

realizează strict prin Business Layer .

Figura 4: Arhitectura aplicatiei
3

2.1

Presentation Layer

Partea de prezentare este organizată pe baza șablonului MVC

(Model-View-Controller), unde este de mare ajutor biblioteca Spring MVC. Cererea

HTTP este preluată de controller , care la rândul său decide dacă trebuie să apeleze

stratul de business. Dacă acest lucru nu este necesar ,

3
​Sursa
:
http://terasolunaorg.gith ub.io/guideline/1.0.1.RELEASE/en/Overview/SpringMVCOverview.html

15

controller-ul va returna direct un view . Însă, dacă în caz contrar , va interacționa cu

Business Layer-ul, care la rândul său va comunica mai departe cu al treilea modul.

Toate controller-ele definite de dezvoltator , în Spring, trebuie să implementeze

interfata Controller (@Controller) sau să extindă AbstractController . Partea de model

din layer nu se referă la entitățile utilizate în DOA, ci la modelul pe care îl poate

returna un controller . Acesta este practic un „map” ce va fi atașat unui view . În

JSP-uri, acest model poate fi accesat prin sintaxa

${cheieMap}

.

2.2 Business Layer

Acest layer conține funcționalitățile de bază ale aplicației. Practic, acest modul

determină cum informațiile sunt create, afișate, stocate și schimbate, primind

comenzi de la PresentationLayer și apelând mai departe Data Access Layer .

În acest modul, regăsim clasele adnotate cu @Service, fiind un specific al

framework-ului Spring. Acest lucru indică faptul că o clasă respectă practica DDD

(Domain driven design),unde modelul rămâne încapsulat pe partea de server , fiind

reprezentat doar la nivel de servicii șirepository-uri (persistentă a datelor). Aceste

servicii respectă principiul singurei responsabilităti. În cazul aplicației noastre, există

câte un serviciu pentru: fluxul jocului, upload-ul imginilor , procesarea imaginilor ,

trimitere de mail-uri, etc. Gruparea serviciilor , în așa fel încât să aibă fiecare o

singură responsabilitate, reduce impactul schimbărilor ulterioare, codul fiind mult mai

ușor de menținut.

2.3 Data Access Layer


DAO:
​Data Acces Object este de fapt un șablon de proiectare folosit în separarea

API- urilor low-level de accesare a datelor de serviciile business high-level. În

general, șablonul este asociat cu aplicațiile Java EE și bazele de date relaționare,

accesate prin JDBC, fiind specificat în ghidul de practici bune al „Sun Microsystems”.

Acesta încapsulează toate accesele la baza de date. DAO realizează managementul

conexiunii cusursa de date pentru a obține și pastra informații. Este format din 3

componente:
​interfața DAO (definește operațiile standard ce pot fi realizate pe

model),
​implementarea interfeței DAO (implementarea interfeței de mai sus),

obiectele Model
​(POJO-uri, conținând metode set și get). Mapând apelurile aplicației

asupra acestui strat, DAO oferă operatii cu date specifice, însă nu expune informații

sensibile despre baza dedate.

Avantajele folosirii acestui șablon au impact în separarea a două părți importante ale

aplicației (Baza de date – Data Access Layer) care ar trebui să se dezvolte

independent, neștiind prea multe una despre cealaltă. Așadar , modificări asupra

logicii de acces a obiectelor se pot realiza în DAO, însă schimbări în partea de

persistență nu ar trebui să influențeze clasele DAO, în cazul în care interfața este

corect implementată.

16

Figura 5 Schema DAO

4

​Entitătile: reprezintă obiectele model, menționate mai sus. Aceasta sunt evidențiate

prinadnotarea @Entity, fiind mapate cu tabelele din baza de date prin @Table. O

coloană este mapata prin @Column, fiind de fapt un obiect Java, remarcându-se că

numele acesteia nu trebuie să coincidă cu cel al coloanei din tabel.

2.4 Baza de date

4
​Sursa
:
http://www.oracle.com/ ocom/groups/public/@otn/documents/digitalasset/146804.jpg

Figure 6 Schema bazei de date

17

3. Implementarea aplicatiei

3.1 web-context.xml

Acest fișier conține detaliile de configurare care ajută serverul Tomcat, oferind mai

multe informații (menționate mai jos).

<

beans

xmlns

=

"http://www.springframework.org/schema/beans"

xmlns:xsi

=

"http://www.w3.org/2001/XMLSchema-instanc
e"

xmlns:p

=

"http://www.springframework.org/schema/p"

xmlns:mvc

=

"http://www.springframework.org/schema/mvc"

x
si:schemaLocation

=

"http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd"

> <

mvc:annotation-driven

/>

<

mvc:resources

mapping

=

"/resources/**"

location

=

"/resources/"

/>

<

mvc:interceptors

>

<

bean

class

=

"interceptor.RequestInterceptor"

/>

</

mvc:interceptors

>

<

bean

id

=

"viewResolver"

class

=

"org.springframework.web.servlet.view.UrlBasedViewResolver"

> <

property

name

=

"viewClass"

value

=

"org.springframework.web.servlet.view.tiles3.TilesView"

/>

</

bean

>

<

bean

class

=

"org.springframework.web.servlet.view.tiles3.TilesConfigurer"

id

=

"tilesConfigurer"

>

<

property

name

=

"definitions"

> <

list

>

<

value

>

/WEB-INF/views/**/tiles-definitions.xml

</

value

>

</

list

>

</

property

>

</

bean

>

</

beans

>

Sunt specificate unde sunt plasate resursele aplicației, putand fi accesate doar din

această locație. Este menționat un interceptor care filtrează toate cererile din

aplicație, fiind utilizat pentru controlul accesului și nu numai. De asemenea,

web-context.xml specifică (printr-unpattern) și locul în care se găsesc definițiile

pentru Apache Tiles.

3.2 application-context.xml

Reprezintă interfața centrală dintr-o aplicație Spring, ce conține informații de

configurarea acesteia. La run-time este read-only , dar poate fi reîncărcat dacă este

necesar . ApplicationContext poate încărca java beans, la cerere le poate distribui, și

le poate lega împreună. Prezintă interes deoarece adaugă funcționalităti specifice

aplicațiilor enterprise.

18

<?

xml

version

=

"1.0"

encoding

=

"UTF-8"

?>

<

beans

xmlns

=

"http://www.springframework.org/schema/beans"

xmlns:xsi

=

"http://www.w3.org/2001/XMLSchema-instance"

xmlns:jee

=

"http://www.springframework.org/schema/je
e"

xmlns:tx

=

"http://www.springframework.org/schema/tx"

xmlns:context

=

"http://www.springframework.org/schema/context"

xsi:schemaLocation

=

"http://www.springframewo
rk.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/jee

http://www.springframework.org/schema/jee/spring-jee-3.1.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.1.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd"

> <

context:component-scan

base-package

=

"demo"

/>

<

context:annotation-config

/>

<

bean

id

=

'entityManagerFactory'

class

=

'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean'

> <

property

name

=

"persistenceUnitName"

value

=

"Skelet"

/>

<

property

name

=

'dataSource'

ref

=

'dataSource'

/>

<

property

name

=

"jpaVendorAdapter"

>

<

bean

id

=

"jpaAdapter"

class

=

"org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"

>

<

property

name

=

"databasePlatform"

value

=

"org.hibernate.dialect.PostgreSQLDialect"

/>

<

property

name

=

"generateDdl"

value

=

"true"

/> <

property

name

=

"showSql"

value

=

"true"

/>

<

property

name

=

"format_sql"

value

=

"true"

></

property

>

</

bean

>

</

property

>

</

bean

>

<

bean

id

=

"txManager"

class

=

"org.springframework.orm.jpa.JpaTransactionManager"

> <

property

name

=

"entityManagerFactory"

ref

=

"entityManagerFactory"

/>

</

bean

>

<

tx:annotation-driven

transaction-manager

=

"txManager"

/>

</

beans

>

În acest fisier este specificat:

Locul unde se găsesc toate clasesle ce conțin adnotările @Controller ,

@Repository,@Service, etc (

base-package

=

"demo"
​). În cazul în care aceste clase

sunt găsite, Spring le va înregistra în „bean-factory”

beanul entityManagerFactory , este cel care se ocupă de proprietățile JP A

(Java Persistence API), făcând referire la proprietatea
'dataSource'.

Aceasta

conțineinformații ce ajută la stabilirea conexiunii cu baza de date.

Beanul txManager: este menționată clasa
JpaTransactionManager
​care este responsabilă

de realizarea tranzacțiilor de informații între baza de date și aplicație. Având aceste

configurări, în implementările DAO putem injecta entityManagerul:

@PersistenceContext

private

EntityManager

em

;

19

3.3 pom.xml

Project Oriented Mode reprezintă fișierul de configurație a bibliotecii Maven. Contine

informațiile necesare bibliotecii să construiască un proiect. Printre elemente se

numără dependențele proiectului, versiunea proiectului, numele dezvoltatorilor ,

descriera, etc.

Un astfel de fișier trebuie să conțină groupId (id-ul grupului proiectului, de regulă

fiindunic pe companie), artifactId (id-ul proiectului), version (versiunea proiectului).

<?

xml

version

=

"1.0"

encoding

=

"UTF-8"

?>

<

project

xmlns

=

"http://maven.apache.org/POM/4.0.0"

xmlns:xsi

=

"http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=

"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"

>

<

modelVersion

>

4.0.0

</

modelVersion

>

<

groupId

>

demo

</

groupId

>

<

artifactId

>

demo

</

artifactId

>

<

version

>

1.0

</

version

>

<

packaging

>

war

</

packaging

>

<

name

>

Skelet

</

name

>

<

description

>

Skelet POM

</

description

>

<

repositories

>

<

repository

>

<

id

>

OpenIMAJ maven releases repository

</

id

>

<

url

>

http://maven.openimaj.org

</

url

>

</

repository

>

<

repository

>

</

repositories

>

<

dependency

>

<

groupId

>

com.fasterxml.jackson.core

</

groupId

>

<

artifactId

>

jackson-core

</

artifactId

>

<

version

>

2.3.0

</

version

>

</

dependency

>

În pom-ul proiectului avem specificat goupId-ul și artifactId-ul ca fiind „demo”, cu

versiunea 1.0. De asemenea este menționat modul de împachetare al proiectului, în

acest cazfiind war (web application archive). Elementul „repository” marchează (în

acest caz) un repository remote. Acest lucru este folositor în momentul în care

Maven nu găsește dependențele în repository-ul central. Cum biblioteca OpenIMAJ

nu se regăseste acolo, Maven va căuta în urlprecizat mai sus.

Pentru exemplu, este specificată și o dependență, în cazul nostru, biblioteca

Jackson(responsabilă de conversia automată din obiecte Java în obiecte JSON). La

momentul build-ului,dacă această bibliotecă nu se găsește în cache-ul local, Maven

o va descărca și o va injecta ladependențele proiectului.

3.3 Maparea unei entitati cu baza de date

Acest lucru se realizează cu ajutorul bibliotecii de persistență Hibernate. O

clasă(entitate) va corespunde unui tabel din baza de date.

@Entity

@Table

(name =

"Quest"

)

@Inheritance

(strategy = InheritanceType.

SINGLE_TABLE

)

20

@DiscriminatorColumn

(name =

"type"

, discriminatorType = DiscriminatorType.

STRING

)

@DiscriminatorValue

(value =

"quest"

)

public class

Quest {

@Id

private

String

id

;

@Column

(name =

"difficulty"

)

private

String

difficulty

;

@Column

(name =

"description"

)

private

String

description

;

@OneToOne

@JoinColumn

(name =

"hint_id"

)

@Cascade

(CascadeType.

ALL

)

private

Hint

hint

;

@Column

(name =

"info"

)

private

String

info

;

@Column

(name =

"next_quest"

)

private

String

nextQuest

;

@Column

(name =

"available"

)

private boolean

available

;

@Column

(name =

"date"

)

private

Date

date

=

new

Date();

Prin adnotarea @Entity marcăm clasa „Quest” ca fiind un bean, fiind mapată de

tabelul „Quest” prin

@Table

(name =

"Quest"

).
​O regulă a Hibernate-ului este ca orice

entitate să aibă o cheie primară, specificată prin @Id. @Column se folosește pentru

a face maparea dintre proprietatea clasei și coloanele tabelului. De menționat faptul

că numele tabelului, coloanei nutrebuie să corespundă cu numele clasei, respectiv

proprietății, aceste putând să difere prin

(name = „nume tabel/coloană”).

Entitatea de mai sus reprezintă un caz mai special, deoarece toate clasele care o

vorextinde, nu vor avea un tabel separat. V alorile acestora vor fi păstrate tot în acest

tabel, fiind adăugate doar noi coloane (
@Inheritance

(strategy = InheritanceType.

SINGLE_TABLE

)
​).@DiscriminatorColumn va introduce o nouă coloană în tabel (nu și o

nouă variabila java), ce va avea valoarea sugerată de @DiscrimatorV alue. Așadar ,

subclasele nu vor mai avea adnotarea @T able, însă obligatoriu este să conțină

valoarea discriminatorului.

@Entity

@DiscriminatorValue

(

"localization_quest"

)

Public class

LocalizationQuest

extends

Quest {[..]}

Evident, vor exista coloane cu valori nule, corespunzătoare unei anumite subclase.

Însă, un avantaj semnificativ îl reprezintă faptul că la extragerea unei subclase,

join-ul nu mai este necesar pentru a obține informații din superclasă.

21

3.4 Extragerea informatiilor din baza de date

@PersistenceContext

private

EntityManager

em

;

@Override

public

List<User> getAdmins() {

Query

query

=

em

.createQuery(

"from User user where user.access='admin'"

);

try

{

return

(

query

.getResultList()); }

catch

(NoResultException

e

) {

} }

e

.printStackTrace();

return null

;

Acesta este un fragment de cod din implentarea unui DAO, reprezentând

extragereautilizatorilor care au accesul de admin. EntityManager este o interfață cu

metode pentru interacționarea cu contextul de persistență. Funcția createQuery

primește ca parametru un Stringîn formal HQL (Hibernate Query Language).

Diferența dintre SQL și HQL este ca ultimul menționat face referire la obiecte Java și

nu la elemente specifice bazei de date.

Un DAO este injectat într-un serviciu/controller prin adnotarea @Autowired. Practic,

în acest fel, rolul instantierii clasei DAO este preluat de Spring și nu de dezvoltator .

O sintaxă precum cea de mai jos este suficientă pentru a avea un bean Spring

intializat.

@Autowired

UserDAO

userDAO

;

Adnotarea se bazează pe conceptul de „Dependency Injection”, fiind un șablon

deproiectare ce implementează „Inversion of Control”. O dependență este un obiect

de cerut (în cazul nsotru, un serviciu sau DAO). O injecție presupune pasarea

dependenței la un obiect dependent care ar avea nevoie de ea. Practic, în loc de a

avea obiecte care creează dependențe, acestea sunt pasate în constructor sau

printr-un set.

„’Dependency Injection’ is a 25-dollar term for a 5-cent concept. […] Dependency

injectionmeans giving an object its instance variables” – James Shore

5

.

5
​Sursa
:
http://www.jamesshore. com/Blog/Dependency-Injection-Demystified.html

22

3.5 Relatia URL – contoller

Maparea dintre controller si url se realizează astfel:

@Controller

@RequestMapping

(value =

"/account"

)

public class

AccountController {

@RequestMapping

(value=

"/userProfile"

, method =

RequestMethod.

G E T

)

public

String displayUserProfile(

@RequestParam

String

id

){

[…]

}

}

Această metodă mapează adrese de genul: „/account/userProfile? Id= [idUser]”. În

cazul în care nu există o mapare pentru URL-ul tastat în browser , utilizatorul va fi

direcționat pe o pagină 404, fiindui specificat că pagina căutată nu există. Prinderea

erorii HTTP 404 se realizezăprin codul de mai jos (din web.xml), fiind făcută

redirectarea către o pagină proprie.

<

error-page

>

<

error-code

>

404

</

error-code

> <

location

>

/WEB-INF/views/error/404.jsp

</

location

>

</

error-page

>

3.6 Autentificarea

Utlizatorul are posibilitatea să se autentifice printr-un formular clasic, dar mai

interesantă este cea prin rețelele sociale (Facebook, Twitter , Google+). Acest lucru

se realizează cu ajutorul servleturilor . Un servlet este o clasă Java care extinde

capabilitățile unui server . Acesta preia deregulă cereri http, putând și să răspundă la

ele. Este practic, o componentă web, deploy-ată pe server cu scopul de a crea

pagini web dinamice.

În primul rând avem un buton ce apelează servletul:

<

form

action

=

"facebookLogin"

method

=

"post"

>

<

button

name

=

"subject"

type

=

"submit"

class

=

"myButton facebookButton"

>

<

img

src

=

"http://techulus.com/buttons/fb.png"

/> </

button

>

</

form

>

Actiunea „facebookLogin” este asociată unui servlet in web.xml, astfel:

<

servlet

>

<

servlet-name

>

FBLoginServlet

</

servlet-name

>

<

servlet-class

>

facebook.login.domain.LoginServlet

</

servlet-class

>

</

servlet

>

<

servlet-mapping

>

<

servlet-name

>

FBLoginServlet

</

servlet-name

>

<

url-pattern

>

/facebookLogin

</

url-pattern

>

</

servlet-mapping

>

Mai sus este declarat servletul „FbLoginServlet”, mapat cu

clasafacebook.login.domain.LoginServlet, având ca acțiune „/facebookLogin”. Odată

apăsat butonulde autentificare, acțiunea se mută în metoda doGet a servletului. În

acest moment se apelează un serviciu oferit de biblioteca OAuth ce securizează

tranzacția de informații dintre serverul

23

aplicației și serverele Facebook. Dacă utlizatorul acceptă să ofere informațiile

personale, aplicația va dispune de numele, email-ul, id-ul și poza de profil ale

acestuia. După efectuarea tranzacției, dacă id-ul utilizatorului nu se regăsește în

baza de date, acesta este salvat, trimițându-se și un mail de bun venit.

Similar Posts

  • Comparative study regarding the tribological behaviour of [608135]

    Comparative study regarding the tribological behaviour of lysine and isoleucine modified epoxy matrix Iuliana Bălan1, Radu Bosoancă1,2, Ana Că pățină1, Iulia Graur1,2, Claudia Ungureanu1 1 Research amd Development Center for Thermoset Composites”Dunărea de Jos” University, Galati, ROMÂNIA 2Diagnose and Measurement Group , Galați, ROMÂNIA [anonimizat] Abstract . The aim of this study is to point…

  • Varga E. Árpád Forrás:www.kia.hukonyvtarerdelyerd2002csetn02.pdf [623118]

    Varga E. Árpád Forrás:www.kia.hu/konyvtar/erdely/erd2002/csetn02.pdf Krassó-Szörény megye településeinek etnikai (anyanyelvi/nemzetiségi) adatai 1880-2002 A csíkszeredai Pro -Print Kiadónál 2000 -ben „Erdély etnikai és felekezeti statisztikája. III. Arad, Krassó -Szörény és Temes megye. Népszámlálási adatok 1869–1992 között” címmel megjelent kötet vonatkozó részének javított és frissebb adatokkal bővített elektronikus változata. Utolsó módosítás: 2008. november 2. Jelmagyarázat . Nincs adat….

  • Potențialul turistic al Municipiului Târgu Jiu Coordonator științific Conf. Dr. Iuliana Vijulie Absolvent Bertea-Duțu Răzvan Beniamin București… [304762]

    UNIVERSITATEA DIN BUCUREȘTI FACULTATEA DE GEOGRAFIE SPECIALIZAREA GEOGRAFIE Potențialul turistic al Municipiului Târgu Jiu Coordonator științific Conf. Dr. Iuliana Vijulie Absolvent: [anonimizat]-Duțu Răzvan Beniamin București Septembrie 2016 Introducere Capitolul 1 – Aspecte generale 5 1.1. Așezarea geografică 5 1.2. Istoricul cercetărilor 7 1.2.1. Cercetările efectuate pe zona studiată 7 1.2.2. Cercetări privind potențialul natural al…

  • Procesul patologic la nivelul parodonțiului, este într-o mare măsură influențat de numeroase suprasolicitări. [305216]

    INTRODUCERE Afecțiunile parodontale prezintă o [anonimizat] o [anonimizat], determinând dificultăți în tratament. [anonimizat]-o mare măsură influențat de numeroase suprasolicitări. Parodontita marginală este o patologie inflamatorie a țesuturilor parodontale definită prin exitența pungilor parodontale și rezorbția osoasă progresivă a procesului alveolar. Inflamația îndelungată a [anonimizat], ca urmare a suprasolicitării unităților dentare restante. [anonimizat] a rezorbției procesului…

  • Curs 11 Eredo 2018 (1) [608721]

    STRUCTURA CORDULUI MALFORMAȚII CARDIOVASCULARE – molecule reglatoare și de adeziune -factori de transcipție nucleară -transductori ai semnalelor – factori de creștere Cadru nosologic: 1. Structuri embrionare: tub endocardic origine mezoblast cordul embrionar: – segmentul cranial  bulbul arterial, – segmentul mijlociu ventriculului primitiv, – segmentul caudal  atriul primitiv și sinusul venos.  Suferă mișcări…

  • /g0087/g0104/g0097/g0116/g0032/g0097/g0114/g0101/g0032/g0116/g0104/g0101/g0032/g0097/g0100/g0118/g0097/g0110/g0116/g0097/g0103/g0101/g0115/g0032/g0097… [622848]

    /g0087/g0104/g0097/g0116/g0032/g0097/g0114/g0101/g0032/g0116/g0104/g0101/g0032/g0097/g0100/g0118/g0097/g0110/g0116/g0097/g0103/g0101/g0115/g0032/g0097/g0110/g0100/g0032/g0100/g0105/g0115/g0097/g0100/g0118/g0097/g0110/g0116/g0097/g0103/g0101/g0115/g0032/g0111/g0102/g0032 /g0100/g0101/g0100/g0117/g0099/g0116/g0105/g0118/g0101/g0032/g0097/g0110/g0100/g0032/g0105/g0110/g0100/g0117/g0099/g0116/g0105/g0118/g0101/g0032/g0097/g0112/g0112/g0114/g0111/g0097/g0099/g0104/g0101/g0115/g0032/g0032/g0116/g0111/g0032/g0103/g0114/g0097/g0109/g0109/g0097/g0114/g0032 /g0112/g0114/g0101/g0115/g0101/g0110/g0116/g0097/g0116/g0105/g0111/g0110/g0063/g0032 /g0032 /g0073/g0110/g0116/g0114/g0111/g0100/g0117/g0099/g0116/g0105/g0111/g0110/g0058/g0032 /g0084/g0104/g0101/g0114/g0101/g0032/g0097/g0114/g0101/g0032/g0098/g0097/g0115/g0105/g0099/g0097/g0108/g0108/g0121/g0032/g0116/g0119/g0111/g0032/g0119/g0097/g0121/g0115/g0032/g0105/g0110/g0032/g0119/g0104/g0105/g0099/g0104/g0032/g0097/g0032/g0108/g0101/g0097/g0114/g0110/g0101/g0114/g0032/g0099/g0097/g0110 /g0032/g0097/g0099/g0104/g0105/g0101/g0118/g0101/g0032/g0117/g0110/g0100/g0101/g0114/g0115/g0116/g0097/g0110/g0100/g0105/g0110/g0103/g0032/g0111/g0102/g0032/g0097/g0032/g0114/g0117/g0108/g0101/g0058/g0032 /g0116/g0104/g0101/g0032/g0100/g0101/g0100/g0117/g0099/g0116/g0105/g0118/g0101/g0032/g0040/g0114/g0117/g0108/g0101/g0045/g0100/g0114/g0105/g0118/g0101/g0110/g0041/g0032/g0112/g0097/g0116/g0104/g0032/g0097/g0110/g0100/g0032/g0116/g0104/g0101/g0032/g0105/g0110/g0100/g0117/g0099/g0116/g0105/g0118/g0101/g0032 /g0040/g0114/g0117/g0108/g0101/g0045/g0100/g0105/g0115/g0099/g0111/g0118/g0101/g0114/g0121/g0041/g0032/g0112/g0097/g0116/g0104/g0046/g0032 /g0032 /g0068/g0101/g0100/g0117/g0099/g0116/g0105/g0118/g0101 /g0032/g0058/g0032/g0084/g0104/g0105/g0115/g0032/g0116/g0101/g0099/g0104/g0110/g0105/g0113/g0117/g0101/g0032/g0115/g0105/g0109/g0112/g0108/g0121/g0032/g0109/g0101/g0097/g0110/g0115/g0032/g0112/g0114/g0111/g0118/g0105/g0100/g0105/g0110/g0103/g0032/g0108/g0101/g0097/g0114/g0110/g0101/g0114/g0115/g0032/g0119 /g0105/g0116/g0104/g0032/g0116/g0104/g0101/g0032/g0114/g0101/g0097/g0100/g0121/g0032/g0103/g0114/g0097/g0109/g0109/g0097/g0114/g0032 /g0114/g0117/g0108/g0101/g0044/g0032/g0100/g0101/g0115/g0099/g0114/g0105/g0098/g0105/g0110/g0103/g0032/g0100/g0101/g0116/g0097/g0105/g0108/g0032/g0104/g0111/g0119/g0032/g0116/g0104/g0101/g0032/g0110/g0101/g0119/g0032/g0115/g0116/g0114/g0117/g0099/g0116/g0117/g0114/g0101/g0032/g0105/g0115/g0032/g0102/g0111 /g0114/g0109/g0101/g0100/g0044/g0032/g0119/g0104/g0097/g0116/g0032/g0105/g0116/g0115/g0032/g0099/g0111/g0109/g0112/g0111/g0110/g0101/g0110/g0116/g0115/g0032/g0097/g0114/g0101/g0044/g0032/g0097/g0110/g0100/g0032 /g0105/g0110/g0032/g0119/g0104/g0097/g0116/g0032/g0116/g0121/g0112/g0101/g0032/g0111/g0102/g0032/g0099/g0111/g0110/g0116/g0101/g0120/g0116/g0032/g0105/g0116/g0032/g0099/g0097/g0110/g0032/g0098/g0101/g0032/g0117/g0115/g0101/g0100/g0046/g0032/g0065/g0108/g0108/g0032/g0116/g0104/g0101/g0032/g0105/g0110/g0102 /g0111/g0114/g0109/g0097/g0116/g0105/g0111/g0110/g0032/g0105/g0115/g0032/g0103/g0105/g0118/g0101/g0110/g0032/g0105/g0110/g0032/g0116/g0104/g0101/g0032/g0102/g0111/g0114/g0109/g0032/g0111/g0102/g0032/g0097/g0032/g0109/g0105/g0110/g0105/g0045 /g0108/g0101/g0099/g0116/g0117/g0114/g0101/g0044/g0032/g0100/g0117/g0114/g0105/g0110/g0103/g0032/g0119/g0104/g0105/g0099/g0104/g0032/g0116/g0104/g0101/g0032/g0116/g0101/g0097/g0099/g0104/g0101/g0114/g0032/g0117/g0115/g0117/g0097/g0108/g0108/g0121/g0032/g0101/g0109/g0112/g0108/g0111/g0121/g0115/g0032/g0103 /g0114/g0097/g0109/g0109/g0097/g0116/g0105/g0099/g0097/g0108/g0032/g0116/g0101/g0114/g0109/g0105/g0110/g0111/g0108/g0111/g0103/g0121/g0046/g0032/g0065/g0102/g0116/g0101/g0114/g0032/g0116/g0104/g0101/g0032 /g0101/g0120/g0112/g0108/g0097/g0110/g0097/g0116/g0105/g0111/g0110/g0044/g0032/g0116/g0104/g0101/g0032/g0108/g0101/g0097/g0114/g0110/g0101/g0114/g0115/g0032/g0097/g0114/g0101/g0032/g0112/g0114/g0111/g0118/g0105/g0100/g0101/g0100/g0032/g0119/g0105/g0116/g0104/g0032/g0101/g0120/g0097/g0109/g0112/g0108/g0101 /g0115/g0032/g0105/g0108/g0108/g0117/g0115/g0116/g0114/g0097/g0116/g0105/g0110/g0103/g0032/g0116/g0104/g0101/g0032/g0110/g0101/g0119/g0032/g0115/g0116/g0114/g0117/g0099/g0116/g0117/g0114/g0101/g0044/g0032 /g0119/g0104/g0105/g0099/g0104/g0032/g0116/g0104/g0101/g0121/g0032/g0097/g0110/g0097/g0108/g0121/g0115/g0101/g0044/g0032/g0097/g0110/g0100/g0032/g0097/g0114/g0101/g0032/g0115/g0117/g0098/g0115/g0101/g0113/g0117/g0101/g0110/g0116/g0108/g0121/g0032/g0097/g0115/g0107/g0101/g0100/g0032/g0116/g0111/g0032/g0097 /g0112/g0112/g0108/g0121/g0032/g0116/g0104/g0101/g0032/g0114/g0117/g0108/g0101/g0032/g0116/g0111/g0032/g0110/g0101/g0119/g0032/g0115/g0101/g0110/g0116/g0101/g0110/g0099/g0101/g0115/g0046/g0032 /g0084/g0104/g0101/g0121/g0032/g0097/g0114/g0101/g0032/g0116/g0121/g0112/g0105/g0099/g0097/g0108/g0108/g0121/g0032/g0101/g0120/g0112/g0101/g0099/g0116/g0101/g0100/g0032/g0116/g0111/g0032/g0109/g0101/g0109/g0111/g0114/g0105/g0115/g0101/g0032/g0116/g0104/g0101/g0032/g0114/g0117/g0108/g0101/g0046/g0032/g0084 /g0104/g0105/g0115/g0032/g0097/g0112/g0112/g0114/g0111/g0097/g0099/g0104/g0032/g0105/g0115/g0032/g0109/g0111/g0115/g0116/g0032/g0102/g0114/g0101/g0113/g0117/g0101/g0110/g0116/g0108/g0121/g0032 /g0117/g0115/g0101/g0100/g0032/g0105/g0110/g0032/g0115/g0099/g0105/g0101/g0110/g0099/g0101/g0032/g0097/g0110/g0100/g0032/g0101/g0110/g0103/g0105/g0110/g0101/g0101/g0114/g0105/g0110/g0103/g0032/g0119/g0104/g0101/g0114/g0101/g0032/g0084/g0104/g0101/g0032/g0105/g0110/g0115/g0116/g0114/g0117/g0099/g0116/g0111 /g0114/g0032/g0105/g0110/g0116/g0114/g0111/g0100/g0117/g0099/g0101/g0115/g0032/g0097/g0032/g0116/g0111/g0112/g0105/g0099/g0032/g0098/g0121/g0032/g0108/g0101/g0099/g0116/g0117/g0114/g0105/g0110/g0103/g0032/g0111/g0110/g0032 /g0103/g0101/g0110/g0101/g0114/g0097/g0108/g0032/g0112/g0114/g0105/g0110/g0099/g0105/g0112/g0108/g0101/g0115/g0044/g0032/g0116/g0104/g0101/g0110/g0032/g0117/g0115/g0101/g0115/g0032/g0116/g0104/g0101/g0032/g0112/g0114/g0105/g0110/g0099/g0105/g0112/g0108/g0101/g0115/g0032/g0116/g0111/g0032/g0100/g0101/g0114 /g0105/g0118/g0101/g0032/g0109/g0097/g0116/g0104/g0101/g0109/g0097/g0116/g0105/g0099/g0097/g0108/g0032/g0109/g0111/g0100/g0101/g0108/g0115/g0044/g0032/g0115/g0104/g0111/g0119/g0115/g0032 /g0105/g0108/g0108/g0117/g0115/g0116/g0114/g0097/g0116/g0105/g0118/g0101/g0032/g0097/g0112/g0112/g0108/g0105/g0099/g0097/g0116/g0105/g0111/g0110/g0115/g0032/g0111/g0102/g0032/g0116/g0104/g0101/g0032/g0109/g0111/g0100/g0101/g0108/g0115/g0044/g0032/g0103/g0105/g0118/g0101/g0115/g0032/g0115/g0116/g0117/g0100 /g0101/g0110/g0116/g0115/g0032/g0112/g0114/g0097/g0099/g0116/g0105/g0099/g0101/g0032/g0105/g0110/g0032/g0115/g0105/g0109/g0105/g0108/g0097/g0114/g0032/g0100/g0101/g0114/g0105/g0118/g0097/g0116/g0105/g0111/g0110/g0115/g0032/g0097/g0110/g0100/g0032 /g0097/g0112/g0112/g0108/g0105/g0099/g0097/g0116/g0105/g0111/g0110/g0115/g0032/g0105/g0110/g0032/g0104/g0111/g0109/g0101/g0119/g0111/g0114/g0107/g0044/g0032/g0097/g0110/g0100/g0032/g0102/g0105/g0110/g0097/g0108/g0108/g0121/g0032/g0116/g0101/g0115/g0116/g0115/g0032/g0116/g0104/g0101/g0105/g0114/g0032/g0097 /g0098/g0105/g0108/g0105/g0116/g0121/g0032/g0116/g0111/g0032/g0100/g0111/g0032/g0116/g0104/g0101/g0032/g0115/g0097/g0109/g0101/g0032/g0115/g0111/g0114/g0116/g0115/g0032/g0111/g0102/g0032/g0116/g0104/g0105/g0110/g0103/g0115/g0032/g0111/g0110/g0032 /g0101/g0120/g0097/g0109/g0115/g0046/g0032 /g0032 /g0073/g0110/g0100/g0117/g0099/g0116/g0105/g0118/g0101/g0058/g0032 /g0073/g0110/g0100/g0117/g0099/g0116/g0105/g0118/g0101/g0032/g0116/g0101/g0097/g0099/g0104/g0105/g0110/g0103/g0032/g0097/g0110/g0100/g0032/g0108/g0101/g0097/g0114/g0110/g0105/g0110/g0103/g0032/g0105/g0115/g0032/g0097/g0110/g0032/g0117/g0109/g0098/g0114/g0101/g0108/g0108/g0097/g0032/g0116/g0101/g0114/g0109 /g0032/g0116/g0104/g0097/g0116/g0032/g0101/g0110/g0099/g0111/g0109/g0112/g0097/g0115/g0115/g0101/g0115/g0032/g0097/g0032 /g0114/g0097/g0110/g0103/g0101/g0032/g0111/g0102/g0032/g0105/g0110/g0115/g0116/g0114/g0117/g0099/g0116/g0105/g0111/g0110/g0097/g0108/g0032/g0109/g0101/g0116/g0104/g0111/g0100/g0115/g0044/g0032/g0105/g0110/g0099/g0108/g0117/g0100/g0105/g0110/g0103/g0032/g0105/g0110/g0113/g0117/g0105/g0114/g0121/g0032/g0108 /g0101/g0097/g0114/g0110/g0105/g0110/g0103/g0044/g0032/g0112/g0114/g0111/g0098/g0108/g0101/g0109/g0045/g0098/g0097/g0115/g0101/g0100/g0032/g0108/g0101/g0097/g0114/g0110/g0105/g0110/g0103/g0044/g0032 /g0112/g0114/g0111/g0106/g0101/g0099/g0116/g0045/g0098/g0097/g0115/g0101/g0100/g0032/g0108/g0101/g0097/g0114/g0110/g0105/g0110/g0103/g0044/g0032/g0099/g0097/g0115/g0101/g0045/g0098/g0097/g0115/g0101/g0100/g0032/g0116/g0101/g0097/g0099/g0104/g0105/g0110/g0103/g0044/g0032/g0100/g0105/g0115/g0099/g0111/g0118 /g0101/g0114/g0121/g0032/g0108/g0101/g0097/g0114/g0110/g0105/g0110/g0103/g0044/g0032/g0097/g0110/g0100/g0032/g0106/g0117/g0115/g0116/g0045/g0105/g0110/g0045/g0116/g0105/g0109/g0101/g0032 /g0116/g0101/g0097/g0099/g0104/g0105/g0110/g0103/g0046 /g0032/g0073/g0110/g0115/g0116/g0101/g0097/g0100/g0032/g0111/g0102/g0032/g0098/g0097/g0115/g0105/g0110/g0103/g0032/g0111/g0110/g0032/g0097/g0032/g0116/g0101/g0097/g0099/g0104/g0101/g0114/g0045/g0102/g0114/g0111/g0110/g0116/g0101/g0100/g0032/g0116/g0114/g0097/g0110/g0115/g0109/g0105/g0115/g0115/g0105/g0111/g0110 /g0045/g0115/g0116/g0121/g0108/g0101/g0032/g0099/g0108/g0097/g0115/g0115/g0114/g0111/g0111/g0109/g0044/g0032/g0084/g0104/g0105/g0115/g0032/g0105/g0115/g0032/g0097/g0032 /g0115/g0116/g0117/g0100/g0101/g0110/g0116/g0045/g0099/g0101/g0110/g0116/g0114/g0101/g0100/g0032/g0097/g0112/g0112/g0114/g0111/g0097/g0099/g0104/g0032/g0116/g0104/g0097/g0116/g0032/g0097/g0108/g0108/g0111/g0119/g0115/g0032/g0108/g0101/g0097/g0114/g0110/g0101/g0114/g0115/g0032/g0116/g0111/g0032/g0098/g0101 /g0099/g0111/g0109/g0101/g0032/g0100/g0101/g0101/g0112/g0108/g0121/g0032/g0105/g0110/g0118/g0111/g0108/g0118/g0101/g0100/g0032/g0105/g0110/g0032/g0116/g0104/g0101/g0032 /g0108/g0097/g0110/g0103/g0117/g0097/g0103/g0101/g0032/g0116/g0104/g0101/g0121/g0032/g0097/g0114/g0101/g0032/g0115/g0116/g0117/g0100/g0121/g0105/g0110/g0103/g0032/g0097/g0110/g0100/g0032/g0111/g0102/g0102/g0101/g0114/g0115/g0032/g0112/g0111/g0116/g0101/g0110/g0116/g0105/g0097/g0108/g0032/g0102/g0111/g0114 /g0032/g0114/g0101/g0102/g0108/g0101/g0099/g0116/g0105/g0111/g0110/g0046/g0032/g0073/g0110/g0032/g0116/g0104/g0101/g0032/g0112/g0114/g0111/g0099/g0101/g0115/g0115/g0032/g0111/g0102/g0032 /g0101/g0120/g0112/g0101/g0114/g0105/g0101/g0110/g0116/g0105/g0097/g0108/g0032/g0108/g0101/g0097/g0114/g0110/g0105/g0110/g0103/g0032/g0040/g0108/g0101/g0097/g0114/g0110/g0105/g0110/g0103/g0045/g0097/g0110/g0100/g0045/g0100/g0111/g0105/g0110/g0103/g0041/g0032/g0116/g0104/g0101/g0121/g0032/g0102/g0101/g0101 /g0108/g0032/g0109/g0111/g0114/g0101/g0032/g0105/g0109/g0112/g0111/g0114/g0116/g0097/g0110/g0116/g0044/g0032/g0097/g0114/g0101/g0032/g0108/g0101/g0115/g0115/g0032/g0112/g0097/g0115/g0115/g0105/g0118/g0101/g0044/g0032 /g0097/g0110/g0100/g0032/g0100/g0111/g0032/g0110/g0111/g0116/g0032/g0103/g0101/g0116/g0032/g0098/g0111/g0114/g0101/g0100/g0032/g0115/g0111/g0032/g0101/g0097/g0115/g0105/g0108/g0121/g0032/g0100/g0117/g0114/g0105/g0110/g0103/g0032/g0116/g0104/g0101/g0032/g0108/g0101/g0115/g0115/g0111/g0110/g0046/g0032/g0084 /g0104/g0101/g0114/g0101/g0102/g0111/g0114/g0101/g0044/g0032/g0116/g0104/g0101/g0032/g0105/g0110/g0100/g0117/g0099/g0116/g0105/g0118/g0101/g0032/g0116/g0101/g0099/g0104/g0110/g0105/g0113/g0117/g0101/g0032 /g0099/g0097/g0110/g0032/g0114/g0101/g0110/g0100/g0101/g0114/g0032/g0103/g0114/g0101/g0097/g0116/g0032/g0115/g0101/g0114/g0118/g0105/g0099/g0101/g0032/g0116/g0111/g0032/g0116/g0101/g0097/g0099/g0104/g0101/g0114/g0115/g0032/g0119/g0104/g0111/g0032/g0104/g0097/g0118/g0101/g0032/g0112/g0114/g0111/g0098/g0108 /g0101/g0109/g0115/g0032/g0119/g0105/g0116/g0104/g0032/g0107/g0101/g0101/g0112/g0105/g0110/g0103/g0032/g0116/g0104/g0101/g0105/g0114/g0032/g0115/g0116/g0117/g0100/g0101/g0110/g0116/g0115/g0032…