JSP – Java Server Pages - corsiadistanza.polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/JSP.pdf · ¾Le pagine JSP sono elaborate dal contenitore (application server), che
Post on 19-Apr-2019
226 Views
Preview:
Transcript
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>
top related