Skip to content

11. Applicazione web MVC [personne] – versione 6

11.1. Introduction

In questa versione apportiamo la seguente modifica:

La versione precedente non utilizzava la sessione per memorizzare gli elementi tra due scambi client/server. Utilizzava la tecnica dei cookie, per cui gli elementi da memorizzare venivano inviati al client dal server affinché quest’ultimo li rinviasse durante lo scambio successivo. In questa nuova versione, utilizziamo una tecnica simile, quella dei campi nascosti nei moduli. Esistono alcune 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 nel documento HTML.
- questa tecnica richiede che il browser accetti i cookie affinché questi vengano rinviati al server durante le richieste GET o POST.
- La tecnica richiede che tutte le richieste del client al server siano di tipo POST, affinché 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 agli elementi memorizzati visualizzando il codice sorgente del documento HTML ricevuto.

La tecnica dei campi nascosti è applicabile in questo caso poiché tutte le richieste del client sono di tipo POST.

11.2. Il progetto Eclipse

Per creare il progetto Eclipse [mvc-personne-06] dell’applicazione web [/personne6], si duplicherà il progetto [mvc-personne-05] seguendo la procedura descritta al paragrafo 6.2.

11.3. Configurazione dell'applicazione web [personne6]

Il file web.xml dell’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 delle viste

Solo le viste [réponse, erreurs] sono state modificate. Ora presentano campi nascosti nei rispettivi moduli, mentre nella versione precedente tali moduli non inviavano alcun parametro.

[réponse.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 delle righe 10-12
  • riga 6: la destinazione di POST sarà [/do/retourFormulaire]
  • righe 7-8: i campi nascosti [nom] e [age] verranno inviati. I loro valori ${nom} e ${age} saranno impostati dal controller che visualizzerà [réponse.jsp]. Si tratterà dei valori inseriti nel modulo.

[erreurs.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 [réponse.jsp]. Si noti che il modello della vista [erreurs] si arricchisce di due nuovi elementi [nom, age], che si aggiungono agli altri due già esistenti: [erreurs, lienRetourFormulaire].

Il lettore è invitato a testare queste nuove viste seguendo il principio illustrato nelle versioni precedenti.

11.5. Il controller [ServletPersonne]

Il controller [ServletPersonne] dell’applicazione web [/personne6] è molto simile a quello della versione precedente. Le modifiche derivano dal fatto che il modello della vista [erreurs] è cambiato. È necessario aggiungere due elementi supplementari: [nom, age]. Sono interessati solo i metodi che visualizzano questa vista. Si tratta dei metodi [doGet] e [doValidationFormulaire].

11.5.1. Il metodo [doGet]

Il codice di [doGet] è il seguente:

     // GET
    @SuppressWarnings("unchecked")
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

         // si verifica l'esito dell'inizializzazione del servlet
        if (erreursInitialisation.size() != 0) {
             // si passa alla pagina degli errori
            request.setAttribute("erreurs", erreursInitialisation);
            getServletContext().getRequestDispatcher(urlErreurs).forward(
                    request, response);
             // fine
            return;
        }
...
    }

In realtà, questo codice rimane identico a com'era. Nella versione precedente, gli elementi [nom, age] non venivano inseriti nel modello della vista [erreurs]. Se continuiamo a non inserirli, le variabili ${nom} e ${age} di [erreurs.jsp] verranno sostituite dalla stringa vuota. Questo ci va bene, poiché in questo caso specifico il link [Retour au formulaire] non viene mostrato all’utente. Infatti, non inseriamo nemmeno l’elemento [lienRetourFormulaire] nel modello. La variabile ${lienRetourFormulaire} di [erreurs.jsp] verrà sostituita dalla stringa vuota. Non ci sarà quindi alcun collegamento, né la possibilità di inviare i campi nascosti [nom, age] del modulo [erreurs.jsp]. Il valore di questi campi può quindi essere la stringa vuota.

11.5.2. Il metodo [doValidationFormulaire]

Il suo codice è il seguente:

     // convalida del modulo
    void doValidationFormulaire(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException{
         // si recuperano i parametri
        String nom = request.getParameter("txtNom");
        String age = request.getParameter("txtAge");
         // si prepara il modello delle viste [réponse, erreurs]
        request.setAttribute("nom",nom);
        request.setAttribute("age",age);        
        request.setAttribute("lienRetourFormulaire", (String)params.get("lienRetourFormulaire"));
         // verifica dei parametri
...

Alle righe 8-10, si inseriscono nel modello gli elementi [nom, age, lienRetourFormulaire]. Si sa che il metodo visualizza una delle viste [réponse] o [erreurs]. Quest’ultima avrà quindi gli elementi [nom,age] nel proprio modello.

11.6. Tests

Avviare o riavviare Tomcat dopo avervi integrato il progetto Eclipse [personne-mvc-06], quindi richiedere l’URL [http://localhost:8080/personne6].