9. Webanwendung MVC [personne] – Version 4
Diese Version nutzt die zuvor vorgestellte Tag-Bibliothek JSTL.
9.1. Das Eclipse-Projekt
Um das Eclipse-Projekt [mvc-personne-04] für die Webanwendung [/personne4] zu erstellen, duplizieren wir das Projekt [mvc-personne-03] gemäß der in Abschnitt 6.2 auf Seite 78 beschriebenen Vorgehensweise.
![]() | ![]() |
9.2. Konfiguration der Webanwendung [personne4]
Die Datei web.xml der 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 der vorherigen Version, abgesehen von Zeile 6, in der sich der Anzeigename der Webanwendung in [mvc-personne-04] geändert hat.
Die Startseite [index.jsp] ändert sich wie folgt:
<%@ 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 Tag <c:redirect> gehört zur Bibliothek JSTL / Core. Es zeichnet sich dadurch aus, dass es die URL seines Attributs [url] durch Hinzufügen des Präfixes [/contexte] ergänzt, wobei [contexte] der Anwendungskontext ist, in diesem Fall [/contexte].
- das Präfix [/contexte], wobei [contexte] der Anwendungskontext ist, hier [personne4].
- das Suffix [?jsessionid=id_session], falls der Browser, der die Anfrage stellt, kein Sitzungs-Cookie gesendet hat. Die Kennung [jsessionid] bezeichnet die Kennung des Sitzungs-Tokens, das der Webserver an seine Clients sendet. Sie ist vom Webserver abhängig. 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 [/personne4/main?jsessionid=XX], wobei XX das Session-Token ist. Dies zeigt die untenstehende Seite, die nach der ursprünglichen Abfrage der URL [http://localhost:8080/personne4] angezeigt wird:

Der Zusammenhang zwischen dem Tag <c:redirect> und dem Session-Token ist recht komplex. Eine nähergehende Betrachtung wäre an dieser Stelle verfrüht, aber wir werden noch Gelegenheit haben, darauf zurückzukommen.
9.3. Der Code der Ansichten
9.3.1. Die Ansicht [formulaire]
Diese Ansicht hat sich nicht geändert:

Sie wird von der folgenden Seite generiert: JSP [formulaire.jsp]:
<%@ 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>
Neuerungen:
- Zeile 4: Deklaration der Tag-Bibliothek JSTL / Core
- Zeilen 21, 25: Abruf von Attributen [nom, age] aus der Seitenvorlage. Zur Erinnerung: Diese Attribute werden nacheinander in der Abfrage [request], der Sitzung [session] und der Anwendung [application] der Seite JSP gesucht. In unserem Fall wird der Controller sie in die Sitzung einfügen.
- Aufgrund der vorherigen Funktionsweise gibt es am Anfang der Seite JSP keinen Java-Code mehr, um das Seitenmodell abzurufen.
9.3.2. Die Ansicht [reponse]
Diese Ansicht hat sich nicht geändert:
![]() | ![]() |
Die neue Seite JSP [reponse.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>
Die Neuerungen:
- Zeile 4: Deklaration der Tag-Bibliothek JSTL / Core
- Zeilen 16, 20, 28: Abruf von Attributen [nom, age, lienRetourFormulaire] in der Seitenvorlage. Es gibt keinen Java-Code mehr am Anfang der Seite JSP, um diese abzurufen.
9.3.3. Die Ansicht [erreurs]
Diese Ansicht hat sich nicht geändert:
![]() | ![]() |
Die neue Seite JSP [erreurs.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>
Die Neuerungen:
- Zeile 4: Deklaration der Tag-Bibliothek JSTL / Core
- Zeilen 13–15: Anzeige der Fehlerliste mithilfe von JSTL
- Es gibt keinen Java-Code mehr am Anfang der Seite JSP, um deren Vorlage abzurufen.
9.4. Tests der Ansichten
Um die Tests der vorherigen Ansichten durchzuführen, duplizieren wir deren Seiten JSP im Ordner /WebContent/JSP des Eclipse-Projekts:

Anschließend werden die Seiten im Ordner JSP wie folgt geändert:
[formulaire.jsp]:
...
<%
// -- Test: Das Seitenmodell wird erstellt
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.
[reponse.jsp]:
...
<%
// -- Test: Die Seitenvorlage wird erstellt
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.
[erreurs.jsp]:
<%
// -- Test: Erstellen des Seitenmodells
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 dies noch nicht geschehen ist, und rufen Sie dann die folgenden URLs auf:
![]() | ![]() |
![]() |
Wir erhalten tatsächlich die erwarteten Ansichten.
9.5. Der Controller [ServletPersonne]
Der Controller [ServletPersonne] der Webanwendung [/personne3] wird die folgenden Aktionen verarbeiten:
Nr. | Anfrage | Quelle | Verarbeitung |
1 | [GET /personne4/main] | vom Benutzer eingegebene URL | - die leere Ansicht [formulaire] senden |
2 | [POST /personne4/main] mit Parametern [txtNom, txtAge, action=validationFormulaire] gesendet | Klick auf die Schaltfläche [Envoyer] in der Ansicht [formulaire] | - die Werte der Parameter [txtNom, txtAge] überprüfen - Falls sie falsch sind, die Ansicht [erreurs(erreurs)] senden - Wenn sie korrekt sind, die Ansicht [reponse(nom,age)] senden |
3 | [POST /personne4/main] mit Parametern [action=retourFormulaire] veröffentlicht | Klick auf den Link [Zurück zum Formular] in den Ansichten [réponse] und [erreurs]. | - Senden der Ansicht [formulaire], vorausgefüllt mit den zuletzt eingegebenen Werten |
Das Grundgerüst des Controllers [ServletPersonne] ist identisch mit dem der vorherigen Version. Wir gehen die Änderungen an den Methoden [doInit, doValidationFormulaire, doRetourFormulaire] durch, da sich die Methoden [init, doGet, doPost] nicht ändern.
9.5.1. Die Methode [doInit]
Diese Methode verarbeitet die Anfrage Nr. 1 [GET /personne4/main]. Ihr Code lautet wie folgt:
Neuerungen:
- Zeile 3: Die Ansicht [formulaire] wird angezeigt. Diese erwartet in ihrem Modell die Attribute „name“ und „age“. Sie wird diese dort jedoch nicht finden, da der Controller sie dort nicht einfügt. In diesem Fall ruft die Bibliothek JSTL Zeiger vom Typ null für diese Attribute ab. Dies führt zu keinen Fehlern, und für die Elemente ${nom} und ${age} der Ansicht [formulaire] werden leere Werte angezeigt. Das ist für uns in Ordnung. So vermeiden wir es, das Modell der Ansicht [formulaire] initialisieren zu müssen.
9.5.2. Die Methode [doValidationFormulaire]
Diese Methode verarbeitet die Anfrage Nr. 2 [POST /personne4/main] mit [action, txtNom, txtAge] in den gesendeten Elementen. Ihr Code lautet wie folgt:
Neuerungen:
- Zeile 15: Die Methode [doValidationFormulaire] sendet als Antwort die Ansicht [réponse]. Diese enthält in ihrer Vorlage die Elemente [nom, age, lienRetourFormulaire]. [lienRetourFormulaire] wird in Zeile 14 über die Abfrage in die Vorlage eingefügt. Die Elemente [nom,age] werden hingegen über die Sitzung in die Zeilen 8–10 des Modells eingefügt. In der vorherigen Version wurden die Elemente [nom, age] ebenfalls in die Abfrage eingefügt, wenn die Ansicht [réponse] gesendet wurde, da diese Ansicht dort auf sie wartete. Hier, mit der Bibliothek JSTL, weiß man, dass die verschiedenen Kontexte (Request, Session, Anwendung) durchsucht werden, um die Elemente des Modells zu finden. Sie werden daher in der Session 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 /personne4/main] mit [action=retourFormulaire] in den übermittelten Elementen. Ihr Code lautet wie folgt:
Neuerungen:
- Zeile 4: Die Ansicht [formulaire] wird angezeigt. Diese erwartet in ihrem Modell die Attribute „name“ und „age“. Sie findet diese in der Sitzung, da die Methode [doValidationFormulaire] sie dort abgelegt hat und diese Methode zwangsläufig vor der Methode [doRetourFormulaire] ausgeführt wird. Das Modell von [formulaire] muss daher vor seiner Anzeige in Zeile 4 nicht initialisiert werden. Folglich sind die Methoden [doInit] und [doRetourFormulaire] identisch, und man könnte die Aktion [retourFormulaire] entfernen und durch die Aktion [init] ersetzen. Die Methode [doRetourFormulaire] würde dann wegfallen.
9.6. Tests
In dieser neuen Version ändern sich lediglich die Ansichten. Der Controller [ServletPersonne] bleibt unverändert. Die Verwendung von JSTL hat es uns lediglich ermöglicht, das vom Controller erstellte Modell in den Seiten JSP 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.








