5. MVC [personne] web uygulaması – sürüm 1
5.1. Uygulamanın görünümleri
Uygulama, önceki örneklerde kullanılan formu kullanır. Uygulamanın ilk sayfası şöyledir:

Bu görünüme [formulaire] adı vereceğiz. Doğru girişler yapıldığında, bunlar [réponse] adı verilen bir görünümde görüntülenir:

Girişler yanlışsa, hatalar [erreurs] adlı bir görünümde bildirilir:

5.2. Uygulamanın mimarisi
[personne1] web uygulaması aşağıdaki mimariye sahip olacaktır:

Bu mimari tek katmanlı bir mimaridir: [métier] veya [dao] katmanları yoktur, yalnızca bir [web] katmanı vardır. [ServletPersonne], istemcilerin tüm isteklerini işleyen uygulama denetleyicisidir. Bu isteklere yanıt vermek için üç [formulaire, réponse, erreurs] görünümünden birini kullanır.
[ServletPersonne] denetleyicisinin, bir kullanıcıdan gelen isteği aldığında ne yapması gerektiğini nasıl belirlediğini anlamamız gerekiyor. Bir istemci isteği, HTTP akışıdır ve bu akış, GET veya POST komutuyla yapıldığına göre farklılık gösterir.
GET İsteği
Bu durumda, HTTP akışı aşağıdaki gibidir:
- satır, istenen URL'yi belirtir; örneğin:
Bu URL, gerçekleştirilecek eylemi belirtmek için kullanılabilir. Çeşitli yöntemler kullanılabilir:
- URL'deki bir parametre eylemi belirtir; örneğin, [/appli?action=ajouter&id=4]. Burada [action] parametresi, denetleyiciye talep edilen eylemi bildirir.
- URL'nin son öğesi eylemi belirtir; örneğin, [/appli/ajouter?id=4]. Burada, URL'nin son öğesi olan [/ajouter], denetleyici tarafından gerçekleştirilmesi gereken eylemi belirlemek için kullanılır.
Başka çözümler de mümkündür. Yukarıdaki iki örnek yaygın olarak kullanılmaktadır.
POST isteği
Bu durumda, HTTP akışı aşağıdaki gibi görünür:
- satır, istenen URL'yi belirtir; örneğin:
Bu URL, GET örneğinde olduğu gibi gerçekleştirilecek eylemi belirtmek için kullanılabilir. GET örneğinde, [action] parametresi URL'e dahil edilmişti. Bu durum, aşağıdaki örnekte olduğu gibi burada da geçerli olabilir:
Ancak [action] parametresi, aşağıdaki örnekte olduğu gibi gönderilen parametrelere (yukarıdaki 15. satır) de dahil edilebilir:
Aşağıda, denetleyiciye ne yapması gerektiğini belirtmek için bu farklı teknikleri kullanacağız:
- istenen URL'ye action parametresini eklemek:
- action parametresini göndermek:
- URL'nin son öğesini eylem adı olarak kullanın:
5.3. Eclipse Projesi
[personne1] web uygulamasının Eclipse projesi [mvc-personne-01]'i oluşturmak için, 3.1. paragrafında açıklanan adımları izleyin.

Varsayılan olarak önerilen [mvc-personne-01] bağlamını kullanmayacağız. Aşağıda gösterildiği gibi [personne1]'i seçeceğiz:

Elde edilen sonuç şöyledir:

Eğer web uygulamasının bağlamını değiştirmek istersek, [clic droit sur projet -> Properties -> J2EE] seçeneğini kullanacağız:

[1] ile yeni bağlam belirtilecektir.
[WEB-INF] klasörünün içine [vues] adlı bir alt klasör oluşturacağız: [clic droit sur WEB-INF -> New -> Folder]:
![]() | ![]() |
Yeni proje artık şudur:

Tamamlandığında proje şu şekilde olacak:

- [ServletPersonne] denetleyicisi, [src] klasöründedir
- [formulaire, réponse, erreurs] görünümlerine ait JSP sayfaları, [WEB-INF/vues] klasöründe yer almaktadır; bu da, aşağıdaki örnekte gösterildiği gibi, kullanıcının bu sayfaları doğrudan çağırmasını engellemektedir:

Şimdi [/personne1] web uygulamasının çeşitli bileşenlerini açıklayacağız. Okuyucunun, okuma sürecinde bu bileşenleri oluşturması önerilir.
5.4. [personne1] web uygulamasının yapılandırılması
/personne1 uygulamasının web.xml dosyası aşağıdaki gibi olacaktır:
<?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-01</display-name>
<!-- ServletPersonne -->
<servlet>
<servlet-name>personne</servlet-name>
<servlet-class>
istia.st.servlets.personne.ServletPersonne
</servlet-class>
<init-param>
<param-name>urlReponse</param-name>
<param-value>
/WEB-INF/vues/reponse.jsp
</param-value>
</init-param>
<init-param>
<param-name>urlErreurs</param-name>
<param-value>
/WEB-INF/vues/erreurs.jsp
</param-value>
</init-param>
<init-param>
<param-name>urlFormulaire</param-name>
<param-value>
/WEB-INF/vues/formulaire.jsp
</param-value>
</init-param>
</servlet>
<!-- Eşleme ServletPersonne-->
<servlet-mapping>
<servlet-name>personne</servlet-name>
<url-pattern>/main</url-pattern>
</servlet-mapping>
<!-- ana sayfalar -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Bu yapılandırma dosyası ne anlatıyor?
- 34-37. satırlar: /main URL, “person” adlı servlet tarafından işlenir
- 10-13. satırlar: "person" adlı servlet, [ServletPersonne] sınıfının bir örneğidir
- 14-19. satırlar: [urlReponse] adlı bir yapılandırma parametresini tanımlar. Bu, [réponse] görünümünün URL'sidir.
- 20-25. satırlar: [urlErreurs] adlı bir yapılandırma parametresini tanımlar. Bu, [erreurs] görünümünün URL'sidir.
- 26-31. satırlar: [urlFormulaire] adlı bir yapılandırma parametresini tanımlar. Bu, [formulaire] görünümünün URL'sidir.
- 40. satır: [index.jsp], uygulamanın ana sayfası olacaktır.
[formulaire, réponse, erreurs] görünümlerinin JSP sayfalarının URL'leri, her biri ayrı bir yapılandırma parametresine sahiptir. Bu sayede, uygulamayı yeniden derlemeye gerek kalmadan bu sayfaları taşıyabilirsiniz.
Kullanıcı [/personne1] URL’sini talep ettiğinde, yanıtı [index.jsp] dosyası gönderecektir (ana sayfa dosyası, 40. satır). Bu dosya, [WebContent] klasörünün kök dizininde bulunur:

İçeriği şu şekildedir:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
response.sendRedirect("/personne1/main");
%>
[index.jsp] sayfası, istemciyi [/personne1/main] URL'sine yönlendirmekle yetinir. Böylece, tarayıcı [/personne1] URL'sini talep ettiğinde, [index.jsp] ona şu HTTP yanıtını gönderir:
- 1. satır: Sunucuya başka bir URL adresine yönlendirilmesi gerektiğini belirten HTTP/1.1 yanıtı
- 4. satır: Tarayıcının yönlendirilmesi gereken URL adresi
Bu yanıtın ardından tarayıcı, kendisine istenen şekilde (4. satır) [/personne1/main] URL'sini isteyecektir. [/personne1] uygulamasının [web.xml] dosyası, bu isteğin [ServletPersonne] denetleyicisi tarafından işleneceğini belirtir (satır 35-36).
5.5. Görünüm kodları
Web uygulamasını yazmaya, görünümlerini yazarak başlıyoruz. Bu görünümler, kullanıcının grafik arayüz açısından ihtiyaçlarını belirlemeye olanak tanır ve denetleyici olmadan da test edilebilir.
5.5.1. [formulaire] görünümü
Bu görünüm, isim ve yaş giriş formuna aittir:

türü HTML | ad | rol | |
<input type="text"> | txtNom | ad girişi | |
<input type="text"> | txtAge | yaş girişi | |
<input type= "submit "> | girilen değerlerin /personne1/main URL'sine sunucuya gönderilmesi | ||
<input type= "reset "> | Sayfayı tarayıcı tarafından ilk alındığı duruma geri döndürmek için | ||
<input type= "button "> | [1] ve [2] giriş alanlarının içeriğini silmek için |
Bu, JSP [formulaire.jsp] sayfası tarafından oluşturulur. Şablonu aşağıdaki öğelerden oluşur:
- [nom]: "nom" anahtarıyla ilişkili oturum özniteliklerinde bulunan bir ad (String)
- [age]: "age" anahtarıyla ilişkili oturum özniteliklerinde bulunan bir yaş (String)
Kullanıcı [/personne1/main], c.a.d URL'lerini talep ettiğinde [formulaire] görünümü elde edilir. [ServletPersonne] denetleyicisinin URL'si. [formulaire] görünümünü oluşturan JSP ve [formulaire.jsp] sayfalarının kodu şöyledir:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
// şablondaki veriler alınır
String nom=(String)request.getAttribute("nom");
String age=(String)request.getAttribute("age");
%>
<html>
<head>
<title>Personne - formulaire</title>
</head>
<body>
<center>
<h2>Personne - formulaire</h2>
<hr>
<form 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="Envoyer"></td>
<td><input type="reset" value="Rétablir"></td>
<td><input type="button" value="Effacer"></td>
</tr>
</table>
<input type="hidden" name="action" value="validationFormulaire">
</form>
</center>
</body>
</html>
- 6-7. satırlar: JSP sayfası, [request] isteğinden modelindeki [nom, age] öğelerini alarak başlar. Uygulamanın normal çalışması sırasında, bu şablonu oluşturan [ServletPersonne] denetleyicisi olacaktır.
- 18-38. satırlar: JSP sayfası, bir HTML formu (<form> etiketi) oluşturacaktır.
- 18. satır: <form> etiketinde, submit türündeki [Envoyer] düğmesi tarafından gönderilen değerleri işleyecek URL'yi belirtmek için action özniteliği bulunmamaktadır (32. satır). Bu durumda, formdaki değerler, formun alındığı URL'ye, yani [ServletPersonne] denetleyicisinin URL'sine gönderilecektir. Böylece bu denetleyici, hem başlangıçta bir GET tarafından istenen boş formu oluşturmak hem de [Envoyer] düğmesi ile kendisine gönderilecek girilen verileri işlemek için kullanılır.
- Gönderilen değerler, HTML, [txtNom] (22. satır), [txtAge] (26. satır) ve [action] (37. satır) alanlarına aittir. Bu son parametre, denetleyicinin ne yapması gerektiğini bilmesini sağlayacaktır.
- Formun ilk görüntülendiği anda, [txtNom, txtAge] giriş alanları sırasıyla [nom] (satır 22) ve [age] (satır 26) değişkenleriyle başlatılır. Bu değişkenler, değerlerini istekten (satır 6-7) alır; bu değerlerin servlet tarafından başlatıldığı bilinmektedir. Dolayısıyla, formun giriş alanlarının başlangıç içeriğini belirleyen servlettir.
- 33. satır: [reset] türündeki [Rétablir] düğmesi, formu tarayıcının aldığı andaki durumuna geri getirir.
- 34. satır: [reset] türündeki [Effacer] düğmesinin şu anda herhangi bir işlevi yoktur.
Bundan sonra, hem görünümün adını hem de şablonunu belirtmek istediğimizde bu görünüme [formulaire(nom, age)] görünümü diyeceğiz. Ayrıca, kullanıcı [Envoyer] düğmesine tıkladığında, [txtNom, txtAge] parametrelerinin [/personne1/main] URL'sine gönderildiğini hatırlayalım.
5.5.2. [reponse] görünümü
Bu görünüm, formda girilen değerler geçerli olduğunda bunları görüntüler:

Bu görünüm, JSP ve [reponse.jsp] sayfaları tarafından oluşturulur. Şablonu aşağıdaki öğelerden oluşur:
- [nom]: "nom" anahtarıyla ilişkilendirilmiş, oturum özniteliklerinde bulunacak bir ad (String)
- [age]: oturum özniteliklerinde "age" anahtarıyla ilişkilendirilmiş bir yaş (String)
JSP [reponse.jsp] sayfasının kodu şöyledir:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
// modelden veriler alınır
String nom=(String)request.getAttribute("nom");
String age=(String)request.getAttribute("age");
%>
<html>
<head>
<title>Personne</title>
</head>
<body>
<h2>Personne - réponse</h2>
<hr>
<table>
<tr>
<td>Nom</td>
<td><%= nom %>
</tr>
<tr>
<td>Age</td>
<td><%= age %>
</tr>
</table>
</body>
</html>
- 6-7. satırlar: JSP sayfası, [request] isteğinden modelindeki [nom, age] öğelerini alarak başlar. Uygulamanın normal çalışması sırasında, bu şablonu oluşturan [ServletPersonne] denetleyicisi olacaktır.
- Modeldeki [nom, age] öğeleri daha sonra 20. ve 24. satırlarda görüntülenir
Bundan sonra bu görünüme [réponse(nom, age)] görünümü adını veriyoruz.
5.5.3. [erreurs] görünümü
Bu görünüm, formdaki giriş hatalarını bildirir:

Bu görünüm, JSP ve [erreurs.jsp] sayfaları tarafından oluşturulur. Şablonu aşağıdaki öğelerden oluşur:
- [erreurs]: istek özniteliklerinde "hatalar" anahtarıyla ilişkilendirilmiş bir hata mesajları listesi (ArrayList)
JSP [erreurs.jsp] sayfasının kodu şöyledir:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ page import="java.util.ArrayList" %>
<%
// modelden veriler alınır
ArrayList erreurs=(ArrayList)request.getAttribute("erreurs");
%>
<html>
<head>
<title>Personne</title>
</head>
<body>
<h2>Les erreurs suivantes se sont produites</h2>
<ul>
<%
for(int i=0;i<erreurs.size();i++){
out.println("<li>" + (String) erreurs.get(i) + "</li>\n");
}//for
%>
</ul>
</body>
</html>
- 8. satır: JSP sayfası, [request] isteğinden şablonundaki [erreurs] öğesini alarak başlar. Bu öğe, ArrayList türünde bir nesneyi temsil eder ve bu nesne, String türündeki öğelerden oluşur. Bu öğeler hata mesajlarıdır. Uygulamanın normal çalışması sırasında, bu şablonu oluşturan [ServletPersonne] denetleyicisi olacaktır.
- 18-22. satırlar: hata mesajlarının listesini görüntüler. Bunun için, sayfanın HTML gövdesine Java kodu yazmak gerekir. HTML kodunu gereksiz yere karmaşıklaştırmamak için bu kodu her zaman en aza indirgemeyi hedeflemeliyiz. Daha sonra, JSP sayfalarındaki Java kod miktarını azaltmaya olanak tanıyan çözümlerin olduğunu göreceğiz.
- 4. satır: JSP sayfası için gerekli paketlerin içe aktarılma etiketine dikkat edin
Bundan sonra bu görünüme [erreurs(erreurs)] görünümü adını vereceğiz.
5.6. Görünümlerin test edilmesi
Denetleyiciyi yazmadan JSP sayfalarının geçerliliğini test etmek mümkündür. Bunun için iki koşul vardır:
- kontrolörden geçmeden bu sayfaları doğrudan uygulamadan çağırabilmeliyiz
- JSP sayfasının, normalde denetleyici tarafından oluşturulacak olan modeli kendi başına başlatması gerekir
Bu testleri gerçekleştirmek için, Eclipse projesindeki [/WebContent/JSP] klasörüne JSP sayfalarının kopyalarını ekliyoruz:

Ardından, JSP klasöründeki sayfalar şu şekilde değiştirilir:
[formulaire.jsp]:
...
<%
// -- test: sayfa şablonu oluşturuluyor
request.setAttribute("nom","tintin");
request.setAttribute("age","30");
%>
<%
// şablondaki veriler alınır
String nom=(String)request.getAttribute("nom");
String age=(String)request.getAttribute("age");
%>
<html>
<head>
...
Sayfa 11-12'nin ihtiyaç duyduğu şablonu oluşturmak için 3-7. satırlar eklenmiştir.
[reponse.jsp]:
...
<%
// -- test: sayfa şablonu oluşturulur
request.setAttribute("nom","milou");
request.setAttribute("age","10");
%>
<%
// şablondan verileri alıyoruz
String nom=(String)request.getAttribute("nom");
String age=(String)request.getAttribute("age");
%>
<html>
<head>
...
3-7. satırlar, 11-12. satırlardaki sayfanın ihtiyaç duyduğu şablonu oluşturmak için eklenmiştir.
[erreurs.jsp] :
...
<%
// -- test: sayfa şablonu oluşturuluyor
ArrayList<String> erreurs1=new ArrayList<String>();
erreurs1.add("erreur1");
erreurs1.add("erreur2");
request.setAttribute("erreurs",erreurs1);
%>
<%
// şablondan veriler alınır
ArrayList erreurs=(ArrayList)request.getAttribute("erreurs");
%>
<html>
<head>
...
3-9. satırlar, 13. satırdaki sayfanın ihtiyaç duyduğu şablonu oluşturmak için eklenmiştir.
Henüz yapmadıysanız Tomcat'i başlatın ve ardından aşağıdaki URL'leri isteyin:
![]() | ![]() |
![]() |
Beklediğimiz görünümleri elde ediyoruz. Artık uygulamanın JSP sayfalarına makul ölçüde güven duyduğumuza göre, [ServletPersonne] denetleyicisini yazmaya geçebiliriz.
5.7. [ServletPersonne] denetleyicisi
Web uygulamamızın kalbini oluşturan denetleyiciyi yazmamız gerekiyor. Denetleyicinin görevi şunlardır:
- istemciden gelen isteği almak,
- müşterinin talep ettiği eylemi işlemek,
- yanıt olarak uygun görünümü göndermek.
[ServletPersonne] denetleyicisi aşağıdaki eylemleri işleyecektir:
No | istek | kaynak | işlem |
1 | [GET /personne1/main] | kullanıcı tarafından girilen URL | - boş [formulaire] görünümünü gönder |
2 | [POST /personne1/main] [txtNom, txtAge, eylem] gönderildi | düğmeye tıklama [Envoyer] düğmesine tıklayın [formulaire] | - [txtNom, txtAge] parametrelerinin değerlerini kontrol edin - yanlışsa, [erreurs(erreurs)] görünümünü gönderin - değerler doğruysa, [reponse(nom,age)] görünümünü gönderin |
Uygulama, kullanıcı [/personne1/main] URL'sini talep ettiğinde başlar. Uygulamanın [web.xml] dosyasına göre (bkz. paragraf 5.4), bu talep, şimdi açıklayacağımız ServletPersonne türünde bir örnek tarafından işlenir.
5.7.1. Denetleyicinin iskeleti
[ServletPersonne] denetleyicisinin kodu şöyledir:
- 20-22. satırlar: Servletin ilk yüklenmesi sırasında yürütülen [init] yöntemi
- 25-28. satırlar: Uygulamaya GET türünde bir istek yapıldığında web sunucusu tarafından çağrılan [doGet] yöntemi
- satır 42-46: uygulamaya POST türünde bir istek yapıldığında web sunucusu tarafından çağrılan [doPost] yöntemi. Görüldüğü gibi, bu istek de [doGet] yöntemi tarafından işlenecektir (satır 45).
- 31-33. satırlar: [doInit] yöntemi, 1 numaralı eylem olan [GET /personne1/main]'i işler
- 36-39. satırlar: [doValidationFormulaire] yöntemi, [POST /personne1/main] numaralı eylemi, [txtNom, txtAge, action] ile gönderilen parametrelerle işler.
Şimdi denetleyicinin farklı yöntemlerini açıklayacağız
5.7.2. Denetleyicinin başlatılması
Denetleyici sınıfı servlet kapsayıcısı tarafından yüklendiğinde, [init] yöntemi yürütülür. Bu işlem yalnızca bir kez gerçekleşir. Belleğe yüklendikten sonra denetleyici bellekte kalır ve farklı istemcilerin isteklerini işler. Her istemci bir yürütme iş parçacığına konu olur ve böylece denetleyicinin yöntemleri farklı iş parçacıkları tarafından eşzamanlı olarak yürütülür. Bu nedenle, denetleyicinin yöntemleri tarafından değiştirilebilecek alanlara sahip olmaması gerektiğini hatırlatmak isteriz. Alanları salt okunur olmalıdır. Bu alanlar, temel görevi bu olan [init] yöntemi tarafından başlatılır. Bu yöntemin özelliği, tek bir iş parçacığı tarafından yalnızca bir kez yürütülmesidir. Dolayısıyla bu yöntemde denetleyicinin alanlarına eşzamanlı erişim sorunu yaşanmaz. [init] yöntemi, web uygulaması için gerekli olan ve tüm istemci iş parçacıkları tarafından salt okunur olarak paylaşılacak nesneleri başlatmayı amaçlar. Bu paylaşılan nesneler iki yere yerleştirilebilir:
- denetleyicinin özel alanları
- uygulamanın yürütme bağlamı (ServletContext)
[ServletPersonne] denetleyicisinin [init] yönteminin kodu şöyledir:
- 16. satır: c.a.d adlı web uygulamasının yapılandırması alınır. [web.xml] dosyasının içeriği
- 19-29. satırlar: 9. satırdaki [paramètres] tablosunda tanımlanan adlara sahip servlet'in başlatma parametreleri alınır
- 21. satır: parametrenin değeri alınır
- 25. satır: Parametre yoksa, hata başlangıçta boş olan [erreursInitialisation] hata listesine eklenir (8. satır).
- 28. satır: Parametre mevcutsa, değeri ile birlikte başlangıçta boş olan [params] sözlüğüne kaydedilir (10. satır).
- satır 31-35: [urlErreurs] parametresi, olası başlatma hatalarını görüntüleyebilen [erreurs] görünümünün URL'sini belirlediği için mutlaka mevcut olmalıdır. Bu parametre mevcut değilse, [ServletException] çalıştırılarak uygulama durdurulur (satır 33).
5.7.3. [doGet] yöntemi
[doGet] yöntemi, GET ve POST isteklerini servlette işler; çünkü [doPost] yöntemi, [doGet] yöntemine yönlendirir. Kod şöyledir:
- 18-25. satırlar: Başlatma hataları listesinin boş olup olmadığı kontrol edilir. Boş değilse, hatayı veya hataları bildirecek olan [erreurs(erreursInitialisation)] görünümünü görüntülemek için işlem yapılır.
Bu kodu anlamak için [erreurs] görünümünün şablonunu hatırlamak gerekir:
[erreurs] görünümü, istekte "hatalar" anahtar öğesini bekler. Denetleyici, bu öğeyi 20. satırda oluşturur.
- 28. satır: İstemcinin isteğini oluşturmak için kullandığı [get] veya [post] yöntemini alırız
- 30. satır: İsteğin [action] parametresinin değeri alınır. Uygulamamızda yalnızca 2 numaralı [POST /personne1/main] isteğinin [action] parametresine sahip olduğunu hatırlayalım. Bu istekte, bu parametrenin değeri [validationFormulaire]'tir.
- 31-34. satırlar: [action] parametresi mevcut değilse, ona "init" değeri atanır. Bu durum, 1 numaralı ilk istek olan [GET /personne1/main]'te geçerli olacaktır.
- satır 36-40: 1 numaralı istek [GET /personne1/main] işlenir.
- 41-45. satırlar: 2 numaralı istek [POST /personne1/main]'in işlenmesi.
- 47. satır: Yukarıdaki iki durumdan hiçbirinde değilsek, 1 numaralı durumdaymışız gibi işlem yapılır
5.7.4. [doInit] yöntemi
Bu yöntem, 1 numaralı [GET /personne1/main] isteğini işler. Bu istekte, [formulaire(nom,age)] görünümünü boş olarak göndermelidir. Kod şöyledir:
- 18-19. satırlar: [formulaire] görünümü görüntülenir. Bu görünümün beklediği şablonu hatırlayalım:
<%
// modelden veriler alınır
String nom=(String)request.getAttribute("nom");
String age=(String)request.getAttribute("age");
%>
- satır 16-17: [formulaire] görünümünün [nom,age] şablonu boş dizelerle başlatılır.
5.7.5. [doValidationFormulaire] yöntemi
Bu yöntem, gönderilen parametrelerin [action, txtNom, txtAge] olduğu 2 numaralı [POST /personne1/main] isteğini işler. Kod şu şekildedir:
- 16-17. satırlar: İstemcinin isteğinden "txtNom" ve "txtAge" parametrelerinin değerleri alınır.
- 19-26. satırlar: Bu iki parametrenin geçerliliği kontrol edilir
- 28-33. satırlar: Parametrelardan biri hatalıysa, [erreurs(erreursAppel)] görünümü görüntülenir. Bu görünümün şablonunu hatırlayalım:
<%
// şablondan veriler alınıyor
ArrayList erreurs=(ArrayList)request.getAttribute("erreurs");
%>
- 35-38. satırlar: Alınan "txtNom" ve "txtAge" parametrelerinin her ikisinin de geçerli değerleri varsa, [reponse(nom,age)] görünümü görüntülenir. [reponse] görünümünün şablonunu hatırlamak gerekir:
<%
// modelden veriler alınıyor
String nom=(String)request.getAttribute("nom");
String age=(String)request.getAttribute("age");
%>
5.8. Tests
3.3. paragrafında açıklanan prosedürü izleyerek [mvc-personne-01] projesini Tomcat uygulamalarına ekleyelim:

Tomcat'i başlatın. Bu işlem tamamlandıktan sonra, 5.1. paragrafında örnek olarak gösterilen testlere devam edilebilir. Yeni testler de eklenebilir. Örneğin, web.xml'teki urlXXX yapılandırma parametrelerinden birini kaldırıp sonucu görebiliriz. Aşağıdaki örnekte olduğu gibi, [web.xml]'te parametrelerden biri yorum satırına alınmıştır:
<!--
<init-param>
<param-name>urlFormulaire</param-name>
<param-value>
/WEB-INF/vues/formulaire.jsp
</param-value>
</init-param>
-->
Tomcat'i başlatıp yeniden başlatıyoruz ve [http://localhost:8080/personne1/main] URL'sini sorguluyoruz. Aşağıdaki yanıtı alıyoruz:





