9. MVC-Webanwendung [person] – Version 4
Diese Version verwendet die zuvor vorgestellte JSTL-Tag-Bibliothek.
9.1. Das Eclipse-Projekt
Um das Eclipse-Projekt [mvc-personne-04] für die Webanwendung [/personne4] zu erstellen, duplizieren Sie das Projekt [mvc-personne-03], indem Sie die in Abschnitt 6.2 auf Seite 78 beschriebene Vorgehensweise befolgen.
![]() | ![]() |
9.2. Konfigurieren der Webanwendung [personne4]
Die Datei web.xml für die Anwendung /personne4 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-04</display-name>
...
Diese Datei ist identisch mit der in der vorherigen Version, mit Ausnahme von Zeile 6, wo sich der Anzeigename der Webanwendung in [mvc-personne-04] geändert hat.
Die Startseite [index.jsp] ändert sich:
<%@ 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="/main"/>
- Zeile 5: Die Seite [index.jsp] leitet den Client zur URL [/main] weiter, die zum Controller [ServletPersonne] der Anwendung [/personne4] führt. Das <c:redirect>-Tag gehört zur JSTL-/Core-Bibliothek. Es hat die Besonderheit, die URL seines [url]-Attributs durch Hinzufügen des Präfixes [/context] zu vervollständigen, wobei [context] der Anwendungskontext ist, in diesem Fall [personne4].
- das Präfix [/context], wobei [context] der Anwendungskontext ist, in diesem Fall [personne4].
- das Suffix [?jsessionid=id_session], falls der Browser, der die Anfrage stellt, kein Session-Cookie gesendet hat. Die Kennung [jsessionid] bezieht sich auf die vom Webserver an seine Clients gesendete Session-Token-Kennung. Sie hängt vom jeweiligen Webserver ab. Hier handelt es sich um die des Tomcat-Servers. [id_session] ist das Session-Token selbst.
Somit lautet die tatsächliche Weiterleitungs-URL in Zeile 5 von [index.jsp] die URL [/person4/main?jsessionid=XX], wobei XX das Session-Token ist. Dies wird auf der folgenden Seite angezeigt, die nach der ersten Anfrage der URL [http://localhost:8080/personne4] angezeigt wird:

Die Beziehung zwischen dem <c:redirect>-Tag und dem Session-Token ist recht subtil. Es ist noch zu früh, hier näher darauf einzugehen, aber wir werden später Gelegenheit haben, darauf zurückzukommen.
9.3. Der View-Code
9.3.1. Die [form]-Ansicht
Diese Ansicht hat sich nicht geändert:

Sie wird von der folgenden JSP-Seite [formulaire.jsp] generiert:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<html>
<head>
<title>Personne - formulaire</title>
<script language="javascript">
...
</script>
</head>
<body>
<center>
<h2>Personne - formulaire</h2>
<hr>
<form name="frmPersonne" method="post">
<table>
<tr>
<td>Nom</td>
<td><input name="txtNom" value="${nom}" type="text" size="20"></td>
</tr>
<tr>
<td>Age</td>
<td><input name="txtAge" value="${age}" type="text" size="3"></td>
</tr>
<tr>
</table>
<table>
<tr>
<td><input type="submit" value="Submit"></td>
<td><input type="button" value="[Envoyer]" onclick="envoyer()"></td>
<td><input type="reset" value="Rétablir"></td>
<td><input type="button" value="[Effacer]" onclick="effacer()"></td>
</tr>
</table>
<input type="hidden" name="action" value="validationFormulaire">
</form>
</center>
</body>
</html>
Was gibt's Neues:
- Zeile 4: Deklaration der JSTL-/Core-Tag-Bibliothek
- Zeilen 21, 25: Abrufen der Attribute [name, age] aus der Seitenvorlage. Beachten Sie, dass diese Attribute nacheinander in der Anfrage, der Sitzung und der Anwendung der JSP-Seite gesucht werden. In unserem Fall legt der Controller sie in der Sitzung ab.
- Aufgrund der vorherigen Implementierung gibt es am Anfang der JSP-Seite keinen Java-Code mehr zum Abrufen des Seitenmodells.
9.3.2. Die Ansicht [response]
Diese Ansicht hat sich nicht geändert:
![]() | ![]() |
Die neue JSP-Seite [response.jsp] sieht wie folgt aus:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<html>
<head>
<title>Personne</title>
</head>
<body>
<h2>Personne - réponse</h2>
<hr>
<table>
<tr>
<td>Nom</td>
<td>${nom}</td>
</tr>
<tr>
<td>Age</td>
<td>${age}</td>
</tr>
</table>
<br>
<form name="frmPersonne" method="post">
<input type="hidden" name="action" value="retourFormulaire">
</form>
<a href="javascript:document.frmPersonne.submit();">
${lienRetourFormulaire}
</a>
</body>
</html>
Was gibt's Neues:
- Zeile 4: Deklaration der JSTL-/Core-Tag-Bibliothek
- Zeilen 16, 20, 28: Abruf der Attribute [name, age, formSubmitLink] in der Seitenvorlage. Es gibt keinen Java-Code mehr am Anfang der JSP-Seite, um diese abzurufen.
9.3.3. Die Ansicht [errors]
Diese Ansicht hat sich nicht geändert:
![]() | ![]() |
Die neue JSP-Seite [errors.jsp] sieht wie folgt aus:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<html>
<head>
<title>Personne</title>
</head>
<body>
<h2>Les erreurs suivantes se sont produites</h2>
<ul>
<c:forEach var="erreur" items="${erreurs}">
<li>${erreur}</li>
</c:forEach>
</ul>
<br>
<form name="frmPersonne" method="post">
<input type="hidden" name="action" value="retourFormulaire">
</form>
<a href="javascript:document.frmPersonne.submit();">
${lienRetourFormulaire}
</a>
</body>
</html>
Was gibt's Neues:
- Zeile 4: Deklaration der JSTL-/Core-Tag-Bibliothek
- Zeilen 13–15: Anzeige der Fehlerliste mit JSTL
- Am Anfang der JSP-Seite befindet sich kein Java-Code mehr, um die Vorlage abzurufen.
9.4. Testen der Ansichten
Um die vorherigen Ansichten zu testen, duplizieren wir ihre JSP-Seiten im Ordner /WebContent/JSP des Eclipse-Projekts:

Anschließend werden die Seiten im JSP-Ordner wie folgt geändert:
[form.jsp]:
...
<%
// -- test : on crée le modèle de la page
session.setAttribute("nom","tintin");
session.setAttribute("age","30");
%>
<html>
<head>
Die Zeilen 4–5 wurden hinzugefügt, um die für die Seite erforderliche Vorlage zu erstellen.
[response.jsp]:
...
<%
// -- test : on crée le modèle de la page
request.setAttribute("nom","milou");
request.setAttribute("age","10");
request.setAttribute("lienRetourFormulaire","Retour au formulaire");
%>
<html>
<head>
...
Die Zeilen 4–6 wurden hinzugefügt, um die für die Seite erforderliche Vorlage zu erstellen.
[errors.jsp]:
<%
// -- test : on crée le modèle de la page
ArrayList<String> erreurs1=new ArrayList<String>();
erreurs1.add("erreur1");
erreurs1.add("erreur2");
request.setAttribute("erreurs",erreurs1);
request.setAttribute("lienRetourFormulaire","Retour au formulaire");
%>
<html>
<head>
Die Zeilen 4–8 wurden hinzugefügt, um die für die Seite erforderliche Vorlage zu erstellen.
Starten Sie Tomcat, falls Sie dies noch nicht getan haben, und rufen Sie dann die folgenden URLs auf:
![]() | ![]() |
![]() |
Wir erhalten die erwarteten Aufrufe.
9.5. Der [ServletPersonne]-Controller
Der [ServletPersonne]-Controller der Webanwendung [/personne3] wird die folgenden Aktionen verarbeiten:
Nr. | Anfrage | Herkunft | Verarbeitung |
1 | [GET /person4/main] | Vom Benutzer eingegebene URL | - die leere [Formular]-Ansicht senden |
2 | [POST /person4/hand] mit den Parametern [txtName, txtAge, action=validateForm] gesendet | Klicken Sie auf die [Submit]-Schaltfläche im [Formular] | - Überprüfen Sie die Werte der Parameter [txtName, txtAge] - wenn sie falsch sind, sende die Ansicht [errors(errors)] - wenn sie korrekt sind, sende die Ansicht [response(name,age)] |
3 | [POST /person4/main] mit den Parametern [action=returnForm] gesendet | Klicken Sie auf das Formularfeld [Zurück zum Formular] aus dem [Antwort] und [Fehler]. | - Senden Sie die [Formular]-Ansicht, die mit den zuletzt eingegebenen Werten vorausgefüllt ist |
Das Grundgerüst des [ServletPersonne]-Controllers ist identisch mit dem der vorherigen Version. Wir werden die Änderungen an den Methoden [doInit, doValidationFormulaire, doRetourFormulaire] durchgehen; die Methoden [init, doGet, doPost] bleiben unverändert.
9.5.1. Die Methode [doInit]
Diese Methode verarbeitet die Anfrage Nr. 1 [GET /personne4/main]. Ihr Code lautet wie folgt:
Was ist neu:
- Zeile 3: Die Ansicht [form] wird gerendert. Diese Ansicht erwartet die Attribute „name“ und „age“ in ihrer Vorlage. Sie findet sie dort nicht, da der Controller sie nicht bereitstellt. In diesem Fall liefert die JSTL-Bibliothek für diese Attribute Null-Zeiger. Dies verursacht keine Fehler, und für die Elemente ${name} und ${age} der [form]-Ansicht werden leere Werte angezeigt. Das ist für uns in Ordnung. So vermeiden wir es, das Modell der [form]-Ansicht initialisieren zu müssen.
9.5.2. Die Methode [doValidationFormulaire]
Diese Methode verarbeitet die Anfrage Nr. 2 [POST /person4/main] mit [action, txtName, txtAge] in den übermittelten Elementen. Ihr Code lautet wie folgt:
Was ist neu:
- Zeile 15: Die Methode [doValidationFormulaire] gibt die Ansicht [response] zurück. Diese Ansicht enthält die Elemente [name, age, formReturnLink] in ihrem Modell. [formReturnLink] wird in Zeile 14 über die Anfrage zum Modell hinzugefügt. Die Elemente [name, age] werden in den Zeilen 8–10 über die Sitzung in das Modell eingefügt. In der vorherigen Version hatten wir die Elemente [name, age] beim Senden der [response]-Ansicht ebenfalls in die Anfrage eingefügt, da diese Ansicht sie dort erwartete. Hier wissen wir dank der JSTL-Bibliothek, dass die verschiedenen Kontexte (Anfrage, Sitzung, Anwendung) durchsucht werden, um die Modellelemente zu finden. Sie werden daher in der Sitzung gefunden, da der Controller sie dort abgelegt hat (Zeilen 8–10).
9.5.3. Die Methode [doRetourFormulaire]
Diese Methode verarbeitet die Anfrage Nr. 3 [POST /person4/main] mit [action=retourFormulaire] in den übermittelten Elementen. Ihr Code lautet wie folgt:
Was ist neu:
- Zeile 4: Die Ansicht [form] wird angezeigt. Diese Ansicht erwartet die Attribute „name“ und „age“ in ihrem Modell. Sie findet diese in der Sitzung, da die Methode [doValidationForm] sie dort abgelegt hat und diese Methode zwangsläufig vor der Methode [doReturnForm] ausgeführt wird. Daher ist es nicht notwendig, das [form]-Modell vor der Anzeige in Zeile 4 zu initialisieren. Folglich sind die Methoden [doInit] und [doReturnForm] identisch, und wir könnten die Aktion [returnForm] entfernen und durch die Aktion [init] ersetzen. Die Methode [doReturnForm] würde dann wegfallen.
9.6. Tests
In dieser neuen Version haben sich nur die Ansichten geändert. Der [ServletPersonne]-Controller bleibt unverändert. Die Verwendung von JSTL hat es uns lediglich ermöglicht, das vom Controller erstellte Modell innerhalb der JSP-Seiten einfacher zu nutzen.
Starten oder starten Sie Tomcat neu, nachdem Sie das Eclipse-Projekt [personne-mvc-04] integriert haben. Rufen Sie die URL [http://localhost:8080/personne4] auf.








