11. MVC-Webanwendung [person] – Version 6
11.1. Einführung
In dieser Version nehmen wir folgende Änderung vor:
Die vorherige Version verwendete keine Sitzungen, um Daten zwischen Client- und Server-Austauschvorgängen zu speichern. Sie nutzte Cookies, was bedeutet, dass die zu speichernden Daten vom Server an den Client gesendet werden, damit dieser sie beim nächsten Austausch zurücksenden kann. In dieser neuen Version verwenden wir eine ähnliche Technik: versteckte Felder in Formularen. Es gibt Unterschiede zwischen diesen beiden Techniken:
Cookies | Versteckte Felder |
- Der Server platziert die zu speichernden Elemente im HTTP-Stream vor dem HTML-Dokument. | - Der Server platziert die zu speichernden Elemente innerhalb des HTML-Dokuments. |
- Diese Technik setzt voraus, dass der Browser Cookies akzeptiert, damit er diese bei seinen GET- oder POST-Anfragen an den Server zurücksenden kann. | - Diese Technik setzt voraus, dass alle Client-Anfragen an den Server POST-Anfragen sind, damit die versteckten Felder an den Server gesendet werden. |
- Der Benutzer kann auf die gespeicherten Elemente zugreifen, indem er die von seinem Browser empfangenen Cookies einsehen. Die meisten Browser bieten diese Option an. | - Der Benutzer kann auf die gespeicherten Daten zugreifen, indem er den Quellcode des empfangenen HTML-Dokuments anzeigt. |
Die Technik der versteckten Felder kann hier verwendet werden, da alle Client-Anfragen POST-Anfragen sind.
11.2. Das Eclipse-Projekt
Um das Eclipse-Projekt [mvc-personne-06] für die Webanwendung [/personne6] zu erstellen, duplizieren Sie das Projekt [mvc-personne-05], indem Sie die in Abschnitt 6.2 beschriebene Vorgehensweise befolgen.
![]() | ![]() |
11.3. Konfigurieren der Webanwendung [personne6]
Die Datei web.xml für die Anwendung /personne6 sieht wie folgt aus:
<?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>
...
Diese Datei ist bis auf wenige Details identisch mit der aus der vorherigen Version:
- Zeile 6: Der Anzeigename der Webanwendung wurde in [mvc-personne-06] geändert
Die Startseite [index.jsp] ist identisch mit der der Anwendung [/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. Der View-Code
Nur die Ansichten [response, errors] haben sich geändert. Sie enthalten nun versteckte Felder in ihren jeweiligen Formularen, während diese Formulare in der vorherigen Version keine Parameter übermittelten.
[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>
- Zeilen 6–9: Das Formular, das an den Server gesendet wird, wenn der Link in den Zeilen 10–12 angeklickt wird
- Zeile 6: Das POST-Ziel lautet [/do/retourFormulaire]
- Zeilen 7–8: Die versteckten Felder [name] und [age] werden übermittelt. Ihre Werte ${name} und ${age} werden vom Controller festgelegt, der [response.jsp] anzeigt. Dies sind die Werte, die in das Formular eingegeben wurden.
[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>
Die Änderungen und Erläuterungen entsprechen denen der Ansicht [response.jsp]. Beachten Sie, dass die Vorlagendatei [errors] um zwei neue Elemente [name, age] erweitert wurde, die zu den beiden bereits vorhandenen Elementen [errors, returnToFormLink] hinzugefügt wurden.
Leser sind eingeladen, diese neuen Ansichten nach dem in früheren Versionen verwendeten Ansatz zu testen.
11.5. Der [ServletPersonne]-Controller
Der [ServletPersonne]-Controller für die Webanwendung [/personne6] ist dem der vorherigen Version sehr ähnlich. Die Änderungen ergeben sich aus der Tatsache, dass sich das Modell für die Ansicht [errors] geändert hat. Zwei zusätzliche Elemente müssen hinzugefügt werden: [name, age]. Betroffen sind nur die Methoden, die diese Ansicht anzeigen. Dies sind die Methoden [doGet] und [doValidateForm].
11.5.1. Die Methode [doGet]
Der Code für [doGet] lautet wie folgt:
Tatsächlich bleibt dieser Code unverändert. In der vorherigen Version waren die Elemente [name, age] nicht in der Vorlagenansicht [errors] enthalten. Wenn wir sie weiterhin weglassen, werden die Variablen ${name} und ${age} in [errors.jsp] durch eine leere Zeichenfolge ersetzt. Das ist für uns in Ordnung, da in diesem speziellen Fall der Link [Zurück zum Formular] dem Benutzer nicht angezeigt wird. Tatsächlich nehmen wir auch das Element [formBackLink] nicht in die Vorlage auf. Die Variable ${lienRetourFormulaire} in [erreurs.jsp] wird durch die leere Zeichenfolge ersetzt. Daher gibt es keinen Link und somit keine Möglichkeit, die versteckten Felder [name, age] aus dem Formular in [erreurs.jsp] zu übermitteln. Der Wert dieser Felder kann daher die leere Zeichenfolge sein.
11.5.2. Die Methode [doValidationFormulaire]
Ihr Code lautet wie folgt:
Zeilen 8–10: Wir übergeben die Elemente [name, age, formReturnLink] an das Modell. Wir wissen, dass die Methode eine der Ansichten [response] oder [errors] anzeigt. Letztere enthält daher die Elemente [name, age] in ihrem Modell.
11.6. Tests
Starten oder starten Sie Tomcat neu, nachdem Sie das Eclipse-Projekt [person-mvc-06] darin integriert haben, und rufen Sie dann die URL [http://localhost:8080/personne6] auf.

