JSP – Java Server Pages -...

32
1 1 © M. Badella G. Malnati, 2003-04 A.A. 2003-04 Java Server Pages 2 © M. Badella G. Malnati, 2002-04 Programmazione Web I JSP – Java Server Pages Documenti testuali che descrivono: come elaborare una richiesta … … per produrre una risposta … … in base ai parametri acquisiti JSP è un modello di programmazione basato su Java Utilizzato per generare contenuti web in modo dinamico Si poggia sul modello dei servlet Una pagina JSP contiene testo (HTML/XML/…) codice Java opportunamente “marcato” Direttive per l’ambiente di esecuzione

Transcript of JSP – Java Server Pages -...

1

1

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

A.A. 2003-04

Java Server Pages

2

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

JSP – Java Server Pages

Documenti testuali che descrivono:come elaborare una richiesta …… per produrre una risposta …… in base ai parametri acquisiti

JSP è un modello di programmazione basato su Java

Utilizzato per generare contenuti web in modo dinamicoSi poggia sul modello dei servlet

Una pagina JSP contienetesto (HTML/XML/…)codice Java opportunamente “marcato”Direttive per l’ambiente di esecuzione…

2

3

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Il modello

Le pagine JSP “vivono” all’interno di un contenitore che ne gestisce le interazioni

Gestione del protocollo HTTP (raccolta delle richieste, invio delle risposte)Gestione delle sessioni

Contenitore JSP

Socket

Gestione HTTP

Dat

i ses

sion

e

PagineJSP

4

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Creazione dinamica di pagine HTML (1)

JSP è un approccio alla programmazione lato serverPermette di produrre contenuti dinamici che possono essere visualizzati da un generico browser

Le pagine JSP sono elaborate dal contenitore (applicationserver), che le trasforma in codice eseguibileI dati generati dall’esecuzione del codice così ottenuto vengono inviati al client

Il client non vede mai la pagina JSP originale, ma solo il risultato della sua esecuzione

3

5

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Creazione dinamica di pagine HTML (2)

Le pagine JSP mettono in risalto la struttura del messaggio da generare nella risposta

Contenuto HTML, XML, testo…La presenza di frammenti di codice Java all’interno di una pagina permette di personalizzare dinamicamente il contenuto inviato:

È possibile avvalersi di componenti modulari per ridurre la quantità di codice ed aumentare la chiarezza della logica sottostante

6

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Esempio<html>

<head><title>Hello World</head>

</head><body><h1>Hello, World</h1>It’s<%= (new java.util.Date()).toString()

%>and all is well.

</body></html>

4

7

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

VantaggiSeparazione del contenuto statico da quello generato dinamicamenteConsente di…

Accedere a databaseRaccogliere informazioni tramite formModificare il contenuto delle pagine Web senza cambiare il codice HTML di impaginazioneAccedere a dati presenti sul file system del server…

Indipendenza dalla piattaformaEstensibilità

JavaBean e Tag customRiutilizzo dei componenti

Promuove l’utilizzo di JavaBeans e Enterprise JavaBeans

8

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Modello operativo (1)

Passi:1. Il contenitore riceve la richiesta della pagina JSP (direttamente o

tramite un server HTTP generico)2. Il contenitore identifica il file richiesto e, tramite un apposito

programma (pageCompiler), lo trasforma in codice sorgente Java

3. Il compilatore Java compila il codice sorgente prodotto e lo carica in memoria

4. La richiesta ricevuta con i relativi parametri viene inoltrata alla classe generata (servlet) che la gestisce

5. Il risultato dell’elaborazione viene restituito al client

Se giungono richieste ulteriori per la stessa pagina, i passi 2 e 3 vengono omessi

Si confronta la data del file che contiene la classe con la data del file sorgente JSP per garantire l’allineamento tra le versioni

5

9

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

JSP Container

Modello operativo (2)

PageCompile(.java)

Java Compiler(.class)

Servletsloaded

.class

JVMHTML

page.jsp

10

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Modello operativo (3)

JSP Container

Servletsloaded

.class

JVMHTML

page.jsp

6

11

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Scheletro di una pagina JSP

<HTML><HEAD><TITLE> HelloJSP1</TITLE></HEAD><BODY><H1>Hello JSP - Example 1 </H1><%-- JSPComments --%><% Scriptlets %><%! Declarations %>

<jsp:useBeanid="textProvider"class="exampleBean.HelloJSP1"scope="request">

</jsp:useBean>

<B><%= textProvider.getTextMessage() %></B></BODY></HTML>

Codice HTML standard

Elementi JSP

JavaBean

Invocazione di un metodo su un Bean

12

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Componenti

Le pagine JSP sono composte di tag HTML standard e da tag JSPI tag JSP possono essere classificati come:

CommentiDirettiveUtilizzo di componenti (javaBean)Manipolazione di variabili ed espressioniEsecuzione condizionaleIterazioneAccesso al codice a basso livello (scriptlet)

7

13

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Commenti

I commenti HTML sono trasmessi al client(che provvede ad ignorarli)<!-- comments … -- >

I commenti JSP vengono rimossi dal compilatore <%-- comments … --%>

14

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

DirettiveUna direttiva JSP è una “indicazione” per il compilatore JSP

Normalmente appare all’inizio di una pagina<%@ directive attribute1="value1"

...attributeN="valueN" %>

page: permette di importare package, definire il tipo mimedella risposta, indicare la pagina cui notificare eventuali eccezioni,…<%@ page import=“java.util.*” %><%@ page contentType=“text/xml” %><%@ page errorPage=“error.jsp” %>

include: utilizzata per inserire nel documento JSP una pagina HTML, delle direttive, …<%@ include file=“copyright.html” %>

8

15

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Variabili JSP

Un’applicazione web spesso richiede che l’interazione con l’utente avvenga in passi successivi

Al termine di ogni passo occorre memorizzare (temporaneamente) i dati/le richieste introdotti e/o il risultato della loro elaborazionePer questo motivo si usano le variabili

Una variabile è caratterizzata daUn nome (sequenza di caratteri)Un valore (può essere un dato complesso)Un ambito (scope), che ne definisce la durata

16

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Utilizzo delle variabili (1)

<c:set var=“nome” value=“valore” scope=“ambito” />

Assegna alla variabile (di tipo elementare) nome il valore specificato e la colloca nel relativo ambito (request, session, page, application)Si può anche scrivere <c:set var=“nome”>valore</c:set>

<c:set target=“nome” property=“proprietà” value=“valore” />

Assegna il valore specificato all’attributo proprietà della variabile nome

9

17

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Utilizzo delle variabili (2)

<c:out value=“espressione” escapeXml=“true/false”default=“valore” />

Stampa il risultato della valutazione dell’espressioneescapeXml permette di trasformare gli eventuali tag contenuti nel risultato in caratteri stampabiliNel caso in cui il risultato dell’espressione sia nullo, viene stampato il valore di default

18

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Esempio

<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

...<c:set var=“indirizzo” value=“${param.indirizzo}”

scope=“session” /><c:set var=“città” value=“${param.città}”

scope=“session” /><p>Destinazione:

<b><c:out value=“${indirizzo} ${città}”default=“non specificata” /></b>

</p>...

10

19

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Espressioni dinamiche

La creazione di pagine dinamiche richiede la capacità di effettuare elaborazioni sui dati in ingresso

Gli scriptlet permettono di farlo, ma richiedono la capacità di programmare in Java

A partire dalla versione 2.0, è stato introdotto in modo generalizzato il linguaggio delle espressioni dinamiche

Obiettivo: semplificare la scrittura di pagine JSP per i “non programmatori”

20

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Espressioni dinamiche:sintassi (1)

Formato generale: ${ Expr }L’espressione può contenere:

Il nome di una variabile contenuta nella pagina, nella richiesta, nella sessione o nell’applicazione web

o Nella valutazione, il nome viene sostituito dal valore della variabile

o Se il nome non viene trovato, viene restituito ‘null’Una costante (numerica o stringa)Una combinazione di valori (costanti/variabili) espressa tramite opportuni operatori

11

21

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Espressioni dinamiche:sintassi (2)

Nel caso di variabili, se queste sono associate ad oggetti complessi, è possibile accedere alle relative proprietà tramite la notazione

variabile.proprietàSe la variabile contiene un insieme di valori associati ad un nome (ovvero se è una mappa), si può accedere allo specifico valore tramite la notazione

variabile[ parametro]

22

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Espressioni dinamiche:sintassi (3)

Alcuni nomi riservati indicano particolari elementi

${cookie.crumb}Accede al cookie di nome “crumb”${param.password}Accede al parametro di nome “password”${header[“User-Agent”]}Accede alla header HTTP di nome “User-Agent”${pageContext.request.remoteAddr}Accede all’indirizzo del client che ha originato la richiesta

12

23

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Espressioni dinamiche:operazioni

Aritmetiche: +, -, *, / (div), % (mod)${stockQuote* 1.12}

Relazionali: == (eq), != (ne), < (lt), > (gt), <=(ge), >= (le)

${stockQuote > 10.0}Logiche: && (and) , || (or) , ! (not)

${stockQuote > 10.0 && stockQuote < 12.0}Di presenza: empty

${empty stockQuote}

24

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Esecuzione condizionale

E’ possibile includere od escludere porzioni di codice in funzione del valore di una data espressione<c:if test=“espressione”>...</c:if>

Esegue il codice racchiuso solo se l’espressione è vera<c:choose>

<c:when test=“exp1”>...</c:when><c:when test=“exp2”>...</c:when><c:otherwise>...</c:otherwise>

</c:choose>Esegue il blocco racchiuso all’interno del primo costrutto c:when il cui test è verificatoSe nessuno è verificato esegue il blocco c:otherwise

13

25

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Esempio<%@ taglib prefix=“c”

uri=“http://java.sun.com/jsp/jstl/core” %>...<c:choose>

<c:when test=“${param.bottone==‘invia’}”>Elabora i dati inviati

</c:when><c:when test=“${param.bottone==‘correggi’}”>

Correggi i dati precedenti</c:when><c:otherwise>

Visualizza modulo iniziale</c:otherwise>

</c:choose>...

26

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Iterazione

<c:forEach var=“nome” items=“espressione”>

...</c:forEach>

Ripete l’esecuzione del blocco racchiuso per ogni elemento presente all’interno dell’espressioneL’elemento corrente viene assegnato, di volta in volta, alla variabile nomeL’espressione deve rappresentare una collezione di valori

14

27

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Esempio<%@ taglib prefix=“c”

uri=“http://java.sun.com/jsp/jstl/core” %>...<table>

<c:forEach var=”c” items=”${customers}”><tr><td>${c}</td></tr>

</c:forEach></table>...

28

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Interazione lato server

Quando si elabora una richiesta proveniente da una form, occorre esaminare i dati trasferiti e determinare il valore dei singoli parametri

In base a tali valori, potrà essere modificato lo stato dell’applicazione e definita una nuova vista da proporre all’utenteNella tecnologia JSP, si può utilizzare il linguaggio di scripting dinamico per accedere ai parametri ed effettuare le operazioni connesse

15

29

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Accedere ai parametri

La variabile predefinita param offre l’accesso ai singoli parametri contenuti nella richiestaDue notazioni:

${param.nomeParametro}forma più compatta, si usa quando il nome del parametro è noto a priori (costante)${param[‘nomeParametro’]}${param[variabile]}se si omettono gli apici, il contenuto delle parentesi quadre viene interpretato come nome di una variabile il cui valore indica il nome del parametro cui si fa riferimento

30

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Esempio<html>... <body>...<form ...>

Nome:<input type=“text”

name=“nome”value=“”>

Cognome:<input type=“text”

name=“cognome”value=“”>

<input type=“submit” value=“ok”></form>...</body></html>

...<c:set var=“n”

value=“${param[‘nome’]}”scope=“session”>

<c:set var=“c”value=“${param.cognome}”scope=“session”>

...<c:choose>

<c:when test=“${empty n}”>manca il nome!

</c:when><c:when test=“${empty c}”>

manca il cognome!</c:when>

</c:choose> ...

16

31

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Parametri multipliSe all’interno di una form sono presenti più campi di ingresso con lo stesso nome, all’atto dell’invio vengono associati più valori allo stesso parametro

Nella variabile param viene memorizzato il primoSe occorre conoscere tutti i valori, occorre utilizzare la variabile paramValues, che restituisce una lista

Esempio:<c:forEach var=“v”

items= “${paramValues.nome}”><c:out value=“${v}”>

</c:forEach>

32

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Accesso dinamico ai parametri

La variabile paramValues permette anche di conoscere dinamicamente i nomi dei parametri ricevutiEsempio:

<c:forEach var="aParam" items="${paramValues}">Parametro: ${aParam.key}Valori associati:

<c:forEach var="aValue" items="${aParam.value}">${aValue}

</c:forEach><br>

</c:forEach>

17

33

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

JavaBean

Componenti Java utilizzabili nelle pagine JSPMemorizzano lo stato del modello

Classi Java regolari che devono rispettare alcuni vincoli

Implementa l’interfaccia SerializableDispone di un costruttore pubblico privo di argomenti

Espongono “attributi” accessibili tramite metodi SET e GET

Per rendere accessibile l’attributo “attr” di tipo “X”, il beanoffre i metodi:

o public “X” getAttr()o public void setAttr(“X” value)

34

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Utilizzo di JavaBean (1)<jsp:useBean id=“beanName” class=“class_name” scope=“scope” />

Inserisce il JavaBean all’interno della pagina“beanName” è il nome di riferimento

o Unico all’interno della paginao Utilizzato per fare accesso ai metodi e agli attributi del

bean

“className” è il nome completo della classe“scope” indica la durata della vita del componente (request/session/page)

18

35

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Utilizzo di JavaBean (2)

<jsp:setPropertyname=“beanName” property=“propertyName” value=“newValue” />

Assegna il valore newValue all’attributo propertyName del JavaBean beanName

<jsp:getProperty name=“beanName” property=“propertyName” />

Inserisce nel flusso di uscita il valore dell’attributo specificato

36

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Utilizzo di JavaBean (3)

I JavaBean risultano particolarmente adatti per accedere ai valori inviati tramite formHTML<jsp:setProperty

name=“beanName” property=“*” />Assegna al bean indicato tutte le proprietà il cui nome coincide con il nome di un parametro contenuto nella richiesta Il valore assegnato è il valore del parametro stesso

19

37

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Composizione di pagine

<jsp:include page="URL" flush="true"/>

Inserisce la pagina indicata dalla URL durante l’esecuzione (non durante la compilazione, come la direttiva include)

<jsp:forward page="URL" />

La pagina JSP viene “ridirezionata” alla URL indicataUtile per separare la porzione di codice in cui si elabora la richiesta da quella responsabile della visualizzazione

38

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

JSP Scriptlet (1)

Frammenti di codice Java che sono incapsulati in una pagina JSP

<% scriptlet code %>

Forniscono piccoli pezzi di logica che modifica dinamicamente il codice HTML

Sono inseriti testualmente nel codice generato:

Vengono compilati all’atto della compilazione del servlet

20

39

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

JSP Scriptlet (2)

<% String queryData=request.getQueryString();out.println("Attached GET data: "+queryData); %>…

<% if (Calendar_Time.AM_PM== Calendar.AM) { %>How are you this morning,

<% } else { %>How are you this afternoon,

<% } %>

40

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

JSP Scriptlet: dichiarazioni

Un blocco che definisce variabili e metodi Java

Accessibili al codice presense nella pagina JSP<%! Dichiarazione %>

Esempio:<%!private int getDateCount = 0;private String getDate(GergorianCalendar gcl){ …

}%>

21

41

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

JSP scriptlet:espressioni

Frammenti di codice che producono un risultato (tipo elementare o oggetto trasformato in stringa)<%= expression %>

L’espressione non viene terminata da “;”

Utilizzati per generare testo dinamicamenteEsempio:<%= getDate(new GregorianCalendar()) %><%= incrementCounter() %>

42

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Scriptlet:variabili predefinite

Anche negli scriptlet è possibile fare accesso a variabili predefinite per consentire l’interazione con l’utente

request (HttpServletRequest)o Contiene le informazioni relative alla richiesta (parametri,

header, cookies, …)response ( HttpServletResponse)

o Incapsula la risposta: offre metodi per modificarne header e contenuto

out (JspWriter): o Il flusso di caratteri destinato al client

session (HttpSession)o Modella il concetto di sessione ed offre meccanismi per

leggere/scrivere dati ad essa associati

22

43

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

HttpServletRequest

String getParameter(String name)Restituisce il valore del parametro “name”, opportunamente decodificato, indipendentemente dal metodo di richiestaRitorna null se il parametro non è stato inviato

String getMethod()Indica il metodo HTTP della richiesta

Enumeration getParameterNames()Restituisce l’elenco di tutti i parametri presenti nella richiesta

String getHeader(String headerName)Restituisce il valore di headerName, se presente nella richiesta; null altrimenti

44

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

HttpServletResponse

void setContentType(String contentType)Indica il tipo di documento ritornato nella risposta

void setStatusCode(int statusCode)Indica eventuali condizioni di errore nell’esecuzione della richiestaPer default, invia il codice 200 (OK)

void addCookie(Cookie c)Invia un cookie al client

void addHeader(String name, String value)Aggiunge una coppia name=value all’intestazione della risposta

23

45

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

HttpSession (1)

void setAttribute(String name, Object value)Memorizza l’oggetto “value” sotto il nome “name”

Object getAttribute(String name)Cerca il valore associato al nome “name”

void removeAttribute(String name)Elimina il valore associato al nome “name”

boolean isNew()Indica se la sessione è stata appena costruita o se risale ad un’interazione precedente

void invalidate()Invalida la sessione corrente, cancellandone tutti i contenuti

46

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

HttpSession (2)

Interfaccia che modella il concetto di sessione in HTTPViene mantenuta dal contenitore utilizzando meccanismi basati su cookie o riscrittura dei linkOggetto “condiviso” tra più pagine e tra invocazioni differenti della stessa pagina

Occorre sincronizzarne l’accesso!

24

47

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

JSPWriter

Estensione della classe java.io.WriterOffre i metodi print(…) e println(…) per inviare tipi elementari ed oggettiMantiene al proprio interno un buffer (la cui dimensione può essere configurata) in cui accumula le richieste di scrittura

Il metodo flush() comporta l’invio del buffer verso il clientIl metodo clear() annulla il contenuto del buffer (se non è ancora stato inviato al client)

48

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Il processo di traduzione (1)

Ogni pagina JSP viene trasformata in una classe Java

Implementa l’interfaccia javax.servlet.jsp.HttpJspPage

Un metodo principalepublic void _jspService(

HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException;

Eventuali metodi ed attributi ulteriori definiti dal programmatore

Tramite dichiarazioni

25

49

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Il processo di traduzione (2)

Il codice di _jspService è composto daCodice di inizializzazione e gestione degli errori (identico per tutte le pagine, definito dal contenitore)Il codice contenuto negli scriptlet alternato con richieste di stampa (sull’oggetto “out”) del testo compreso tra due scriptlet

50

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Il processo di traduzione (3)

<body><%String a = request.getParameter(“a”);%>Testo<% if (a!=null) { %>Altro testo<% } %>

</body>

void _jspService(req, res) {//Codice di inizializzazionetry {

out.write(“<body>”);String a=

request.getParameter(“a”);out.write(“Testo”);if (a!=null) {

out.write(“Altro testo”);}out.write(“</body>”);

} catch (Throwable t) {}

}

26

51

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Struttura di un’applicazione JSP

Un’applicazione web:Raccoglie dati e richieste di azione dall’utente……li elabora/memorizza……visualizza i risultati

Nelle pagine JSP si utilizza il paradigma MVC –Model View Controller

Il modello rappresenta lo stato attuale dell’applicazione (rispetto ad una macchina a stati)La vista deriva una presentazione dello statoIl controllore verifica i dati raccolti/ le richieste effettuate e, conseguentemente, aggiorna il modello

52

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Model/View/Controller (1)

Applicazione Web

Controllore Vista

Modello

notifica

interrogamodifica

rappresenta

Input Output

27

53

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Model/View/Controller (2)

Il modello è realizzato tramite un insieme di oggetti Java memorizzati all’interno della sessione

Tale modello deve essere inizializzato, all’atto della creazione delle sessione, con opportuni valoriNormalmente il modello descrive anche la vista corrente

Il controllore è rappresentato da codice che valida i parametri ricevuti e aggiorna il modelloLe viste sono realizzate tramite “scheletri” HTML/XML il cui contenuto viene espresso tramite espressioni dinamiche (riferite allo stato)

54

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

index.jsp

Model/View/Controller (3)

Oggetti che rappresentano

lo stato correntedel modello Codice che

implementala macchinaa stati delcontrollorevista1.jsp vistaN.jsp

Inclusione dinamica

28

55

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Model/View/Controller (4)

Le richieste sono inoltrate sempre alla stessa pagina

Questa contiene il modello ed il controlloreIl controllore aggiorna il modello e decide quale pagina “attivare” per determinare la vista corrente

La presenza di un unico punto di ingresso facilita la validazione dei parametri ed il mantenimento della coerenza

56

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Processo di sviluppo di un’applicazione JSP (1)

1. Definizione della macchina a statiA partire dalle specifiche dell’applicazione

2. Definizione dei parametri associati a ciascuna transizione

Transizioni uscenti da uno stesso stato devono avere parametri con nomi e/o valori differenti

3. Definizione delle viste associate a ciascun statoSe lo stato contiene degli archi uscenti cui sono associati dei parametri, la vista deve contenere una FORM con i relativi campi o avere link con parametri associati (esempio: <a href=“/index.jsp?p1=v1&p2=v2”>…</a>)

29

57

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Processo di sviluppo di un’applicazione JSP (2)

4. Implementazione della logica del controlloreSi utilizza una variabile memorizzata nella sessioneAd ogni richiesta si aggiorna tale variabile in base ai parametri ricevuti ed al valore precedente

5. Implementazione della logica associata ad ogni transizione

Eventuale validazione/memorizzazione/elaborazione dei parametri ricevuti

6. Implementazione delle diverse visteUtilizzando tag HTML e codice lato serverSe la vista è complessa, può essere realizzata in un file a parte (che viene richiamato tramite il costrutto <jsp:include page="URL" flush="true"/>)

58

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Esempio di controllore (1)<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %><c:if test=“${empty stato}”><c:set var=“stato” value=“s0” /></c:if><c:choose>

<c:when test=“${stato==‘s0’}”><%-- tratta stato s0 --%>

</c:when>...<c:when test=“${stato==‘sN’}”>

<%-- tratta stato sN --%></c:when><c:otherwise>

<%-- Errore! --%></c:otherwise>

</c:choose>

30

59

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Esempio di controllore (2)...<c:when test=“${stato==‘s0’}”>

<%-- tratta stato s0 --%><c:choose>

<c:when test=“${param.p1==‘alfa’}”><c:set var=“stato” value=“s2”/><%-- Visualizza la vista appropriata --%>

</c:when>...<c:otherwise>

<%-- Errore! --%></c:otherwise>

</c:choose></c:when>...

60

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Configurazione di Tomcat (1)

Tomcat è un contenitore di applicazioni webOgni applicazione è contenuta in una directory separata, all’interno della cartella webapps dell’installazione di Tomcat

Creare una nuova applicazione richiede:1. Creare una nuova cartella all’interno di webapps; il nome

della cartella costituirà la radice della URL dell’applicazione

2. Pubblicare le pagine JSP nella cartella creata3. Creare una sottocartella chiamata “WEB-INF”4. Create e configurare, all’interno di WEB-INF, il file

web.xml che descrive l’applicazione stessa5. Aggiungere, in apposite sottocartelle di WEB-INF le classi

o gli archivi cui le pagine JSP fanno riferimento

31

61

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Configurazione di Tomcat (2)<TomcatRoot>

webapps …

<application name>

File.jsp

WEB-INFFile.gif

web.xml

classes lib

file.class file.jar

Porzione “privata”dell’applicazione

62

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Il file di configurazione (1)

web.xmlRiporta i parametri generali che contraddistinguono i diversi aspetti legati ad un’applicazione web:

Gestione delle sessioniI servlet utilizzati ed i relativi nomi esterniValori di inizializzazione dell’applicazioneVincoli di sicurezza…

32

63

©M

. Bad

ella

G. M

alna

ti, 2

002-

04

Programmazione Web I

Il file di configurazione (2)<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns=“http://java.sun.com/xml/ns/j2ee”xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi:schemaLocation=“http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”version=“2.4”>

<description>Applicazione di prova</description><welcome-file-list>

<welcome-file>index.jsp</welcome-file><welcome-file>index.html</welcome-file>

</welcome-file-list>

</web-app>