9. Webapplicatie MVC [personne] – versie 4
Deze versie maakt gebruik van de eerder gepresenteerde tagbibliotheek JSTL.
9.1. Het Eclipse-project
Om het Eclipse-project [mvc-personne-04] van de webapplicatie [/personne4] aan te maken, dupliceren we het project [mvc-personne-03] volgens de procedure beschreven in paragraaf 6.2, pagina 78.
![]() | ![]() |
9.2. Configuratie van de webapplicatie [personne4]
Het bestand web.xml van de applicatie /personne4 ziet er als volgt uit:
<?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>
...
Dit bestand is identiek aan dat van de vorige versie, behalve regel 6, waar de weergavenaam van de webapplicatie is gewijzigd in [mvc-personne-04].
De startpagina [index.jsp] verandert:
<%@ 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"/>
- regel 5: de pagina [index.jsp] leidt de client om naar de URL [/main], die naar de controller [ServletPersonne] van de applicatie [/personne4] leidt. De tag <c:redirect> behoort tot de bibliotheek JSTL / Core. Het bijzondere aan deze tag is dat de URL van het attribuut [url] wordt aangevuld door het volgende toe te voegen:
- het voorvoegsel [/contexte], waarbij [contexte] de context van de applicatie is, in dit geval [personne4].
- het achtervoegsel [?jsessionid=id_session] als de browser die het verzoek doet geen sessiecookie heeft verzonden. De identificatiecode [jsessionid] verwijst naar de identificatiecode van het sessietoken dat door de webserver naar zijn clients wordt verzonden. Deze is afhankelijk van de webserver. In dit geval is het die van de Tomcat-server. [id_session] is het sessietoken zelf.
De werkelijke omleidings-URL van regel 5 van [index.jsp] is dus de URL [/personne4/main?jsessionid=XX], waarbij XX het sessietoken is. Dit blijkt uit de onderstaande pagina die wordt weergegeven nadat aanvankelijk de URL [http://localhost:8080/personne4] is opgevraagd:

Het verband tussen de tag <c:redirect> en het sessietoken is vrij subtiel. Het is nog te vroeg om dit hier te onderzoeken, maar we zullen hier later op terugkomen.
9.3. De code van de weergaven
9.3.1. De weergave [formulaire]
Deze weergave is niet veranderd:

Deze wordt gegenereerd door de volgende pagina: 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>
De nieuwigheden:
- regel 4: declaratie van de tagbibliotheek JSTL / Core
- regels 21, 25: ophalen van attributen [nom, age] in het paginasjabloon. Ter herinnering: deze attributen worden achtereenvolgens opgezocht in de verzoek-[request], de sessie-[session] en de applicatie-[application] van de pagina JSP. In ons geval zal de controller ze in de sessie plaatsen.
- Er staat geen Java-code meer aan het begin van pagina JSP om het sjabloon van de pagina op te halen, vanwege de eerdere werking.
9.3.2. De weergave [reponse]
Deze weergave is niet veranderd:
![]() | ![]() |
De nieuwe pagina JSP [reponse.jsp] ziet er als volgt uit:
<%@ 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>
De nieuwigheden:
- regel 4: declaratie van de tagbibliotheek JSTL / Core
- regels 16, 20, 28: ophalen van attributen [nom, age, lienRetourFormulaire] in het paginasjabloon. Er staat geen Java-code meer aan het begin van de pagina JSP om deze op te halen.
9.3.3. De weergave [erreurs]
Deze weergave is niet gewijzigd:
![]() | ![]() |
De nieuwe pagina JSP [erreurs.jsp] ziet er als volgt uit:
<%@ 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>
De nieuwigheden:
- regel 4: declaratie van de tagbibliotheek JSTL / Core
- regels 13-15: weergave van de foutenlijst met behulp van JSTL
- er staat geen Java-code meer aan het begin van de pagina JSP om het sjabloon ervan op te halen.
9.4. Testen van de weergaven
Om de bovenstaande weergaven te testen, dupliceren we hun pagina's JSP in de map /WebContent/JSP van het Eclipse-project:

Vervolgens worden in de map JSP de pagina’s als volgt aangepast:
[formulaire.jsp]:
...
<%
// -- test: het paginamodel wordt aangemaakt
session.setAttribute("nom","tintin");
session.setAttribute("age","30");
%>
<html>
<head>
De regels 4-5 zijn toegevoegd om het sjabloon te maken dat de pagina nodig heeft.
[reponse.jsp]:
...
<%
// -- test: we maken het paginamodel aan
request.setAttribute("nom","milou");
request.setAttribute("age","10");
request.setAttribute("lienRetourFormulaire","Retour au formulaire");
%>
<html>
<head>
...
De regels 4-6 zijn toegevoegd om het sjabloon te maken dat de pagina nodig heeft.
[erreurs.jsp]:
<%
// -- test: het paginamodel wordt aangemaakt
ArrayList<String> erreurs1=new ArrayList<String>();
erreurs1.add("erreur1");
erreurs1.add("erreur2");
request.setAttribute("erreurs",erreurs1);
request.setAttribute("lienRetourFormulaire","Retour au formulaire");
%>
<html>
<head>
De regels 4-8 zijn toegevoegd om het sjabloon te maken dat de pagina nodig heeft.
Start Tomcat, als dat nog niet is gebeurd, en vraag vervolgens de volgende URL's op:
![]() | ![]() |
![]() |
We krijgen inderdaad de verwachte weergaven te zien.
9.5. De controller [ServletPersonne]
De controller [ServletPersonne] van de webapplicatie [/personne3] zal de volgende acties verwerken:
nr. | verzoek | bron | verwerking |
1 | [GET /personne4/main] | door de gebruiker ingevoerde URL | - de lege weergave [formulaire] verzenden |
2 | [POST /personne4/main] met parameters [txtNom, txtAge, action=validationFormulaire] geplaatst | klik op de knop [Envoyer] in de weergave [formulaire] | - de waarden van de parameters controleren [txtNom, txtAge] - als ze onjuist zijn, de weergave [erreurs(erreurs)] verzenden - als ze correct zijn, stuur dan de weergave [reponse(nom,age)] |
3 | [POST /personne4/main] met parameters [action=retourFormulaire] geplaatst | klik op de link [Terug naar het formulier] in de weergaven [réponse] en [erreurs]. | - de weergave [formulaire], vooraf ingevuld met de laatst ingevoerde waarden, verzenden |
Het skelet van de controller [ServletPersonne] is identiek aan dat van de vorige versie. We nemen de wijzigingen in de methoden [doInit, doValidationFormulaire, doRetourFormulaire] door; de methoden [init, doGet, doPost] blijven ongewijzigd.
9.5.1. De methode [doInit]
Deze methode verwerkt verzoek nr. 1 [GET /personne4/main]. De code ervan is als volgt:
De nieuwigheden:
- regel 3: de weergave [formulaire] wordt weergegeven. Deze verwacht in zijn model de attributen "naam" en "leeftijd". Deze zal hij daar niet aantreffen, aangezien de controller ze hier niet in opneemt. In dit geval haalt de bibliotheek JSTL null-pointers op voor deze attributen. Dit veroorzaakt geen fouten en er worden lege waarden weergegeven voor de elementen ${nom} en ${age} van de weergave [formulaire]. Dat is prima voor ons. Zo hoeven we het model van de weergave [formulaire] niet te initialiseren.
9.5.2. De methode [doValidationFormulaire]
Deze methode verwerkt verzoek nr. 2 [POST /personne4/main] met [action, txtNom, txtAge] in de verzonden elementen. De code is als volgt:
De nieuwigheden:
- regel 15: de methode [doValidationFormulaire] stuurt als antwoord de weergave [réponse]. Deze bevat in haar sjabloon de elementen [nom, age, lienRetourFormulaire]. [lienRetourFormulaire] wordt via de aanvraag in regel 14 in het sjabloon geplaatst. De elementen [nom,age] worden via de sessie in de modelregels 8-10 geplaatst. In de vorige versie hadden we de elementen [nom, age] ook in de query geplaatst toen we de weergave [réponse] verstuurden, omdat deze weergave ze daar verwachtte. Hier, met de bibliotheek JSTL, weten we dat de verschillende contexten (verzoek, sessie, applicatie) worden doorzocht om de elementen van het model te vinden. Ze worden dus in de sessie gevonden, aangezien de controller ze daar heeft geplaatst (regels 8-10).
9.5.3. De methode [doRetourFormulaire]
Deze methode verwerkt verzoek nr. 3 [POST /personne4/main] met [action=retourFormulaire] in de verzonden gegevens. De code is als volgt:
De nieuwigheden:
- regel 4: de weergave [formulaire] wordt weergegeven. Deze verwacht in zijn model de attributen „naam” en „leeftijd”. Deze worden in de sessie gevonden, aangezien de methode [doValidationFormulaire] ze daar heeft geplaatst en deze methode noodzakelijkerwijs vóór de methode [doRetourFormulaire] wordt uitgevoerd. Het is dus niet nodig om het model van [formulaire] te initialiseren vóór de weergave ervan in regel 4. Daardoor zijn de methoden [doInit] en [doRetourFormulaire] identiek en zou de actie [retourFormulaire] kunnen worden verwijderd en vervangen door de actie [init]. De methode [doRetourFormulaire] zou dan verdwijnen.
9.6. Tests
In deze nieuwe versie veranderen alleen de weergaven. De controller [ServletPersonne] zelf verandert niet. Door het gebruik van JSTL konden we het door de controller opgebouwde model eenvoudiger benutten in de pagina's JSP.
Start Tomcat op of herstart deze nadat u het Eclipse-project [personne-mvc-04] erin hebt geïntegreerd. Roep de URL [http://localhost:8080/personne4] op.








