08.06.2013 Views

Tehnologii avansate de programare

Tehnologii avansate de programare

Tehnologii avansate de programare

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong><br />

Curs 4<br />

Cristian Frăsinaru<br />

acf@infoiasi.ro<br />

Facultatea <strong>de</strong> Informatică<br />

Universitatea ”Al. I. Cuza” Ias¸i


Librării standard <strong>de</strong> taguri (JSTL)<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.1/4


Cuprins<br />

Introducere<br />

Limbajul <strong>de</strong> expresii EL<br />

Taguri <strong>de</strong> bază (Nucleul)<br />

Taguri pentru XML<br />

Taguri pentru interna¸tionalizare<br />

Taguri SQL<br />

Func¸tii<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.2/4


Introducere<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.3/4


Ce reprezintă JSTL ?<br />

Java Standard Tag Library<br />

Librării <strong>de</strong> taguri proprii<br />

Simplificarea creării <strong>de</strong> pagini JSP<br />

Introduce conceptul <strong>de</strong> limbaj <strong>de</strong> expresii (EL)<br />

Standardizarea unor ac¸tiuni<br />

Optimizarea execu¸tiei<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.4/4


Tipuri <strong>de</strong> taguri JSTL<br />

De bază (nucleul) - c<br />

Suport pentru limbajul <strong>de</strong> expresii, controlul<br />

execu¸tiei, gestiune URL-uri<br />

Procesare XML - x<br />

Parsare, transformări<br />

Interna¸tionalizare<br />

Localizare, formatare mesaje, numere ¸si date<br />

Baze <strong>de</strong> date - sql<br />

Conectare, efectuarea <strong>de</strong> secvenâ SQL<br />

Func¸tii - fn<br />

Lucrul cu colec¸tii, ¸siruri<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.5/4


Limbajul <strong>de</strong> expresii (EL)<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.6/4


Ce este EL ?<br />

Limbaj <strong>de</strong> expresii pentru accesarea simplificată a<br />

datelor fără a folosi scriptlet-uri sau expresii JSP.<br />

Exemplu:<br />

<br />

<br />

<br />

;<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.7/4


Sintaxa EL<br />

Expresii<br />

Variabile<br />

Obiecte implicite<br />

Literali<br />

Operatori<br />

Func¸tii<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.8/4


Expresii<br />

Expresiile EL sunt <strong>de</strong> forma ${expresie} ¸si pot fi utilizate:<br />

In continutul tagurilor JSP<br />

<br />

Salut ${utilizator.nume} !<br />

Primul element este: ${colectie[0]}.<br />

<br />

Ca atribute ale tagurilor standard sau proprii<br />

<br />

<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.9/4


Variabile EL<br />

Referite doar prin numele lor: ${variabila}<br />

Evaluarea:<br />

PageContext.findAttribute(variabila)<br />

Căutarea: page → request → session → application<br />

Proprietă¸tile (valorile) sunt accesate prin:<br />

variabila.proprietate sau<br />

variabila[proprietate].<br />

colec¸tii: variabila.get(valoare)<br />

vectori: variabila[i]<br />

bean-uri: variabila.getProprietate()<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.10/4


Obiecte implicite<br />

pageContext:<br />

servletContext, session, request<br />

pageScope, requestScope, sessionScope,<br />

applicationScope<br />

param, paramValues<br />

hea<strong>de</strong>r, hea<strong>de</strong>rValues<br />

cookie<br />

initParam<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.11/4


Literali<br />

Logici: true, false<br />

Intregi: ca în limbajul Java<br />

Reali: ca în limbajul Java<br />

¸Siruri: "Hello", ’Salut’<br />

null<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.12/4


Operatori<br />

Aritmetici: +, -, *, /, div, %, mod<br />

$1+2 $4/2 - 10 div 5<br />

Logici: and, &&, or, ||, not, !<br />

$true and true || false<br />

Rela¸tionali: ==, eq, !=, ne, , gt,<br />

=, le<br />

$1 >= 2 == 2 ge 3<br />

empty: poate fi folosit pentru a <strong>de</strong>termina dacă o<br />

valoare este vidă<br />

$empty x<br />

Condi¸tional: A ? B : C<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.13/4


Exemple<br />

$param[’nume’] Valoarea unui parametru<br />

$!empty param.nume Existenta unui parametru<br />

$hea<strong>de</strong>r["user-agent"] Browser-ul clientului<br />

$hea<strong>de</strong>r["host"] Adresa server<br />

$initParam.numeImplicit Parametru <strong>de</strong> ini¸tializare<br />

$pageContext.request.contextPath Contextul aplica¸tiei<br />

$pageContext.request.method GET, POST, etc.<br />

$pageContext.session.new E sesiunea nouă ?<br />

$pageContext.servletContext.serverInfo Containerul JSP<br />

$pageContext.exception.message Detalii exceptie<br />

$produse[categorie]<br />

$elemente[0]<br />

$sessionScope.cos.nrArticole<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.14/4


Utilizarea func¸tiilor<br />

Există posibilitatea <strong>de</strong> a <strong>de</strong>fini func¸tii proprii ce vor fi<br />

utilizate în expresiile EL.<br />

Func¸tiile sunt <strong>de</strong>finite ca ¸si tagurile proprii<br />

<br />

...<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.15/4


Definirea func¸tiilor<br />

Definirea clasei<br />

package <strong>de</strong>mo;<br />

public class Functie {<br />

...<br />

public static Tip metoda( argumente ) {<br />

...<br />

}<br />

}<br />

Crearea unui fisier <strong>de</strong>scriptor .tld<br />

<br />

equals<br />

<strong>de</strong>mo.Functie<br />

<br />

Tip metoda( tipuriArgumente )<br />

<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.16/4


Taguri <strong>de</strong> bază<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.17/4


Nucleul (c)<br />

Inclu<strong>de</strong>rea:<br />

<br />

Suport pentru limbajul <strong>de</strong> expresii<br />

catch, out, remove, set<br />

Controlul execu¸tiei<br />

if, choose-when-otherwise, forEach,<br />

forTokens<br />

Lucru cu URL-uri<br />

import, redirect, url<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.18/4


Taguri pentru expresii<br />

Setarea/Eliminarea <strong>de</strong> variabile<br />

<br />

...<br />

<br />

Inclu<strong>de</strong>rea unor mesaje pe fluxul <strong>de</strong> ie¸sire<br />

<br />

<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.19/4


Controlul execu¸tiei<br />

<br />

...<br />

<br />

<br />

... <br />

... <br />

... <br />

<br />

<br />

<br />

...<br />

<br />


Revenirea după excep¸tii<br />

Tagul catch prin<strong>de</strong> orice excep¸tie (Throwable) ce poate<br />

apărea în corpul său ¸si o expune (op¸tional) prin<br />

intermediul unei variabile.<br />

<br />

<br />

...<br />

<br />

<br />

Procesarea nu a putu fi realizata din urmatoarele motive:...<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.21/4


Lucrul cu URL-uri<br />

Inclu<strong>de</strong>rea unei resurse<br />

<br />

<br />

<br />

<br />

<br />

<br />

Redirectarea<br />

<br />

<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.22/4


Taguri pentru XML<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.23/4


Taguri pentru XML<br />

Inclu<strong>de</strong>rea:<br />

<br />

Taguri <strong>de</strong> bază<br />

out, parse, set<br />

Controlul execu¸tiei<br />

if, choose-when-otherwise, forEach<br />

Transformari<br />

transform<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.24/4


Obiecte implicite<br />

Folosite pentru a accesa informa¸tii ale aplica¸tiei Web din<br />

cadrul unei expresii XPath:<br />

$variabila<br />

$param<br />

$hea<strong>de</strong>r<br />

$cookie<br />

$initParam<br />

$pageScope, $requestScope, $sessionScope,<br />

$applicationScope<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.25/4


Exemplu <strong>de</strong> utilizare XML<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.26/4


Taguri pentru interna¸tionalizare<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.27/4


Interna¸tionalizarea ¸si localizarea<br />

Interna¸tionalizarea - pregătirea unei aplica¸tii astfel<br />

încât GUI să poată fi personalizată func¸tie <strong>de</strong><br />

regiunea cultural-geografică.<br />

Localizarea - adaptarea unei aplica¸tii<br />

interna¸tionalizate la o anumită regiune.<br />

Abordări<br />

Editarea <strong>de</strong> pagini JSP specifice, controlate <strong>de</strong> un<br />

servlet<br />

Folosirea fi¸sierelor <strong>de</strong> resurse<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.28/4


Taguri pentru interna¸tionalizare<br />

Inclu<strong>de</strong>rea:<br />

<br />

Localizare<br />

setLocale, requestEncoding<br />

Mesaje<br />

bundle, message, setBundle<br />

Formatare numere ¸si date<br />

formatNumber, formatDate, parseNumber,<br />

parseDate, setTimeZone, timeZone<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.29/4


Exemplu <strong>de</strong> folosire I18n<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.30/4


Crearea unei clase cu resurse<br />

package <strong>de</strong>mo;<br />

import java.util.*;<br />

public class Mesaje_ro extends ListResourceBundle {<br />

public Object[][] getContents() {<br />

return contents;<br />

}<br />

static final Object[][] contents = {<br />

{"hi", "Salut"},<br />

{"bye", "La reve<strong>de</strong>re"}<br />

};<br />

}<br />

Clasa Mesaje ro va fi plasată în<br />

/WEB-INF/classes/<strong>de</strong>mo.<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.31/4


Crearea unui fi¸sier cu resurse<br />

Mesaje_ro.properties<br />

# Intrarile fisierului vor fi <strong>de</strong> forma:<br />

# cheie = valoare<br />

hi = Salut<br />

bye = La reve<strong>de</strong>re<br />

welcome = Bine ai venit, {0} !<br />

<br />

<br />

<br />

Fi¸sierul va fi plasat <strong>de</strong> asemenea în<br />

/WEB-INF/classes/<strong>de</strong>mo.<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.32/4


Taguri SQL<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.33/4


Taguri SQL<br />

Inclu<strong>de</strong>rea:<br />

<br />

Conectarea la o bază <strong>de</strong> date<br />

setDataSource<br />

Efectuarea <strong>de</strong> secven¸te SQL<br />

query, update, transaction<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.34/4


Conectarea la o bază <strong>de</strong> date<br />

<br />

<br />

Exemplu:<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.35/4


Efectuarea <strong>de</strong> interogări SQL<br />

<br />

Fără parametri<br />

<br />

select nume from profesori<br />

<br />

Cu parametri<br />

<br />

<br />

<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.36/4


Efectuarea <strong>de</strong> actualizări SQL<br />

<br />

Fără parametri<br />

<br />

update sali set adresa=’la subsol’ where cod=’C112’<br />

<br />

Cu parametri<br />

<br />

update sali set capacitate=? where capacitate is null<br />

<br />

<br />

Modificari efectuate: <br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.37/4


Ob¸tinerea rezultatelor<br />

Rezultatul este ob¸tinut în variabila var.<br />

Domeniul <strong>de</strong> vizibiltate este dat <strong>de</strong> atributul scope.<br />

<br />

<br />

Pentru interogări var este <strong>de</strong> tip<br />

javax.servlet.jsp.jstl.sql.Result.<br />

Pentru actualizari var este un întreg reprezentând<br />

numărul liniilor afectate.<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.38/4


Interfa¸ta Result<br />

Atributul var al unui tag query va con¸tine după execu¸tie<br />

un obiect (bean) <strong>de</strong> tip Result.<br />

public interface Result {<br />

public String[] getColumnNames();<br />

public int getRowCount()<br />

public Map[] getRows();<br />

public Object[][] getRowsByIn<strong>de</strong>x();<br />

public boolean isLimitedByMaxRows();<br />

}<br />

Accesarea valorilor: se va face prin expresii <strong>de</strong> tipul<br />

variabila.proprietate:<br />

<br />

Numar <strong>de</strong> sali: <br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.39/4


Tranzac¸tii<br />

<br />

Tagul transaction este utilizat pentru a efectua o serie<br />

<strong>de</strong> succesivă <strong>de</strong> secven¸te SQL, în mod atomic.<br />

<br />

<br />

update evenimente set cod_profesor=’frasinaru’<br />

where cod=’Ctprog_MO1’<br />

<br />

<br />

update orar set cod_sala=’C308’ where cod_event=’Ctprog_MO1’<br />

<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.40/4


Exemplu <strong>de</strong> utilizare SQL<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.41/4


Func¸tii<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.42/4


Func¸tii<br />

Inclu<strong>de</strong>rea<br />

<br />

Dimensiunea unei colec¸tii<br />

length<br />

Lucrul cu ¸siruri<br />

toUpperCase, toLowerCase,<br />

substring, substringAfter, substringBefore, trim, replace,<br />

in<strong>de</strong>xOf, startsWith, endsWith, contains, containsIgnoreCase,<br />

split, join, escapeXml<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.43/4


Utilizarea func¸tiilor<br />

Func¸tiile sunt utilizate în interiorul expresiilor EL sub<br />

forma: fn:numeFunctie(parametri)<br />

Exemple:<br />

Aveti ${fn:length(cosCumparaturi.articole)} articole in cos.<br />

Tagul pentru crearea unu tabel este ${fn:escapeXml()}<br />

<br />

<strong>Tehnologii</strong> <strong>avansate</strong> <strong>de</strong> <strong>programare</strong> – p.44/4

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!