Skip to content

11. MVC [personne] web uygulaması – sürüm 6

11.1. Introduction

Bu sürümde şu değişikliği yapıyoruz:

Önceki sürümde, iki istemci/sunucu iletişimi arasında öğeleri bellekte tutmak için oturum kullanılmamıştı. Çerez tekniği kullanılmıştı; bu teknikte, bellekte tutulması gereken öğeler sunucu tarafından istemciye gönderilir ve istemci bir sonraki iletişimde bunları geri gönderir. Bu yeni sürümde ise, formlardaki gizli alanlar tekniği gibi benzer bir teknik kullanıyoruz. Bu iki teknik arasında bazı farklar bulunmaktadır:

Çerezler
Gizli alanlar
- Sunucu, hatırlanması gereken öğeleri HTML belgesinden önceki HTTP akışına yerleştirir.
- Sunucu, hatırlanması gereken öğeleri HTML belgesine yerleştirir.
- Bu teknik, tarayıcının çerezleri kabul etmesini gerektirir; böylece tarayıcı, GET veya POST istekleri sırasında çerezleri sunucuya geri gönderebilir.
- Bu teknik, gizli alanların sunucuya gönderilebilmesi için istemcinin sunucuya yaptığı tüm çağrıların POST olması gerektiğini gerektirir.
- Kullanıcı, tarayıcısı tarafından alınan çerezleri görüntüleyerek saklanan bilgilere erişebilir. Çoğu tarayıcı bu seçeneği sunar.
- Kullanıcı, aldığı HTML belgesinin kaynak kodunu görüntüleyerek saklanan bilgilere erişebilir.

Burada gizli alan tekniği kullanılabilir, çünkü tüm istemci çağrıları POST türündedir.

11.2. Eclipse Projesi

[/personne6] web uygulamasının Eclipse projesi [mvc-personne-06]'i oluşturmak için, 6.2. paragrafında açıklanan prosedürü izleyerek [mvc-personne-05] projesini kopyalayacağız.

11.3. [personne6] web uygulamasının yapılandırılması

/personne6 uygulamasının web.xml dosyası şu şekildedir:


<?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>
...

Bu dosya, birkaç ayrıntı dışında önceki sürümünkiyle aynıdır:

  • 6. satır: Web uygulamasının görüntüleme adı [mvc-personne-06] olarak değiştirilmiştir

[index.jsp] ana sayfası, [/personne5] uygulamasının ana sayfasıyla aynıdır:


<%@ 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. Görünüm kodları

Yalnızca [réponse, erreurs] görünümleri değişmiştir. Artık bu görünümlerin formlarında gizli alanlar bulunurken, önceki sürümde bu formlar hiçbir parametre göndermiyordu.

[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>


  • 6-9. satırlar: 10-12. satırlardaki bağlantıya tıklandığında sunucuya gönderilecek form
  • 6. satır: POST'in hedefi [/do/retourFormulaire] olacaktır
  • 7-8. satırlar: [nom] ve [age] gizli alanları gönderilecektir. Bu alanların ${nom} ve ${age} değerleri, [réponse.jsp]'i görüntüleyecek denetleyici tarafından belirlenecektir. Bu değerler, formda girilen değerler olacaktır.

[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>

Değişiklikler ve açıklamalar, [réponse.jsp] görünümüyle aynıdır. [erreurs] görünüm şablonuna, halihazırda mevcut olan diğer iki öğeye ([erreurs, lienRetourFormulaire]) ek olarak iki yeni öğe ([nom, age]) eklendiği unutulmamalıdır.

Okuyucunun, önceki sürümlerde görülen ilkeye göre bu yeni görünümleri test etmesi önerilir.

11.5. [ServletPersonne] denetleyicisi

[/personne6] web uygulamasının [ServletPersonne] denetleyicisi, önceki sürümdekine çok benzemektedir. Değişiklikler, [erreurs] görünüm modelinin değişmesinden kaynaklanmaktadır. Buraya iki ek öğe eklenmelidir: [nom, age]. Yalnızca bu görünümü görüntüleyen yöntemler etkilenmektedir. Bunlar, [doGet] ve [doValidationFormulaire] yöntemleridir.

11.5.1. [doGet] yöntemi

[doGet] kodunun içeriği şöyledir:

     // GET
    @SuppressWarnings("unchecked")
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

         // servletin başlatılmasının nasıl gerçekleştiği kontrol ediliyor
        if (erreursInitialisation.size() != 0) {
             // hata sayfasına yönlendiriliyor
            request.setAttribute("erreurs", erreursInitialisation);
            getServletContext().getRequestDispatcher(urlErreurs).forward(
                    request, response);
             // son
            return;
        }
...
    }

Aslında bu kod eskisiyle aynıdır. Önceki sürümde, [nom, age] öğeleri [erreurs] görünüm şablonuna eklenmemişti. Bunları şablona eklememeye devam edersek, [erreurs.jsp]'teki ${nom} ve ${age} değişkenleri boş bir dize ile değiştirilecektir. Bu durum bizim için uygundur, çünkü bu özel durumda [Retour au formulaire] bağlantısı kullanıcıya gösterilmez. Nitekim, [lienRetourFormulaire] öğesini de şablona eklemiyoruz. [erreurs.jsp]'teki ${lienRetourFormulaire} değişkeni boş bir dize ile değiştirilecektir. Dolayısıyla herhangi bir bağlantı olmayacağından, [erreurs.jsp] formundaki [nom, age] gizli alanlarının gönderilmesi mümkün olmayacaktır. Bu alanların değeri boş bir dize olabilir.

11.5.2. [doValidationFormulaire] yöntemi

Kodu şu şekildedir:

     // formun doğrulanması
    void doValidationFormulaire(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException{
         // parametreler alınır
        String nom = request.getParameter("txtNom");
        String age = request.getParameter("txtAge");
         // görünüm şablonunu hazırlama [réponse, erreurs]
        request.setAttribute("nom",nom);
        request.setAttribute("age",age);        
        request.setAttribute("lienRetourFormulaire", (String)params.get("lienRetourFormulaire"));
         // parametrelerin doğrulanması
...

8-10. satırlarda, şablona [nom, age, lienRetourFormulaire] öğeleri eklenir. Yöntemin, [réponse] veya [erreurs] görünümlerinden birini görüntülediği bilinmektedir. Dolayısıyla, ikinci görünümün şablonunda [nom,age] öğeleri yer alacaktır.

11.6. Tests

Eclipse projesini [personne-mvc-06] entegre ettikten sonra Tomcat'i başlatın veya yeniden başlatın, ardından [http://localhost:8080/personne6] URL'sini çağırın.