11. Applicazione Web MVC [person] – Versione 6
11.1. Introduzione
In questa versione, apportiamo la seguente modifica:
La versione precedente non utilizzava le sessioni per memorizzare i dati tra gli scambi client/server. Utilizzava i cookie, il che significa che i dati da memorizzare vengono inviati al client dal server in modo che il client possa inviarli nuovamente durante lo scambio successivo. In questa nuova versione, utilizziamo una tecnica simile: i campi nascosti nei moduli. Esistono delle differenze tra queste due tecniche:
Cookie | Campi nascosti |
- Il server inserisce gli elementi da memorizzare nel flusso HTTP che precede il documento HTML. | - Il server inserisce gli elementi da memorizzare all'interno del documento HTML. |
- Questa tecnica richiede che il browser accetti i cookie in modo da poterli inviare al server durante le richieste GET o POST. | - Questa tecnica richiede che tutte le richieste del client al server siano richieste POST, in modo che i campi nascosti vengano inviati al server. |
- L'utente può accedere agli elementi memorizzati visualizzando i cookie ricevuti dal proprio browser. La maggior parte dei browser offre questa opzione. | - L'utente può accedere ai dati memorizzati visualizzando il codice sorgente del documento HTML ricevuto. |
La tecnica dei campi nascosti può essere utilizzata in questo caso poiché tutte le richieste del client sono richieste POST.
11.2. Il progetto Eclipse
Per creare il progetto Eclipse [mvc-personne-06] per l'applicazione web [/personne6], duplicare il progetto [mvc-personne-05] seguendo la procedura descritta nella sezione 6.2.
![]() | ![]() |
11.3. Configurazione dell'applicazione web [personne6]
Il file web.xml per l'applicazione /personne6 è il seguente:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
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 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>mvc-personne-06</display-name>
...
Questo file è identico a quello della versione precedente, tranne che per alcuni dettagli:
- riga 6: il nome visualizzato dell'applicazione web è cambiato in [mvc-personne-06]
La pagina iniziale [index.jsp] è identica a quella dell'applicazione [/personne5]:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<c:redirect url="/do/formulaire"/>
11.4. Il codice della vista
Sono cambiate solo le viste [response, errors]. Ora includono campi nascosti nei rispettivi moduli, mentre nella versione precedente questi moduli non inviavano alcun parametro.
[response.jsp]:
...
<html>
...
<body>
...
<form name="frmPersonne" action="retourFormulaire" method="post">
<input type="hidden" name="nom" value="${nom}">
<input type="hidden" name="age" value="${age}">
</form>
<a href="javascript:document.frmPersonne.submit();">
${lienRetourFormulaire}
</a>
</body>
</html>
- Righe 6–9: il modulo che verrà inviato al server quando si clicca sul link alle righe 10–12
- riga 6: la destinazione POST sarà [/do/retourFormulaire]
- righe 7-8: verranno inviati i campi nascosti [name] e [age]. I loro valori ${name} e ${age} saranno impostati dal controller che visualizza [response.jsp]. Questi saranno i valori inseriti nel modulo.
[errors.jsp]:
...
<html>
...
<body>
...
<form name="frmPersonne" action="retourFormulaire" method="post">
<input type="hidden" name="nom" value="${nom}">
<input type="hidden" name="age" value="${age}">
</form>
<a href="javascript:document.frmPersonne.submit();">
${lienRetourFormulaire}
</a>
</body>
</html>
Le modifiche e le spiegazioni sono le stesse della vista [response.jsp]. Si noti che il modello della vista [errors] è stato ampliato con due nuovi elementi [name, age], che si aggiungono ai due già esistenti: [errors, returnToFormLink].
I lettori sono invitati a testare queste nuove viste seguendo l'approccio utilizzato nelle versioni precedenti.
11.5. Il controller [ServletPersonne]
Il controller [ServletPersonne] per l'applicazione web [/personne6] è molto simile a quello della versione precedente. Le modifiche derivano dal fatto che il modello per la vista [errors] è cambiato. È necessario aggiungere due elementi aggiuntivi: [name, age]. Sono interessati solo i metodi che visualizzano questa vista. Si tratta dei metodi [doGet] e [doValidateForm].
11.5.1. Il metodo [doGet]
Il codice per [doGet] è il seguente:
In realtà, questo codice rimane identico a com'era. Nella versione precedente, gli elementi [name, age] non erano inclusi nel modello di visualizzazione [errors]. Se continuiamo a tralasciarli, le variabili ${name} e ${age} in [errors.jsp] verranno sostituite da una stringa vuota. Questo ci va bene, perché in questo caso specifico il link [Torna al modulo] non viene mostrato all'utente. Infatti, non includiamo nemmeno l'elemento [formBackLink] nel modello. La variabile ${lienRetourFormulaire} in [erreurs.jsp] verrà sostituita dalla stringa vuota. Pertanto, non ci sarà alcun link e quindi nessun modo per inviare i campi nascosti [name, age] dal modulo in [erreurs.jsp]. Il valore di questi campi può quindi essere la stringa vuota.
11.5.2. Il metodo [doValidationFormulaire]
Il suo codice è il seguente:
Righe 8–10: Passiamo gli elementi [name, age, formReturnLink] al modello. Sappiamo che il metodo visualizza una delle viste [response] o [errors]. Quest'ultima avrà quindi gli elementi [name, age] nel proprio modello.
11.6. Test
Avviare o riavviare Tomcat dopo aver integrato il progetto Eclipse [person-mvc-06] al suo interno, quindi richiedere l'URL [http://localhost:8080/personne6].

