11. Aplikacja internetowa MVC [personne] – wersja 6
11.1. Introduction
W tej wersji wprowadzamy następującą zmianę:
Poprzednia wersja nie wykorzystywała sesji do przechowywania danych między kolejnymi wymianami danych między klientem a serwerem. Wykorzystywała technikę plików cookie, w ramach której dane do zapamiętania są wysyłane do klienta przez serwer, aby ten mógł je odesłać podczas następnej wymiany. W tej nowej wersji stosujemy podobną technikę, polegającą na wykorzystaniu ukrytych pól w formularzach. Istnieją różnice między tymi dwiema technikami:
Pliki cookie | Ukryte pola |
- serwer umieszcza elementy do zapamiętania w strumieniu HTTP, który poprzedza dokument HTML. | - serwer umieszcza elementy do zapamiętania w dokumencie HTML. |
- technika ta wymaga, aby przeglądarka akceptowała pliki cookie, tak aby mogła je odesłać do serwera podczas wysyłania żądań GET lub POST. | - technika ta wymaga, aby wszystkie żądania wysyłane przez klienta do serwera miały postać POST, tak aby ukryte pola były przesyłane do serwera. |
- Użytkownik ma dostęp do zapisanych danych poprzez wyświetlenie plików cookie otrzymanych przez swoją przeglądarkę. Większość przeglądarek oferuje tę opcję. | - Użytkownik ma dostęp do zapisanych elementów, wyświetlając kod źródłowy otrzymanego dokumentu HTML. |
Technika pól ukrytych ma tutaj zastosowanie, ponieważ wszystkie wywołania klienta są typu POST.
11.2. Projekt Eclipse
Aby utworzyć projekt Eclipse [mvc-personne-06] dla aplikacji internetowej [/personne6], należy skopiować projekt [mvc-personne-05], postępując zgodnie z procedurą opisaną w punkcie 6.2.
![]() | ![]() |
11.3. Konfiguracja aplikacji internetowej [personne6]
Plik web.xml aplikacji /personne6 ma następującą treść:
<?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>
...
Ten plik jest identyczny z plikiem z poprzedniej wersji, z wyjątkiem kilku szczegółów:
- wiersz 6: nazwa wyświetlana aplikacji internetowej została zmieniona na [mvc-personne-06]
Strona główna [index.jsp] jest identyczna jak strona główna aplikacji [/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. Kod widoków
Zmieniły się jedynie widoki [réponse, erreurs]. Teraz zawierają one ukryte pola w swoich formularzach, podczas gdy w poprzedniej wersji formularze te nie wysyłały żadnych parametrów.
[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>
- wiersze 6–9: formularz, który zostanie wysłany na serwer po kliknięciu linku w wierszach 10–12
- wiersz 6: celem formularza POST będzie [/do/retourFormulaire]
- wiersze 7–8: ukryte pola [nom] i [age] zostaną przesłane. Ich wartości ${nazwa} i ${wiek} zostaną ustalone przez kontroler, który wyświetli [réponse.jsp]. Będą to wartości wprowadzone w formularzu.
[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>
Zmiany i objaśnienia są takie same jak w przypadku widoku [réponse.jsp]. Należy zauważyć, że szablon widoku [erreurs] został wzbogacony o dwa nowe elementy [nom, age], które dołączają do dwóch już istniejących: [erreurs, lienRetourFormulaire].
Zachęcamy czytelnika do przetestowania tych nowych widoków zgodnie z zasadą omówioną w poprzednich wersjach.
11.5. Kontroler [ServletPersonne]
Kontroler [ServletPersonne] aplikacji internetowej [/personne6] jest bardzo zbliżony do kontrolera z poprzedniej wersji. Zmiany wynikają z faktu, że zmienił się model widoku [erreurs]. Należy w nim dodać dwa dodatkowe elementy: [nom, age]. Dotyczy to wyłącznie metod wyświetlających ten widok. Są to metody [doGet] i [doValidationFormulaire].
11.5.1. Metoda [doGet]
Kod metody [doGet] jest następujący:
W rzeczywistości kod ten pozostaje taki sam jak poprzednio. W poprzedniej wersji elementy [nom, age] nie były umieszczane w szablonie widoku [erreurs]. Jeśli nadal nie będziemy ich tam umieszczać, zmienne ${nazwa} i ${wiek} z [erreurs.jsp] zostaną zastąpione pustym ciągiem znaków. Jest to dla nas korzystne, ponieważ w tym konkretnym przypadku link [Retour au formulaire] nie jest wyświetlany użytkownikowi. W rzeczywistości nie umieszczamy również elementu [lienRetourFormulaire] w szablonie. Zmienna ${lienRetourFormulaire} z [erreurs.jsp] zostanie zastąpiona pustym ciągiem znaków. Nie będzie więc żadnego powiązania, a zatem nie będzie możliwości przesłania ukrytych pól [nom, age] z formularza [erreurs.jsp]. Wartością tych pól może więc być pusty ciąg znaków.
11.5.2. Metoda [doValidationFormulaire]
Jej kod wygląda następująco:
W wierszach 8–10 umieszczamy w szablonie elementy [nom, age, lienRetourFormulaire]. Wiadomo, że metoda wyświetla jeden z widoków: [réponse] lub [erreurs]. Ten ostatni będzie zatem zawierał w swoim szablonie elementy [nom,age].
11.6. Tests
Uruchom lub ponownie uruchom Tomcat po dodaniu do niego projektu Eclipse o nazwie [personne-mvc-06], a następnie wywołaj adres URL [http://localhost:8080/personne6].

