08.06.2013 Views

Tehnologii avansate de programare

Tehnologii avansate de programare

Tehnologii avansate de programare

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<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!