lcfib jordi girona 1-3, mòdul b6 e-08034 barcelona, spain [email protected] tecnologies web una...

167
LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain [email protected] http://www.fib.upc.es/L Tecnologies web Una visió global de les tecnologies i arquitectures que hi ha darrera de les aplicacions web, especialment les basades en Java

Upload: maria-del-rosario-villanueva-duarte

Post on 24-Jan-2016

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIBJordi Girona 1-3, Mòdul B6E-08034 Barcelona, Spain

[email protected]://www.fib.upc.es/LCFIB/

Tecnologies web

Una visió global de les tecnologies i arquitectures que hi ha darrera de les aplicacions web, especialment les basades en Java

Page 2: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Les tecnologies web engloben…

Els dissenyadors gràfics, que seran experts en…

– HTML, CSS, usabilitat … Els programadors, que hauran de conèixer…

– PHP, ASP, JSP… Els analistes o “arquitectes”, que hauran de dominar…

– J2EE, Frameworks, webservices… La gent de sistemes a qui li preocuparà…

– Seguretat, escalabilitat…

En aquest seminari, intentarem parlar una mica de totes aquestes àrees de coneixement.

Page 3: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Índex

Tecnologies de client: del HTML a AJAX. Conceptes bàsics d'aplicacions web. Les arquitectures basades en Java (de JSP a JEE) El mon dels frameworks: Spring, Struts, Hibernate... Seguretat en aplicacions web Elements d'una infrastructura web.

Últim dia:

– Casos pràctics sobre aplicacions web a la FIB

Page 4: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIBJordi Girona 1-3, Mòdul B6E-08034 Barcelona, Spain

[email protected]://www.fib.upc.es/LCFIB/

Les tecnologies del client.Del HTML a AJAX

Page 5: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

De què parlarem?

CSS DOM Javascript AJAX Altres tecnologies per aplicacions riques

Page 6: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Els estàndards W3C

És un organisme que es dedica a promoure els estàndards al web, dissenyant especificacions i eines

Tenen una oficina a Espanya: http://www.w3c.es/ No només HTML, sino molts altres temes relacionats amb el

web:

– Accés universal (iniciativa WAI)

– Web semàntica (RDF)

– Multimedia (SVG, SMIL)

– Web services (SOAP,WSDL)

– ... http://www.w3c.es/divulgacion/guiasbreves/

Page 7: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

CSS

Fulls d'estil, que es poden tenir un un fitxer a part del HTML o entre els tags <style></style>

Defineixen atributs de visualització de:

– Els tags HTML normals i corrents

– Classes que podem associar a una part del text• <span class=”titol”>Aixo es un titol</span>

– Elements amb un identificador únic• <span id=”menu1”>Primer menu</span>

Separar la presentació del contingut, faciliten la coherència Permet tenir un HTML molt mes senzill i estructurat

Page 8: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Tipus de propietats que hi ha a CSS

Podem jugar amb

– Marges

– Mides

– Posicions en pantalla

– Tipus de lletra

– Imatges i colors de fons

– Visualització o no d’un element

Aplicar uns estils depenent de la plataforma

– Fer que un menu es vegi en pantalla i no a l’imprimir

– Fer que un disseny s'adapti a una PDA

Page 9: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

El mon ideal: HTML valid + CSS

Idealment, tots els webs haurien de tenir HTML vàlid El CSS hauria de proporcionar tota la presentació Exemple de fins on podem arribar:

http://www.csszengarden.com

Realment el que normalment tenim es...

– HTML que es veu be, però que no es 100% vàlid

– Format incorporat dintre del HTML (taules)

– Webs totalment correctes que es veuen malament en algun navegador per diferències en implementació

Page 10: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Un exemple de problemes de CSS

<style> .postit { width: 200px; /* amplada de 200 px */padding: 25px; /* deixem un marge de 25 px */background: yellow;

}

</style>

<div class="postit">

<p>Aixo amb explorer medeix 200 pixels i amb Mozilla, 250.</p>

<p>El "padding" s'afegeix de formes diferents.</p>

</div>

Diferents navegadors representen CSS diferent

Page 11: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

El problema de CSS

Page 12: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Treballant amb CSS

Web developer extension

– Validadors de HTML

– Edició de CSS “on the fly” Firebug

– Inspecció d’elements i els seus estils Fitxa de les propietats

http://www.ilovejackdaniels.com/cheat-sheets/css-cheat-sheet/

Treballar amb CSS es dur. S'ha de provar amb tots els navegadors i tot i així d'han de recorrer a "hacks" per que les coses quedin com volem

Page 13: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

L’estructura de la pàgina i el DOM

Document Object Model: model d'objectes de la pàgina que exposa el navegador als llenguatges de script.

API que ens permet accedir al que esta mostrant el navegador o manipular el seu comportament

DOM = Javascript? NO.

– Javascript ens permet accedir a la pàgina mostrada i al navegador utilitzant el DOM

Accedint al DOM podem veure i manipular les propietats definides a través de CSS

Podem accedir a elements qualsevol de la pàgina si els identifiquem amb un ID únic al HTML

Page 14: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

El DOM ha existit des de sempre...

<script>

function comprova() {

if (document.forms[0].elements[0].value=="") {

alert("Escriu un titol!");

}

return false; // evita que enviem les dades

}

</script>

...

<form name="pelicula" onSubmit="comprova()">

<input type="text" type="titol" >

<input type="submit" value="OK">

</form>

Page 15: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

L'evolució del DOM “simple”

El DOM “simple” permetia accedir només a

– Valor de camps de formularis

– Frames i finestres Extensions propietaries i incompatibles

– Netscape 4: layers (document.layers[])

– Explorer: array “all”, amb els elements de la pàgina

– Ens obligava a fer 2 versions de les pàgines! Últimes versions de navegadors

– Implementació estàndard del DOM versió 2

– document.getElementById() per accedir als elements

Page 16: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Exemple: àrea desplegable amb DOM

<script>

function desplegar(id) {

valor=document.getElementById(id).style.display;

if (valor!="block") {valor="block";} else {valor="none";}

document.getElementById(id).style.display=valor;

}

</script>

<style>

.desplegable {display:none}

</style>

...

<div><a href=”javascript:desplegar('op1')">Desplegar</a></div>

<div class="desplegable" id="op1">

Aquest text apareixerà i desapareixerà</div>

Page 17: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Javascript + DOM

Obrim la porta a manipular la pàgina un cop carregada Funcions per accedir i manipular l’arbre, normalment a partir

del seu ID

– node=getElementById(“x”)

– node.appendChildren(node2)

– node.parentElement

Podem mostrar, amagar, moure elements de la pàgina i crear interfaces molt mes agradables i usables.

Hem d’estar preparats per patir diferències entre navegadors

– Hi ha llibreries que ens permeten abstrure'ns

Page 18: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Un exemple: tiddlywiki

Representa tot el que es pot arribar a fer

http://www.tiddlywiki.org

Hi podem veure...

– Creació de nous nodes a l’arbre HTML

– Efectes de visualització

– Programació avançada en Javascript

– Accés a objectes interns del navegador per guardar

– I a sobre... pot ser útil!

Page 19: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

La revolució AJAX

AJAX=Asynchronous JavaScript+XML Treballar des del navegador comunicant-se amb el servidor

pero sense necessitat de recarregar les pàgines Ús extensiu de l’objecte XMLHttpRequest

– Permet fer peticions HTTP des de Javascript

– Executa codi JavaScript en resposta a la crida Manipulem el DOM de la pàgina Resultat: pàgines interactives amb 0 recarregues Problemes:

– depenem molt del navegador

– dificultat de desenvolupament

Page 20: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Fluxe d’execució de AJAX

Tenim un objecte AJAX Creem una instancia i li diem:

– URL a la que connecta

– Funció de callback En rebre la resposta, executem

el callback (assincronament) El callback rep XML, HTML,

JSON... Variant: fem que periodicament

es vagin actualitzant les dades (per exemple per veure actualitzacions de mail)

Page 21: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Un exemple: Google Maps

Parteix el mapa en “rajoles”, casdascuna amb una URL fixa per posició i nivell de zoom

– Mateixa tecnologia dels jocs 2D (tiles) Quan volem marcar una posició al mapa, hi coloca un

indicador amb un PNG amb transparencies Quan fem un recorregut, genera un PNG amb la ruta i la

posiciona Fa les cerques carregant-les en un iframe

– retorna XML i per JS el parseja i coloca sobre el mapa

– genera també la llista de resultats

– No HTTPRequest, així podem fer “back” Ens proporciona una API que utilitza AJAX

Page 22: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Més exemples

GMail

– només demana la pàgina sencera al principi

– Demana via xmlhttprequest fragments de Javascript

– Via DOM, modifica la pàgina amb la informacio del JavaScript

Pàgina personalitzada de Google eyeOS

– “sistema operatiu” al navegador

– Un dels creadors era fiber Flickr, ta-da list, Basecamp... Parcialment a filmaffinity (al votar), a atrapalo (buscar vols)...

Page 23: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Què no és AJAX?

AJAX és un nom que ha funcionat tan bé que s’aplica a coses que no tenen res a veure.

AJAX no es només Javascript

– Si no hi ha interacció amb el servidor, no es AJAX

AJAX no es només XMLHTTPRequest

– Es poden simular recàrregues amb un frame ocult.

– http://developer.apple.com/internet/webcontent/iframe.html

Parlem amb propietat, que per algo som enginyers!

Page 24: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Conclusions AJAX

AJAX es útil per:

– Tenir interfícies més dinàmiques

– Pantalles en la que les recàrregues molesten

– Aconseguir efectes propis d’aplicacions d’escriptori (autocompletar...)

Però en canvi no es correcte per

– Llistats: url que hem de poder passar a la gent

– Quan el botó de tornar enrere té sentit

– En resum: quan NO estem programant una aplicació

Page 25: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Javascript avançat

Amb la manipulació del DOM i AJAX, Javascript demostra que serveix per mes que validar formularis i fer “rollovers”

Necessitem capacitats més avançades per fer que poguem realment “programar aplicacions” en Javascript.

– Crear objectes i classes

– Passar com a paràmetres estructures complexes

– Crear “callbacks” en resposta a events

– Facilitar l’us de AJAX

– Accedir facilment al DOM Algunes d’aquestes capacitats depenen del navegador i es fa

necessari una llibreria que ens abstregui

Page 26: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

JSON. Tipus complexes en Javascript

Javascript Object Notation Es una forma en que podem declarar un objecte en Javascript

i que també serveix com a notació per dades estructurades{aula:’Tecnologies web’,

professors:[

{nom:’Jaume’,cognom:’Moral’},

{nom:’Daniel’,cognom:’Golobart’}

]}

Permet “simular” passar paràmetres a una funció per nom o pasar estructures complexes

Molt utilitzat en llibreries, per simplificar les API. Similar a XML en el que permet expressar, pero més llegible

per les persones

Page 27: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

La llibreria Prototype

Molt bon dissenyada i base d’altres llibreries Proporciona una capa per programar més còmodament Funció equivalent a document.getElementById()

$(‘element’)

Gestió d’incompatibilitats. executa fins que funcioni algo:Try.these {

funcio1(),

funcio2()

}

Registrar handlers pels events.Event.observe(‘element_id’,’click’,callback,false);

Page 28: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Llibreria Prototype (2)

Objecte AJAX

var myAjax = new Ajax.Updater('element_a_actualitzar','http://servidor/url',{method: 'get', parameters:'p=nosque' }

);

Ajuda en la sintaxi per declarar classes

MevaClasse = Class.create();MevaClasse.prototype = { initialize : function(el) { this.el = el; }, ...}

m=new MevaClasse(el);

Page 29: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Llibreria script.aculo.us

Llibreria construida sobre Prototype Efectes i animacions (no AJAX) de forma molt senzilla Drag & drop Per AJAX

– Autocompletar

– Edició “in place” com el tiddlywiki

– Lligar el drag and drop Molt senzilla d’utilitzar:

Effect.BlindDown('id_of_element', {duration:3});

Ajax.InPlaceEditor('editme', '/demoajaxreturn.php');

Paradoxalment té un web tremendament mal dissenyat

Page 30: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Altres llibreries útils

Yahoo User Interface library (YUI)

– http://developer.yahoo.com/yui/

– Similar a script.aculo.us

– Molt ben documentada Google Web Toolkit (GWT)

– http://code.google.com/webtoolkit/

– Orientada únicament a AJAX

– Es una llibreria Java que genera el Javascript

– Parteix de la base que no hem de programar Javascript JQuery

– http://jquery.com/

Page 31: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

i el Flash? Millor FLEX

Supera a HTML + Javascript amb temes relacionats amb gràfics vectorials, pero no en temes d'interfaces d'usuari

Encara que es pugui generar d'altres formes, el normal es fer-ho a partir del Flash Editor. Incomode (per programadors)

La solució: FLEX 2

– Framework basat en Flash per aplicacions "riques"

– Llenguatge per generar interfícies MXML(similar a HTML) + ActionScript (similar a Javascript)… sense problemes de navegador!

– Permet accedir a dades remotes per HTTP

– SDK gratuit, un compilador que genera fitxers .swf

– Es pot integrar a Eclipse

Page 32: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Altres tecnologies per les RIA (Rich Internet Applications)

OpenLaszlo

– Framework OpenSource que genera HTML+Javascript o Fitxers Flash (SWF) a partir de LZX

Silverlight

– Es l'alternativa a Flex de Microsoft.

– XAML per definir l'interface + programació en algun llenguatge de la família .NET

Adobe AIR

– Permet crear aplicacions multiplataforma d'escriptori com si fossin aplicacions web. Poden estar basades en HTML+Javascript o en FLEX

Els oblidats: Java Applets / Controls ActiveX

Page 33: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Conclusions

Una pàgina web no es una pàgina immutable i estàtica

– La seva extructura s'exposa via DOM

– Es pot manipular i canviar la visualització

– Pot respondre a events Javascript

– Pot demanar informació a un servidor via AJAX Pero…

– Hem de tenir en compte diferències entre navegadors

– Hem de recorrer a llibreries per facilitar la programació

Hi ha alternatives a la idea de HTML + Javascript que poden evitar aquesta complexitat.

Page 34: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIBJordi Girona 1-3, Mòdul B6E-08034 Barcelona, Spain

[email protected]://www.fib.upc.es/LCFIB/

Conceptes bàsics d'aplicacions web.

Page 35: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

De què parlarem?

La interacció bàsica amb aplicacions web Pas de paràmetres Sessions Cookies Proteccions / seguretat Connexions a BD

Page 36: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Interacció bàsica amb aplicacions web

Com pot comunicar-se una pàgina web amb el servidor? Utilitzant el protocol HTTP

Seguint un link

– Demana al servidor una certa URL, que pot ser una pàgina generada pel servidor i el navegador la carrega.

Enviant un formulari

– Li enviem les dades que acabem d'omplir Amb una petició tipus AJAX

– El navegador fa una petició "en background" i sense recarregar la pàgina

Veurem quins elements intervenen en aquesta comunicació

Page 37: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Pas de paràmetres

Les aplicacions web permeten el pas de paràmetres de 2 formes: GET i POST

GET

– S'afegeixen els paràmetres a la URL POST

– S'envien com una segona part de la petició Aquesta informació es posa al formulari que envia els

paràmetres. Hi ha una tercera forma que ens permet enviar fitxer complets

al servidor (fer uploads). S'envia codificat en MIME Els parametres son strings. Qualsevol tipus complex requereix

un tractament dels que s'encarrega la plataforma escollida

Page 38: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Sessions

Cada petició HTTP és independent de les altres. Problema quan volem desenvolupar aplicacions.

El protocol no proporciona cap mètode per saber des del servidor quines peticions ens arriben del mateix client, no incorpora el concepte de sessió.

Tècniques per aconseguir tenir estat:

– Cookies amb un identificador de sessió

– Paràmetre ID_SESSIO Altres possibles tècniques

– Adreça IP. No sempre funciona.

Page 39: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Mites sobre la falta d’estat

“Jo treballo amb IIS i el servidor ja suporta

sessions, sense necessitar cookies”

“Per què hem de passar un identificador de sessió?

Encara que desactivem les cookies el PHP

ja té una variable amb la sessió.”

Aquestes frases ens mostren que no s’ha entès el significat de “sense estat”. Espero no sentir-les de vosaltres…

Si volem sessions, el navegador sempre ha d’enviar alguna dada en les seves peticions per identificar-se. El servidor no fa miracles

Page 40: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Cookies

Les cookies permeten guardar al client petites quantitats d’informació i després tornar-les a enviar cap al servidor.

Un servidor ens pot enviar una cookie quan demanem qualsevol fitxer, afegint una capçalera de l’estil...

Set-Cookie: foo=bar; path=/; expires Mon, 21-Feb-2005 13:46:00 GMT

Quan fem una altra petició al mateix servidor, enviem aquesta informació en una capçalera extra

Cookie: foo=bar

Les cookies no les demana el servidor: les envia automàticament el navegador com si fos un paràmetre

Page 41: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Cookies de sessio

Les cookies que no tenen data de caducitat duren fins que es tanca el navegador. Son cookies de sessió

Les plataformes de desenvolupament web més conegudes (JSP, ASP, PHP…) utilitzen cookies per mantenir la sessió

La primera vegada que ens connectem al web, ens donen un identificador aleatori, que anirem enviant mentre no tanquem el navegador

El servidor es guardarà valors associats a aquest identificador (una mena de taula de hash)

Cookies habituals:

– JSESSIONID, PHPSESSID, ASPSESSIONID

Page 42: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Eines per treballar amb cookies

Si estem desenvolupant una aplicació web i les coses no acaben de funcionar, pot ser interessant veure que esta passan amb les cookies

Live http headers

– Permet veure les capçaleres HTTP que s'estan passant entre el client i el servidor. Entre elles, les cookies

Add'n'edit cookie

– Permet manipular les cookies que tenim i canviar el valor

Exemple: Bústia

Page 43: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Paràmetre ID_SESSIO

És un substitut de les cookies, amb exactament la mateixa idea de la cookie de sessió, però passat explícitament com un paràmetre o una part de la URL

És més difícil d'implementar, perquè les nostres aplicacions l'han de passar explícitament a qualsevol petició que es faci al servidor, reescrivint les URL a les pàgines.

Podem perdre la sessió si fem una petició al servidor sense l’identificador (per exemple, una pàgina estàtica)

No es guarda cap informació: el id_sessió només serà vàlid fins que tanquem el navegador

Funciona sempre, ja que no depenem d'una funcionalitat que pot estar desactivada.

Page 44: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Perquè no podem utilitzar la IP?

Si necessitem un identificador per identificar el client… perquè no utilitzem l’adreça IP origen?

– Cas 1: tenim una màquina multiusuari amb diferents usuaris accedint a la vegada a internet. Tots ells serien tractats com la mateixa persona.

– Cas 2: Hi ha una màquina intermitja que fa de proxy. Automàticament, totes les peticions que fem tenen com a origen la IP del proxy

Page 45: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Perquè ens pot servir la sessió?

Saber que una sèrie de peticions ha vingut del mateix usuari, sense haver de confiar en la IP

Guardar temporalment al servidor informació de l’usuari

– Carret de la compra Guardar-se el fet que ja hem introduit un username i

password valids i estem autentificats. Permet guardar valors que han d’estar disponibles en altres

pàgines i sense haver d’enviar més cookies

– Exemple: idioma triat

Page 46: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Quan acaben les sessions?

En sistemes orientats a connexió, la sessió acaba quan tallem la connexió. En web no existeix aixo

3 possibilitats

– Tanquem el navegador. S’esborra la cookie pero no la informació que teníem al servidor

– Caduca. Els servidors es configuren perque la informació de la sessió caduqui passats uns minuts d’inactivitat

– Invalidem la sessio. Anem a una pàgina que esborra la informació de la sessió

Una sessió no invalidada ni caducada és perfectament vàlida al servidor. Si tenim el seu identificador, la podem “robar”

Page 47: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Seguretat declarativa

És afegir autentificació i autorització dels usuaris en una aplicació sense haver de tocar el codi

autentificació: és el fet de saber que una persona es qui diu ser (normalment, en base a un usuari i password)

2 grans formes:

– HTTP Basic authentication (amb un popup)

– Basada en forms i sessions autorització: és el fet de permetre o no a un usuari l’accés a

un cert recurs (normalment, en base als rols d’aquest usuari) Per exemple, JSP permet fer-ho al fitxer web.xml, PHP a la

configuració del servidor Apache

Page 48: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Accés a bases de dades

Generar pàgines dinàmiques normalment implica treballar amb alguna bases de dades

En una aplicació no web, podem connectar una vegada al principi de l'aplicació i desconnectar al final.

En una aplicació web, no tenim clar quan ens desconnectem, així que no podem mantenir una connexió oberta "per sempre"

Obrir i tancar connexions continuament cada vegada que hem d'accedir a la BD té un cost

Solució: pool de connexions

– Tenim una sèrie de connexions obertes

– Agafem una quan la necessitem i la tornem al pool

– Permet aprofitar millor els recursos

Page 49: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Conclusions

Programem amb el que programem, hem de tenir molt clars una sèrie de conceptes

– Els diferents tipus de pas de paràmetres

– Els problemes que ens poden portar les sessions

– El fet de no tenir estat i els problemes que implica

– La millor forma de plantejar la seguretat d'una aplicació és de forma declarativa.

– Els problemes que poden representar els accessos a les bases de dades

La plataforma que escollim per programar probablement ja ens aïllarà d'aquests conceptes, però és bo saber-los.

Page 50: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIBJordi Girona 1-3, Mòdul B6E-08034 Barcelona, Spain

[email protected]://www.fib.upc.es/LCFIB/

Les arquitectures basades en Java (de JSP a JEE)

Page 51: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

De què parlarem

Java com a llenguatge per fer aplicacions web Servlets JSP El concepte d'aplicació web L'especificació JEE Els servidors JEE

Page 52: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Java: un llenguatge buscant el seu lloc

Java va sorgir fa ja més de 10 anys Primera utilitat: petits programes que s'executen al navegador

(amb el plugin de Java): els Applets

– A la època, la única forma d'afegir més interactivitat

– Complexitat per tenir el plugin correcte

– Actualment quasi no s'utilitzen (millor Flash o similars) Segon intent: Java per aplicacions d'escriptori

– No gaire èxit. Aplicacions massa pesades Tercer intent: Java al servidor

– Al no tenir interfície d'usuari, funcionava millor

– Aplicacions web

Page 53: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Servlets

Framework per generar pàgines web des de classes Java Tenim accés a la petició, la resposta, la sessió i a paràmetres

d’aplicació Anem escrivint la pàgina des del programa, generant el codi

HTML per programa. (Sí, es molt lleig!) Necessitem un contenidor de servlets, bàsicament es un

programa Java que carrega els Servlets i els executa en resposta a la nostra petició

El servidor més conegut es Apache Tomcat

– Servidor de referència (quan surt una nova especificació, es qui l'implementa)

Page 54: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Exemple de Servlet (1)

import java.io.*;

import java.sql.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class ServletConsulta extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

Page 55: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Exemple de Servlet (2)

out.println("<HTML>");

out.println("<BODY>");

out.println("<TABLE border=1>");

try {

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connection conn=

DriverManager.getConnection("jdbc:odbc:authors");

Statement stmt=conn.createStatement();

ResultSet rset=

stmt.executeQuery("SELECT * FROM AUTHORS");

int cols=rset.getMetaData().getColumnCount();

Page 56: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Exemple de Servlet (3)

while(rset.next()) {

out.println("<TR>");

for (int i=1;i<=cols;i++) {

out.println("<TD>"+rset.getString(i)+"</TD>");

}

out.println("</TR>");

}

out.println("</BODY>");

out.println("</HTML>");

rset.close();stmt.close();conn.close();

} catch (Exception e) {

out.println(e.toString());

}

}

}

Page 57: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

JSP

JSP permet tenir pàgines HTML amb codi Java que s'executa abans de tornar-la cap al client.

Permet cridar altres classes Java, on hi haurà el gruix del codi. Les JSP fan de vista, amb un mínim de codi. Per exemple...

<jsp:useBean id="cart" scope="session” class="session.Carts” />

</jsp:useBean>

No s’interpreta el codi cada vegada. La primera invocació fa que es compili la pàgina i es converteixi en un servlet.

Page 58: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Exemple amb JSP (1)

<%@ page language="java" import="java.sql.*" %>

<HTML>

<BODY>

<%

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connection conn=

DriverManager.getConnection("jdbc:odbc:authors");

Statement stmt=conn.createStatement();

ResultSet rset=

stmt.executeQuery("SELECT * From authors");

int cols=rset.getMetaData().getColumnCount();

%>

Page 59: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Exemple amb JSP (2)

<TABLE border = 1>

<% while(rset.next()) { %>

<TR>

<% for (int i=1;i<=cols;i++) { %>

<TD> <%= rset.getString(i) %> </TD>

<% } %>

</TR>

<% } %>

</TABLE>

<% rset.close();

stmt.close();

conn.close(); %>

</BODY>

</HTML>

Page 60: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

La idea de Tag Libs

JSP permet declarar nous tags per posar a les notres pàgines i associar-los a codi java

Podem aconseguir una molt més gran separació entre presentació i codi: idea de JSP sense codi Java

Per una llista de Tag Libs ja programats...

– http://jakarta.apache.org/taglibs/ Hi ha una llibreria estàndar (JSTL), que permet no haver de

recorrer a Java dintre de JSP per moltes coses.

– Iteradors, condicionals...

– Nou lleguatge per expressions: expression language

– Ben utilitzada, converteix un JSP en una plantilla

Page 61: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Exemple de pàgina amb Tag Libs

<sql:driver var="dataSource"

driver="sun.jdbc.odbc.JdbcOdbcDriver” url="jdbc:odbc:authors">

<sql:query var="authors" dataSource="$dataSource">

SELECT * FROM Authors

</sql:query>

<table>

<c:forEach var="row" items="$authors.rows">

<tr>

<td>${row.Au_ID}</td>

<td>${row.Author}</td>

<td>${row.YearBorn}</td>

<td>

</c:forEach>

</table>

Page 62: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Aplicacions JSP/Servlet: Web applicacions

Concepte d’aplicació, no només pàgines independents. Separarem en una estructura de directoris...

– Pàgines estàtiques i JSP

– Classes Java que s’executen com a servlets

– Classes Java d’utilitats (JavaBeans) o Taglibs Configurarem l’aplicació al fitxer web.xml…

– Paràmetres d’inicialització

– Mapejos de URL a servlets

– Usuaris, grups i autoritzacions

– Recursos externs que necessitem (p.e. DataSources) Empaquetarem tot aixo en un fitxer .WAR

(Web Application Archive)

Page 63: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Llibreries que ens poden ser útils

Java té moltissimes llibreries, moltes d'elles útils per web log4j

– Sistema de logs configurable

– Per posar “xivatos” i treure'ls fàcilment Velocity, Freemaker

– Sistema de plantilles en Java

– Per si no ens agraden les JSP HttpClient

– Per poder connectar-nos a altres servidors web iText

– Generar PDF

Page 64: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Conclusions sobre Servlets/JSP

Bona idea d'aplicació web en que posem en un sol paquet

– Aplicació

– Fitxers de configuració S’ha convertit en un estàndard amb molta acceptació,

especialment al mon empresarial Suport per fer aplicacions estructurades Llibreries de qualsevol cosa: busqueu abans de desenvolupar!

Per donar suport a necessitats mes avançades sobretot en el mon empresarial es va crear l'especificació JEE (abans coneguda com a J2EE)

Page 65: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Un canvi de filosofia

Fins ara ens hem plantejat el desenvolupament de contingut dinàmic des del punt de vista web

Quan ens estem plantejant una aplicació més gran, per exemple, un sistema de banca on-line, hem de pensar d’una altra forma

Pàgines webPàgines

dinàmiques

AplicacióAplicació ambinterfície web

Page 66: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Model general d’aplicacions de 3 capes

BD

Lògicade negoci

Clients no web

Presentació

Altressistemes

Page 67: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Arquitectura JEE

Arquitectura completa d’aplicacions de n-capes basat en la plataforma Java

Idea principal: aplicacions a la capa intermitja, accessibles a través navegadors web o altres tipus de client

– Components per la lògica de negoci

– Capa de presentació

JEE és un Model de programació

– Com hem de desenvolupar les aplicacions? JEE és una Plataforma:

– Què necessitem per executar-les?

Page 68: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Elements del Model d’Aplicació

Model de components

– EJB (Enterprise Java Beans) Capa de presentació

– Servlets /JSP Protocol per comunicar components remots

– RMI / IIOP Accés a bases de dades o altres fonts d’informació

– JDBC (Bases de dades relacionals)

– JNDI (Serveis de directori)

– JavaMail (Correu electrònic)

– JTA (Transaccions)

Page 69: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Esquema de l’arquitectura

Page 70: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Què és un EJB?

Són components de l’aplicació que s’executen a la capa intermitja i que executen la lògica de negoci. El que us expliquen com “capa de domini”

Han d’executar-se en un servidor de EJB, que els hi proporcionarà serveis transaccionals, persistència, alta disponibilitat...

Ha passat per unes especificacions molt complexes que han fet que no s’utilitzessin gaire.

L’especificació actual (EJB 3.0) es basa en les anotacions de Java 5.0 per configurar-les.

– @Stateful, @Stateless

– @Remote

Page 71: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Exemple. Botiga de llibres

Page 72: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Servidors JEE

Per poder executar una aplicació que utilitzi EJB, necessitem un servidor que sigui "JEE compliant"

Hi ha una gran quantitat d'aquests servidors que basen el seu negoci en els serveis d'assessorament i consultoria

A l'estar dirigits bàsicament a empreses es centren en temes d'alta disponibilitat.

– Jboss, líder dintre dels Open Source

– Glassfish de Sun Microsystems, ara en Open Source

– Oracle Application Server

– BEA Weblogic

– IBM Websphere

– ...

Page 73: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Conclusions d'arquitectures Java

Java ha trobat un lloc com a plataforma pel desenvolupament d'aplicacions empresarials

JEE són actualment 23 especificacions diferents que ha de complir qualsevol servidor per ser "JEE compliant"

Una aplicació JEE teòricament es pot executar en qualsevol d'aquests servidors "sense canvis"

És necessaria tota aquesta complexitat? Normalment, no

Un servidor com Tomcat (no totalment JEE ni de lluny) pot executar la majoria d'aplicacions Java que necessitem

Per exemple, el Racó

Page 74: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIBJordi Girona 1-3, Mòdul B6E-08034 Barcelona, Spain

[email protected]://www.fib.upc.es/LCFIB/

Frameworks i altres llibreries d’aplicacions web

Page 75: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Frameworks

Que és exactament un framework? Struts Spring i com lligar-lo amb Struts Hibernate L'arquitectura completa El nouvingut: Ruby on rails

Mantra d’aquesta lliçó:

– Tothom es troba els mateixos problemes

– Hi ha gent que sap mes que nosaltres que els ha resolt

– No reinventem la roda

Page 76: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Framework <> plataforma <> llibreria

Una plataforma normalment implica una decisió de

– Hardware

– Servidors

– Llenguatge de programació Una llibreria normalment s’utilitza per solucionar un problema

concret En canvi un framework...

“Un framework, es un conjunt de llibreries per una determinada plataforma que condicionen totalment la forma en que ens plantegem, organitzem i desenvolupem una aplicació“(definició pròpia)

Page 77: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Perquè un framework?

En un primer moment

– Són excessivament restrictius

– Les coses passen i no sabem perque Amb el temps

– No hem de pensar desde zero. Programar es converteix en “omplir forats”

– Facilitem el manteniment. Qualsevol persona que conegui el framework triat podrà modificar fàcilment la nostra aplicació

En general es bo utilitzar un framework quan veiem que la nostra aplicació pot ser complexa o altres persones l’hauran de mantenir

El problema es: quin framework triar?

Page 78: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

JEE es un framework?

Presentació amb JSP / Servlets Model implementat amb EJB Interacció amb la base de dades feta pel contenidor Aixo condiciona totalment com ha de ser la nostra aplicació,

per tant JEE es un framework

Podem pensar en JEE només com un conjunt de llibreries que podem fer servir o no

Podem triar no fer servir EJB Podem decidir fer nosaltres la persistència amb BD En resum, podem decidir passar del framework de JEE

Page 79: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Frameworks i llibreries per JEE que s'han imposat

Struts

– Capa de presentació

– Permet estructurar les aplicacions segons el patró MVC Spring

– Ens permet estructurar la capa de domini

– Es basa en el patró Dependency injection Hibernate

– No es pot considerar propiament un framework, sino un mapejador d'objectes a bases de dades relacionals

Els veurem un a un per veure que ens poden oferir i entendre com colaboren per formar una gran plataforma

Page 80: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

L'aplicació d'exemple

Farem un petit gestor de tasques Una tasca tindrà un nom i una prioritat Hi ha haurà una pantalla de llistar les tasques Podrem editar-les, esborrar-les i crear-ne de noves

Una paraula d'advertència. És necessari utilitzar 3 frameworks per una aplicació tan tonta?

La resposta es NO En aquest cas ho estem fent per mostrar les idees claus

d'aquests 3 frameworks. No hem de fer aplicacions "overengineered". El codi que

menys falla es aquell que no existeix.

Page 81: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Forçant MVC: Struts

Struts és un framework que ens permet forçar les nostres aplicacions a utilitzar MVC

– Proporciona un servlet controlador configurable amb un fitxer XML amb les accions a executar per cada una de les URL de l'aplicació (les classes Actions)

– Tenim uns objectes (els ActionForms) que permeten accedir desde les Actions als valors entrats als formularis de les nostres pàgines.

– Les Actions actuen sobre les classes Java que formen el model, que son les que realment fan la feina

– A les vistes, ens proporciona tags que ens ajuden a visualitzar les dades dels formularis o obtingudes per les Actions

Page 82: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Exemple: form nova tasca

<html:form action="/guardarTasca">

<html:hidden property="id" />

Nom: <html:text property="nom"/>

<br>

Prioritat: <html:text property="prioritat"/>

<html:submit value="Guardar"/>

</html:form>

Taglibs pels elements del form (nom, propietat, id) que es mapegen amb les propietats de l'ActionForm

Fem referència a URL declarades al struts-config.xml

Page 83: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

El ActionForm associat a aquest formulari

<form-bean name="tascaForm" type="org.apache.struts.action.DynaActionForm">

<form-property name="id" type="java.lang.Integer" initial="-1" />

<form-property name="nom" type="java.lang.String" />

<form-property name="prioritat" type="java.lang.Integer" initial="1" />

</form-bean>

Descrivim les propietats del form Podem fer la classe per programa o declarar-la al struts-

config.xml (es aquest cas)

Page 84: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Una Action al struts-config.xml

<action path="/guardarTasca"

type="presentacio.GuardarTascaAction"

name="tascaForm"

scope="request">

<forward name="success" path="/llistaTasques.do"

redirect="true"/>

<forward name="error" path="/errorTasca.jsp"/>

</action>

Per cada acció de la nostra aplicació tenim

– què s'executa (en aquest cas el GuardarTascaAction)

– quins paràmetres li arriben (estaran al tascaForm)

– vistes on podem anar després de executar-la

Page 85: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

La Action GuardarTascaAction

public class GuardarTascaAction extends Action {

public ActionForward execute(

ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

DynaActionForm f=(DynaActionForm)form; try {

// Crear una tasca i guardar-la obtenint les dades de

// f.get("nom") i f.get("prioritat")

return mapping.findForward("success");

} Catch (Exception e) {

return mapping.findForward("error");

}

}

}

Page 86: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Exemple de Action i Vista lligades

La Action obté una llista de tasques...

Tasca[] tasques= gt.llistar();

request.setAttribute("tasques",tasques);

return mapping.findForward("success");

La vista visualitza les dades colocades per la Action...

<c:forEach var="tasca" items="${tasques}">

<tr>

<td>${tasca.id}</td>

<td>${tasca.nom}</td>

<td>${tasca.prioritat}</td>

</c:forEach>

Page 87: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Flux d'una aplicació struts

Demanem una URL struts (normalment acaba en .do) Totes aquestes URL van a parar al servlet controlador Empaquetem els paràmetres (si n'hi ha) en la classe de tipus

ActionForm especificada. Mirem al fitxer XML quina classe hem d'executar per la URL

que ens han demant Executem el mètode execute() de la ActionClass que toqui

passant-li el ActionForm amb els paràmetres La Action retorna quina vista ha de mostrar i posa les dades

necessaries a l'entorn. La vista es construeix consultant les dades que la Action li

proporciona

Page 88: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Flux d'una aplicació struts

Page 89: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Més sobre struts

D'entrada sembla complicat En una aplicació gran, ajuda molt a la organització. No ens obliga a utilitzar tecnologies concretes

– domini o persistència com volguem

– Les vistes, no necessàriament JSP

Que mes permet?

– Sistematitzar les validacions. Podem fer que el ActionForm validi els valors entrats, per programa o per configuració

– Plugin Tiles. Idea de jsp:include

– Internacionalització dels missatges (fitxer properties)

Page 90: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Conclusions sobre Struts

Struts es un dels primers frameworks MVC que va sortir per Java

Permet automatitzar processos que poden donar lloc a errors com per exemple les validacions

Ordena el nostre codi

– Les Actions no tenen res de codi de presentació

– El pas de paràmetres cap a les accions queda especificat a través de les propietats dels objectes Form

– Les vistes no "executen" res, només mostren

– El nostre struts-config.xml mostra el flux de l'aplicació (el podriem dibuixar com un diagrama d'estats)

Page 91: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Spring

Es un framework de frameworks, pero en aquest cas ens centrarem en el contenidor lleuger

Serveix per organizar millor la nostra capa de domini

– Programació basada en interfaces

– Èmfasi en el baix acoblament de les classes

Exemple: l'aplicació de les tasques

– Tindrem la classe "Tasca"

– Necessitarem un GestorTasques, que serà una façana de tot el nostre sistema

– El GestorTasques utilitzarà un TascaDAO per guardar les tasques. Per ara, en tindrem un de prova

Page 92: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Capa de domini de l’aplicació d’exemple

GestorTasques

TascaDAO

<<interface>>

ProvesTascaDAO JDBCTascaDAO

DataSource

Tasca

Page 93: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Si no utilitzem Spring...

Qui crea el gestorTasques? Es crea en cada petició?

– Podem utilitzar el patró Singleton

Si el gestorSoci utilitza un objecte de tipus DAO, li especifiquem quin es per programa?

– Si, es clar. Com a molt podriem tenir un fitxer de propietats si volem que es pugui canviar

Com li diem la base de dades al DAO?

– Utilitzarà JNDI per anar-la a buscar o bé la configurarem en un fitxer de propietats també

Page 94: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Si utilitzem Spring...

Spring ens permetrà

– Llegir un fitxer de configuració on li diem els objectes que formen el nostre sistema

– Si una classe depèn de una altra, farem aquesta dependència explícita al fitxer. A nivell de programació, tindrem un “setter” d’aquesta propietat.

– Spring fa de “muntador” de l’aplicació

Es basa en Inversion of Control o principi de Hollywood,

– "No ens truquis, dona'ns el número i et truquem nosaltres"

– No creis els objectes. Deixa un "set" i te l'assignarà Spring

Page 95: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Què hauríem d’afegir a les nostres classes?

El nostre DAO necessita un Datasource? Li afegimDataSource setDataSource (Datasource ds) {

this.ds=ds;

}

El nostre GestorTasques necessita un TascaDAO?TascaDAO setTascaDAO (TascaDAO dao) {

this.dao=dao;

}

Fixem-nos que TascaDAO es un interface. Aixo permet canviar facilment la implementació que utilitzarà el GestorTasques tocant la configuració de Spring.

Page 96: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Fitxer de configuració Spring (proves)

<beans>

<bean id="gestorTasques" class="exemple.GestorTasques">

<property name="tascaDAO">

<ref bean="provesTascaDAO"/>

</property>

</bean>

<bean id="provesTascaDAO" class="exemple.ProvesTascaDAO">

<property name="tasques">

<list>

<bean class="exemple.Tasca">

<property name="id" value="1"/>

<property name="nom" value="Acabar transparencies"/>

<property name="prioritat" value="1"/>

</bean> ...

</list>

</property>

</bean>

</beans>

Page 97: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Fitxer de configuració real

<beans>

<bean id="mysqlDataSource" destroy-method="close">

<property name="driverClassName" value="com.mysql.jdbc.Driver" />

<property name="url" value="jdbc:mysql://localhost:3306/aules" />

<property name="username" value="aules" />

</bean>

<bean id="gestorTasques" class="exemple.GestorTasques">

<property name="tascaDAO">

<ref bean="JDBCTascaDAO"/>

</property>

</bean>

<bean id="JDBCTascaDAO" class="exemple.JDBCTascaDAO">

<property name="dataSource">

<ref bean="mysqlDataSource"/>

</property>

</bean>

</beans>

Page 98: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Què fa Spring amb aixo?

El contenidor (que s'anomena ApplicationContext) només es crearà una vegada, quan s’inicialitzi l’aplicació, que pot ser web o noApplicationContext ctx = new

ClassPathXmlApplicationContext("applicationContext.xml");

En el moment en que inicialitzem el contenidor...

– Spring parsejarà el fitxer i crearà les instàncies

– Cridarà els “setters” de les propietats per passar-li els paràmetres especificats

A través del contenidor, podrem accedir a les instàncies creadesctx.getBean("gestorTasques"));

Page 99: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Què mes ens permet Spring?

Permet fer referències per tipus

– exemple: crear un DataSource i passar-lo a totes les classes que en necessitin un

Spring JDBC

– Exepcions “amb sentit”

– Ens podem oblidar d’obrir i tancar connexions Spring MVC

– Similar a struts, però integrat al contenidor. AOP (Aspect Oriented Programming)

– Permet configurar codi a executar quan cridem un mètode d’un bean obtingut de Spring. Interceptors.

– Serveix per marcar transaccions

Page 100: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Conclusions sobre Spring

Es un framework poc habitual: no ens condiciona massa la forma de programar, només ens estructura

Un cop entès el concepte de Inversion of Control i utilitzat de forma bàsica, no es gens complicat

Les nostres classes no son conscients de que l’estem utilitzant. Fins i tot podriem arribar a canviar-lo o prescindir d’un framework de la capa de domini

Únic punt negatiu: els fitxers de configuració son horribles.

Page 101: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Hibernate

Intenta solucionar l’etern problema de la persistència

– Per un costat tenim la nostra aplicació amb objectes

– Per l’altre, una BD relacional (mysql, Oracle…)

– Com les casem? hibernate Hibernate es un mapejador Objecte-Relacional. No és un

framework tal i com l’hem definit. Fitxer XML amb

– els mapejos propietats <-> columnes

– relacions entre elles Ofereix una capa de persistència pels objectes A la vegada, ofereix una forma de consultar-los

– Igual que SQL, pero amb els objectes

Page 102: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Hibernate: exemple de guardar un objecte

// ...Configuration cfg = new Configuration() .addClass(Product.class) .addClass(Order.class) .addClass(OrderItem.class);

// ...Order order = new Order();order.addProduct(milk, 3);order.addProduct(coffee, 5);

// ...sess = sf.openSession();Transaction t = sess.beginTransaction();sess.save(order);t.commit();sess.close();

Page 103: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Hibernate: exemple de consulta

// ...String query = "select o from o " + "in class test.hibernate.Order " + "where o.priceTotal > :priceTotalLower " + "and o.priceTotal < :priceTotalUpper";

// ... Query q = sess.createQuery(query);q.setDouble("priceTotalLower", Double.parseDouble(args[0]));q.setDouble("priceTotalUpper", Double.parseDouble(args[1]));

List list = q.list();// ...sess.close();// ...

Page 104: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Relacions

Implementa relacions entre classes Exemple: equips i jugadors

<hibernate-mapping> <class name="example.Team" table="teams"> <id name="id" column="team_id" type="long" unsaved-value="null"> <generator class="hilo"/> </id> <property name="name" column="team_name" type="string" length="15" not-null="true"/> <property name="city" column="city" type="string" length="15" not-null="true"/> <set name="players" cascade="all" inverse="true" lazy="true"> <key column="team_id"/> <one-to-many class="example.Player"/> </set> </class></hibernate-mapping>

Page 105: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Com soluciona les relacions?

A partir d’aquest fitxer, genera l’esquelet de la classe Bidireccional:

– Des del jugador, podem accedir a l’equip (getTeam)

– Des de l’equip podem accedir al jugadors (getPlayers)

– Ens torna un Set (conjunt) de resultats Lazy:

– Quan carreguem un jugador, no carrega els jugadors

– Quan volem els jugadors, s’accedeix a BD

– No podem tancar la sessió Cascade

– Mateix sentit que a bases de dades

Page 106: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Hibernate a l'exemple de les tasques

Farem un DAO utilitzant Hibernate Li passarem la configuració amb Spring Mapejarem la taula "tasques"

<hibernate-mapping>

<class name="exemple.Tasca" table="TASQUES">

<id name="id" column="ID">

<generator class="increment"/>

</id>

<property name="nom" column="NOM"/>

<property name="prioritat" column="PRIORITAT"/>

</class>

</hibernate-mapping>

Page 107: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Conclusions sobre Hibernate

Hibernate posa una capa important respecte a executar SQL contra una base de dades

– Pot tenir mètodes de cache que acceleren les nostres consultes i optimitzar la velocitat

– Pot generar un SQL molt més costós que el que podriem generar nosaltres mateixos directament

En general, Hibernate requereix uns coneixements importants de la plataforma per treure el màxim rendiment

Consell particular: Si no us espanta el SQL, utilitzeu JDBCTemplate. No es tan sofisticat, pero dona més sensació de control.

Page 108: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Resumint l'exemple

Amb Struts hem fet la capa de presentació

– pantalles amb JSP

– Controlador amb les "Action" Amb Spring hem organitzat la capa de domini

– Creació i configuració dels gestors

– Configuració general de l'aplicació Amb Hibernate hem accedit a la BD

– Hem accedit a una base de dades relacional sense abandonar la orientació a objectes

Hem utilitzat les 3 tecnologies conjuntament sense interferències entre elles

Page 109: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Relació entre Struts i Spring

Plugin de struts al fitxer struts-config.xml

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

<set-property property="contextConfigLocation"

value="/WEB-INF/applicationContext.xml"/></plug-in>

Canviem les ActionClass per ActionSupport

public class EditarTascaAction extends ActionSupport {

public ActionForward execute(...) throws Exception {

ApplicationContext ctx = getWebApplicationContext();

GestorTasques gt= (GestorTasques)(ctx.getBean("gestorTasques"));

Page 110: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Cap on anem?

Struts 2

– Evolució de Struts, amb alguns canvis importants

– Ha agafat idees de Spring Anotacions

– Novetat de Java 1.5

– Permet fer comentaris que després es puguin llegir, es a dir, afegir informació a les classes, mètodes i propietats

– Permet estalviar-nos alguns fitxers de configuració

– Exemples: columnes de BD a que equivalen propietats

Page 111: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Necessitem eines!

xDoclet

– Generador automàtic de fitxers a partir de “meta-informacio” als fitxers Java

– Es com un JavaDoc ++, les anotacions ho han copiat Eclipse + plugins adequats

– Entorn de desenvolupament extensible

– Desenvolupar amb el plugin adequat pot suposar que una tecnologia sigui o no usable.

ANT i Maven

– Entorns per compilar, similar al Make Junit

– Framework per proves unitaries.

Page 112: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Conclusions de frameworks

Utilitzar Spring, Struts i Hibernate es complex La corba d'aprenentatge es important Costa dominar-los al 100% Canviem programació per configuració de fitxers XML Tenim més codi del que voldríem, tot i que tenim eines que

ens ajuden a generar-lo Tot es dolent? No

– Ens obliguen a fer la nostra aplicació més ordenada

– Importants per la mantenibilitat

Existexen frameworks centrats en simplificar? SI

Page 113: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Ruby on Rails

Ruby és un llenguatge de programació (poc conegut) Rails és un framework per programar aplicacions web Diferència:

– No fa servir fitxers XML i molt poca configuració

– Intenta reduir el codi al màxim

– Es publicita amb videos tipus teletienda

Voleu provar?

– http://instantrails.rubyforge.org/wiki/wiki.pl

– Llibre “Agile Web Development with Rails“

Page 114: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

L'exemple de les tasques (I)

Pas 1: crear l’aplicació

$ rails tasques Pas 2: configurar la BD

– Tocar el fitxer config/database.yml (no XML!) Pas 3: crear la taula i la base de dades al mysql

create table tasks(id int auto_increment primary key, nom char(50), prioritat integer(1));

Pas 4: “programar” el model

– No hem de crear ni configurar res

$ ruby script/generate model task

Page 115: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

L’exemple de les tasques (II)

Pas 5: crear el controlador i les vistes

$ ruby script/generate controller task

i editar el fitxer que esta a app\controllers

Class TaskController < ApplicationController

scaffold :task

end

Pas 6: executar el servidor

$ ruby script/server

Pas 7: provar l'aplicació

http://localhost:3000/task

Page 116: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Conclusions sobre rails

Aire fresc en el mon dels frameworks “Convention over configuration”

– Suposarem que les coses es diuen d’una certa forma

– Guanyem coherència i estalviem errors Substitueix XML per un format mes senzill Mapeig totalment transparent objecte/relacional URL amb sentit (edit, new...) Podem posar en marxa un prototip en un temps mínim Però... Convencions innecessàries basades en l’anglès (plurals i

noms de columnes) Ruby es un llenguatge desconegut i aixo fa por

Page 117: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

A l’ombra de rails...

Django (Python)

– Parteix de classes i no de la BD Symfony (PHP) CakePHP (PHP)

– Necessiten de les novetats de PHP5 Trails (i també Grails)

– Internament, utilitza Spring, Tapestry i Hibernate

Rails ha revolucionat el mon dels frameworks, creant-ne de mes alt nivell

Page 118: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIBJordi Girona 1-3, Mòdul B6E-08034 Barcelona, Spain

[email protected]://www.fib.upc.es/LCFIB/

La seguretat en entorns web: servidor i aplicacions

Page 119: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Seguretat

De què parlarem?

– HTTPS i certificats

– Programar pensant en la seguretat

Page 120: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

HTTP

IP

TCP

SSL

IP

TCP

HTTPS

El protocol HTTPS

HTTPS és la versió encriptada de HTTP Es basa en afegir una nova capa (SSL - Secure Socket Layer)

sobre TCP/IP que permet connexions encriptades, utilitzant algorismes de clau pública i privada.

SSL és aplicable a altres protocols també

Page 121: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Comunicació segura en web

Què ens interessa quan ens connectem a un web segur?

– Comunicació encriptada

– Assegurar-nos que ens comuniquem amb el web real

– NO és necessari que nosaltres tinguem una clau

L’establiment de la connexió: Handshaking

– Es negocia un protocol d’escriptació amb clau simètrica

– El servidor ens passa la seva clau pública

– Es passa encriptada una clau de sessió

– Encriptem les comunicacions amb aquesta clau

Page 122: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

L'autenticitat de les claus

Qualsevol persona pot generar una clau pública i una privada i passar la seva clau pública dient que és la d'una altra persona

Pringadillo.com

Clau pública (real) de Amazon

Clau pública (falsa) de Amazon

Com sabem quina és la bona?

Page 123: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Les autoritats de certificació

Solució: les autoritats de certificació (CA) Fan de notaris: expedeixen certificats en els quals associen

una clau pública i una identitat, amb una data de caducitat Quan volem enviar la nostra clau pública a algú, el que

realment enviem és un certificat. El receptor pot comprovar a la CA si el certificat és correcte i

així assegurar-se que la clau pública correspon realment a la persona que l’ha enviat.

El client només hauria d'acceptar com a bons certificats signats per autoritats de certificació en les quals confia.

Page 124: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Què vol dir aquesta pantalla?

El navegador no té registrada l’autoritat de certificació. Pot tractar-se d’un certificat de proves

El nom que hi ha al certificat no coincideix amb el del web, o sigui que potser no és el seu

Hauríem de desconfiar i no donar al SI sense mirar que passa

Page 125: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Exemple de certificat en HTTPS

Així ens ensenya Internet Explorer un certificat...

Page 126: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Un pas més: Autentificació per certificat

Els clients també poden tenir un certificat propi per assegurar la seva identitat

Un servidor segur, podem obligar a exigir certificat al client per accedir a certes parts.

El servidor ha de tenir el certificat de l’autoritat certificadora del client per poder validar

Esquema complet de la comunicació segura.

El certificat es guarda encriptat al disc dur del navegador i per utilitzar-lo ens demanarà un password (PIN) per desencriptar

El password no viatja per la xarxa: únicament el certificat El certificat pot estar en una targeta: màxima seguretat

Page 127: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Les grans preguntes sobre Certificats i HTTPS

Què vol dir que no es confia en l’autoritat de certificació que ha emès el certificat?

– Per exemple, el certificat de raco.fib.upc.es està generat per esCERT (escert.upc.es), una autoritat no reconeguda per cap navegador d’entrada

– S’ha d’instalar el certificat de l’autoritat a la nostra màquina. En aquest cas, esta a http://escert.upc.es/_certs/escert_raiz.crt

Compte! Un error d’aquest tipus també pot indicar que es tracta d’un certificat “autosignat”, es a dir, de proves. Cap web “oficial” hauria de tenir un certificat d’aquest estil.

Page 128: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Les grans preguntes sobre Certificats i HTTPS

Vull fer proves amb un servidor segur a casa. Què he de fer?

– Per fer proves, podem utilitzar les utilitats OpenSSL (www.openssl.org) per generar certificats autosignats.

– Aquestes utilitats també permeten generar peticions de certificat que s’envien a una CA amb la idea que ens retornin un certificat vàlid signat

– Si utilitzem Apache, hem d’assegurar-nos de tenir el modul mod_ssl i dir-li on està el nostre certificat

Page 129: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Les grans preguntes sobre Certificats i HTTPS

Com obtinc un certificat personal?

– Si el volem per fer proves, qualsevol de les grans CA, ens ofereixen certificats per 30 o 60 dies. Aquest certificat ens pot servir per encriptar mails o signar codi.

– Podem obtenir un certificat “real” de la FNMT a

http://www.cert.fnmt.es/clase2/main.htm

Per obtenir aquest certificat, serà obligatori anar “físicament” a una oficina de l’Agència Tributària.

Page 130: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Les grans preguntes sobre Certificats i HTTPS

Què són els Applets / ActiveX signats?

– Podem utilitzar un certificat per fer la signatura d’una aplicació, per assegurar que no està manipulada i qui la proporciona

Page 131: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

HTTPS és suficient?

HTTPS es basa en els algorismes de clau pública i privada. És a dir, que hem de guardar molt bé la clau privada.

Si una persona entra al sistema on es guarda la clau privada, i l'aconsegueix, pot fer-se passar per aquest sistema

Si volem tenir un grau de seguretat pràcticament total, hem de tenir una política de seguretat per evitar accessos no controlats a la nostra xarxa. Una eina important és el firewall

Hem d’estar segurs de tenir les últimes versions dels servidors i del sistema operatiu per assegurar-nos que no puguin accedir al nostre sistema a partir d’una vulnerabilitat coneguda

– Aprofitada per hackers

– Aprofitada per cucs o virus

Page 132: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Com ens poden atacar?

CGI o altres continguts dinàmics mal escrits, que no validen prou les entrades.

– Exemple: Paràmetres amb ../ Servidors mal configurats que permeten accés a llocs o codi

que no haurien de poder veure.

– Exemple: Índex de directoris Cross-side Javascript, que aprofiten la capacitat de que algú

introdueixi codi HTML a les nostres pàgines SQL Injection: possibilitat d’introduir paràmetres que

modifiquin una sentència SQL que executem. “Robar” sessions s’altres usuaris. DOS: peticions massives fins colapsar el servidor

Page 133: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Programar pensant en la seguretat

Si obrim un servidor web a l’exterior, no es un problema de seguretat greu

– Només serveix pàgines estàtiques Les aplicacions web mal programades programades poden

ser un problema se seguretat Permeten recuperar informació de la màquina Un error pot fer que poguem executar codi amb els privilegis

de l’usuari que executa el web Manipulant l’aplicació, podem fer coses que no hauriem de

poder fer … i tot aixo via web, sense arribat a entrar a la màquina! http://www.owasp.org: 10 problemes mes frequents

Page 134: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

1.- Entrades no validades

Qualsevol paràmetre que arribi a les nostres pàgines de mans del client ha de ser validat

Les validacions han de ser completes, ja que hi ha valors que es poden escriure de més d’una forma

– S’ha de validar en la forma “canonica” Podem canviar els valors que apareixen a qualsevol URL

nomes editant la línia i provant. Els camps ocults que guarden informació es poden canviar

abans d’enviar Validació al client (Javascript) no es suficient. Exemple: Seleccionem un producte amb un preu al següent

formulari enviem el preu en un camp ocult…

Page 135: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

2.- Autorització d’usuaris incorrecta

Quan un web ha d’estar protegit, moltes vegades només ens preocupem de que demani usuari i password

Quins rols poden accedir a quins serveis? Està especificat de forma declarativa? Què passa si accedim a la URL d’una pàgina que només esta

visible per un usuari privilegiat amb un usuari normal? Exemple:

– Web protegit. Sempre demana password

– Formulari que comprova que siguem “admin”

– El “action” d’aquest formulari no esta protegit Solució: seguretat declarativa sempre que es pugui. Revisar

qui pot accedir a cada pàgina

Page 136: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

3.- Problemes amb les sessions o autorització

Si aconseguim el ID de sessió d’un altre usuari, ens podem fer passar per ell temporalment.

– Podem “esnifar” el ID d’un altre usuari amb la xarxa

– Podem mirar la cookie al seu navegador

– Si esta a la URL, ens la podem copiar (difícil si es llarga) Solució: ID llargs, millor per cookies, nomes amb HTTPS, que

caduquin ràpid. Atacs de “força bruta” d’usernames i passwords. Aprofitar les preguntes per recordar el password (solen ser

més facils que un password i no sempre son personals)

– Com es diu el meu gos? Segurament molta gent ho sap Solució: bona política de passwords

Page 137: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

4.- Cross Site Javascript

Idea: fer que un altre usuari del web vagi a una pàgina on hi ha codi JavaScript escrit per nosaltres

Exemple:

– un forum, un sistema de missatges on podem enviar algo que veurà un usuari privilegiat.

– El codi, que s’afegeix a la pàgina, podria enviar la cookie de sessio (cas 3) per http a un servidor extern

– Manipular el DOM per canviar el contigut

Solució:Filtrar els tags en qualsevol paràmetre que s’envii cap a la nostra aplicació

Page 138: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

5.- Buffer Overflow

Consisteix en aprofitar que no es comproven els límits en la longitud de les dades per executar instruccions

És un problema que afecta als servidors, programats en C i que no comproven límits de longitud

Difícil d’explotar a menys que es disposi del codi font del servidor

Important! Pot afectar també als navegadors (que es més normal que no s’actualitzin) via aplicacions web

Solució: estar al corrent de les vulnerabilitats dels servidors i clients i instalar sempre la última versió

Page 139: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

6.- Injecció de codi

És un atac que implica modificar alguns dels paràmeters per fer que l’aplicació executi codi que “injectem” a l’aplicació

SQL (en l’autentificació d’usuaris)

– Select * from users where user=‘$u’ and pass=‘$p’

– Fem que $p valgui “x’ or ‘1’=‘1” Comandes de sistema operatiu

– System (“sendmail $mail”)

– Fem que $mail valgui “[email protected];rm –rf /” Directori “../”

– fopen ($fitxer)

– Li passem “../../../etc/password” Solució: Validar paràmetres

Page 140: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

7.- Tractament dels errors incorrecte

Els errors poden desvetllar informació sobre el sistema que en la nostra aplicació no donem

Versions concretes de servidors Pantalles d’error on mostra el codi que falla Errors SQL que ens permeten coneixer les taules Errors de connexió que mostren on ens intenten connectar Errors relacionats amb fitxers

– Ens mostra el path del fitxer que no troba

– Ens diu que no tenim accés (no que no existeix)

Solució: configurar els servidors de producció perque els errors no es mostrin mai en pantalla, sino en fitxers de log

Page 141: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

8.- Emmagatzemament insegur

Consisteix en el fet de guardar informació sensible de forma insegura al servidor.

Passwords per les connexions

– I si estan en un fitxer .inc i aquest fitxer es visible? Números de compte corrent

– I si podem fer SQL injection i veure aquest camp? Fitxers de configuració

– Pot ser que estiguin en un directori mapejat al web?

– Pot ser que hi poguem accedir amb ../ Solució: fer una llista de les informacions crítiques i veure que

podem fer per que no estiguin facilment disponibles

Page 142: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

9.- Denial of Service (DOS)

Consisteixen en inundar el servidor de peticions perque no pugui donar servei als seus usuaris legítims

No s’aconsegueix accés al servidor És més un acte de protesta que de hacking Solució:

– A nivell d’aplicació no n’hi ha

– Per xarxa, es pot intentar tallar l’accés a l’atacant

Page 143: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

10.- Configuració incorrecta del sistema

Deixar els exemples Comptes per defecte (amb passwords coneguts) Deixar la possibilitat del llistat de fitxers en un directori on hi

ha informació privilegiada Exemple: en PHP, fer includes de fitxers .inc que estan en un

directori visible via web. Els podrem visualitzar.

– O els posem on on son visibles

– O fem que els fitxers .inc també es considerin. Solució: mirar amb lupa les configuracions. Vigilar els valors

per defecte i treure tot el que específicament no necessitem

Page 144: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Programar pensant en la seguretat. Conclusions

Normalment, el problema es fiar-nos massa dels paràmetres que ens arriben. Validar-los en tot moment.

Assegurar-nos que coneixem be els nostres servidors i tenir les configuracions controlades.

Evitar fer coses que algú ja ha fet i ha comprovat que no té problemes de seguretat

– No tornar a implementar sistemes d’autentificació

Pensar que en qualsevol moment algu pot utilitzar les nostres pàgines de forma diferent a com fem que les utilitzin.

Page 145: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

En resum

Utilizar SSL és una condició mínima quan volem un web segur.

La màxima seguretat la obtenim amb la utilització d’un certificat per part del client.

Hem de protegir la nostra màquina tant com sigui possible per tal que ningú hi pugui accedir excepte als serveis imprescindibles

Hem de tenir sempre últimes versions de tots els servidors que poguem fer servir

Hem de programar les aplicacions pensant en la seguretat: no confiar mai en que el que ens entra l’usuari és vàlid o inofensiu

Page 146: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIBJordi Girona 1-3, Mòdul B6E-08034 Barcelona, Spain

[email protected]://www.fib.upc.es/LCFIB/

Elements d’una infrastructura web

Page 147: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

De què parlarem?

Servidors d’aplicacions i servidors web Arquitectures per alta disponibilitat Arquitectures escalables

Page 148: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Quins elements tenim?

No només és un servidor web Necessitarem a més…

– Servidors d’aplicacions

– Bases de dades

– Balancejadors

– Servidors LDAP

– Servidors d’autentificació

– Firewalls

– … Veurem amb deteniment alguns d’aquests components

Page 149: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Què és un servidor d'aplicacions?

Definició àmplia:

Un servidor d'aplicacions és el servidor que hi ha a la capa intermitja, és a dir, entre el client i les fonts de dades

Definció restrictiva:

És aquell servidor que dóna suport als "thin clients", controlant les sessions dels usuaris, executant la lògica de negoci i connectant amb el recursos back-end, ja siguin dades, transaccions o contingut, donant a més suport per alta disponibilitat.

Page 150: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Quins components hi podem trobar?

Autorització

Clients no web

ServidorWeb

Conectorsaltres

sistemes

Conectorsamb BD

CachésPortals

BD

Altres sistem

es

Gestors contingut

Alta disponibilitat

...

Webservices

Page 151: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Així… que es un servidor d’aplicacions?

Cada fabricant té una idea diferent del que és La tendència es aglutinar molts productes per donar un valor

afegir al servidor Servidor web amb mòduls per executar certes aplicacions…

es pot considerar servidor d’aplicacions? Apache + Tomcat?

La gran majoria implementen la plataforma J2EE i per tant incorporen com a element principal un contenidor de EJB

Hi ha servidor d’aplicacions d’altres plataformes (.NET, Zope)

Page 152: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Balancejadors

Elements soft o hard que ens permeten distribuir la càrrega entre diferents sistemes

Han de detectar si un sistema ha deixat de respondre per no enviar-li més peticions

Diferents algorismes

– Aleatori

– Round robin

– Per pesos, afavorint als que tenen menys feina Important trobar un equilibri entre un bon idicador de la

càrrega del servidor i que el fet de calcular-lo no el saturi més.

Page 153: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Productes balacenjadors

PLB (Pure Load Balancer)– Software, Open Source– Molt senzill. No HTTPS– Només Round Robin– Alt rendiment

Pound– Software, Open Source– Suporta HTTPS, sessions amb paràmetre i cookie

Cisco Redirector– Hardware– Accelera SSL– Algorismes per pesos (temps de resposta)– Pot funcionar en cluster

Page 154: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Alta disponibilitat / escalabilitat / rendiment

Alta disponibilitat / tolerància a fallades és el fet d’aconseguir que el nostre sistema estigui disponible al 100% encara que falli alguna cosa

Rediment (performance)és la velocitat amb la que respon un sistema per una càrrega determinada

Balanceig de càrregaés distribuir la feina entre diversos sistemes per aixi tenir més rendiment.

Escalabilitatfa referència a la facilitat amb que es pot aconseguir que un sistema tingui major rendiment afegint recursos (o sigui, sense canviar el sistema)

– vertical: augmentant recursos del servidor– horitzontal: afegint més servidors

Page 155: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Tots els conceptes estan relacionats

Si volem que un sistema sigui tolerant a fallades, normalment haurem de tenir recursos duplicats

Aquests recursos duplicats, es poden utilitzar per augmentar el rendiment, repartint la càrrega

El sistema que permet tenir els recursos duplicats, també es pot utilitzar per afegir més recursos en cas de necessitar-los

Qualsevol SPOF (single point of failure), es converteix en un coll d’ampolla en quant a rendiment i dificulta l’escalabilitat.

Page 156: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

El cercle viciós dels recursos

Els recursos dels nostres servidors son finits

– (cpu, xarxa, memoria, disc, connexions a BD…) Podem entrar en un cercle viciós:

– Si servim moltes peticions simulàniament, algun recurs començarà a esgotar-se

– Si s’esgota un recurs, tardarem més en respondre i s’acumularan les peticions

– Aixo provocarà cada vegada més peticions simultànies i un temps de resposta cada vegada més baix

– El sistema es colapsa. Conclusió: no podem servir més d’un número de peticions

per segon amb uns recursos concrets.

Page 157: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

No malgastem recursos al servidor

Al servidor web, NO fer mai peticions al DNS quan escrivim la línia al fitxer de logs

NO carregar mòduls que no necessitem En el cas d’Apache (1.3)

– Arquitectura a base de processos

– StartServers: número de processos inicial

– MaxSpareServers: processos preparats

– MaxClients: màxim absolut de processos, per evitar el cercle viciós.

Keep-alive: manté la connexió oberta

– Útil per contingut estàtic

– Inútil si hi ha molts més usuaris que processos, deixa processos ocupats

Page 158: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

No malgastem recursos a l’aplicació

Utilitzem pools de connexions

– Estalvia obrir i tancar connexions Optimitzem les consultes

– Utilitzar índexos a la BD

– Retornem només el que necessitem Intentar evitar les consultes

– Cachejar els resultats

Quan una aplicació no dona el rendiment que ha de donar, els canvis que representaran un salt qualitatiu son sempre a l’aplicació, no al servidor.

Page 159: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Aplicacions escalables

Si una aplicació no està ben feta, no serà escalable

Aplicacions sense estat.

– No tenen sessions

– No comparteixen res

– Perfectes per escalabilitat horitzontal Aplicacions que utilitzen caches

– A nivell de pàgina (normalment poc efectiu)

– A nivell de framents de pàgina

– Aplicar cache eficientment vol dir saber que es pot i que no es pot cachejar. No es pot fer gaire externament

Page 160: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Arquitectures possibles i la seva escalabilitat

Una màquina amb tot (servidor web + BD)

– Senzill

– Tenim un únic punt de fallida

– Pot no escalar verticalment

Una màquina per servidor web i una per BD

– Podem adaptar millor les màquines a les necessitats

– Seguim tenint punts de fallada

Page 161: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Arquitectures possibles i la seva escalabilitat

Multiples servidors web (balancejats) / una base de dades

– Necessitem un balancejador (web o soft)

– És la solució més habitual

– Fàcil escalar horitzontalment els servidors web

– Podem colapsar la BD

Molts servidors web / moltes BD

– No tenim punts de fallada, excepte els balancejadors

– Tenim un sistema més complex

– Les BD han de ser facilment replicables, per exemple si les actualitzacions es fan en una única instància.

Page 162: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Arquitectures amb servidor d’aplicacions

Afegim una capa més Servidor web i servidor d’aplicacions poden compartir màquina En màquines diferents, cada servidor web pot comunicar-se

amb el seu propi servidor d’aplicacions o entre tots.

Balacejar els servidors pot aportar un nivell extra de complexitat innecessari

Servidor

web

Servidor

web

Servidor aplicacio

Servidor aplicacio

Balancejadorweb

Page 163: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Factors a tenir en compte

Balanceig web

– Sticky sessions: una vegada començada una sessió, no la pot servir una altra màquina.

– Si un dels servidors web cau, com ho detecta el balancejador?

– Com repartim la carrega?

Cluster de servidors d’aplicacions

– Cada servidor web només es comunica amb el seu servidor d’aplicacions?

– S’ha de replicar la informació de les sessions perque qualsevol servidor d’aplicacions pugui continuar una sessió si cau el que la gestionava originalment?

Page 164: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Exemple: Tomcat

Considerarem Tomcat un servidor d’aplicacions Utilitzarem Apache davant de Tomcat per enviar-li únicament

les peticions relacionades amb Java Forma de lligar tots 2: mod_jk Com implementa sticky sessions Tomcat?

– Configurem cada Tomcat per afegir un prefix al valor de la cookie de sessió que genera

– Mod_jk buscar aquest valor i en funció d’ell l’envia a un servidor o un altre

Tomcat pot funcionar en cluster i replicar les sessions Podem “serialitzar” les sessions a BD per recupera-se d’una

caiguda

Page 165: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Consideracions

Per fer el cluster de Tomcats necessitem un interface de xarxa diferent o generarem molt tràfic

Si no fem el cluster, obliguem a recomençar la sessió Important: si la nostra aplicació no té estat, podem assignar-la

a qualsevol Tomcat. Conclusió: Escalabilitat a partir de la senzillesa

Tomcat

Tomcat

Apache+ mod_jk

Page 166: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Conclusions sobre alta disponibilitat / escalabilitat

El fet de posar un servidor d’aplicacions no garantitza res, hi ha una feina de configuració important.

El disseny de l’aplicació es importantíssim. Quan més senzilla sigui una aplicació, més facil serà fer-la

tolerant a fallades i escalable. Si compliquem l’arquitectura, hem d’anar en compte de no

crear punts de fallada o colls d’ampolla:

– Què passa si cau el balancejador hard?

– Què passa si cau la base de dades?

– Podem detectar el fet que un servei “es quedi tonto”?

– Pot ser que el servidor aguanti pero que se’ns colapsi l’ample de banda?

Page 167: LCFIB Jordi Girona 1-3, Mòdul B6 E-08034 Barcelona, Spain lcfib@fib.upc.edu  Tecnologies web Una visió global de les tecnologies

LCFIB- 2008

Per consultes sobre el seminari o temes web en general

[email protected]

Per suggerències o problemes amb el web de la FIB

[email protected]

Per suggerències o problemes amb quasevol tema

dels servidors o aules informàtiques de la FIB

[email protected]