9 Ağustos 2017 Çarşamba

Spring MVC

Merhaba arkadaşlar,

Bu yazımda Spring MVC yapısını açıklamaya çalışacagım.

Spring java tabanlı enterprise uygulamalar için kapsamlı bir programlama ve konfigürasyon altyapı destegi sunar. Bu sayede yazılımcı birçok yükten kurtulmuş olur.

MVC ise Spring'ten bagımsız olarak WEB projelerinde kullanılan bir yazılım mimarisidir. Spring ile ortaya çıkmamıştır. Hali hazırda bir çok Web projesi için kullanılan ve kabul görmüş bir mimari oldugundan Spring içinde kullanılır.


MVC Mimarisi

Model-View-Controller bir Web mimarisidir. Uygulamanın arayüz, iş-işlem, veri gibi sorumluluklar bakımından katmanlara bölünerek gerçekleştirilmesini saglar. Bu sayede katmanlar birbirinden bagımsızdır ve yönetimi kolaylaşır.

Mimariyi incelersek;

Model:          


  • Uygulamada kullanılan verileri temsil eder ve verilerin işlenme mantığının saklandığı kısımdır.Uygulama verisinden sorumlu katmandır. Gereken nesne tanımları diyebiliriz.
  • Verilerin veritabanına yazılması veya veritabanından alınması burada olabilir.


View:

  • Verilerin arayüzden kullanıcıya sunuldugu katmandır. Basitçe, uygulamamızın kullanıcı tarafından görüldügü arayüzdür. ( jsp vs.)

Controller:

  • Model ve View arasında getir-götür işlemlerini yapar. 
  • Kullanıcı View üzerinden gerçekleştirdigi işlemlerden alınan veriyi Model'e taşır. Model'den aldıgı veriyi ise View üzerinden kullanıcıya gösterir.




Yukarıdaki şekile bakarsak yapıyı daha rahat kafamızda canlandırabiliriz. Kullanıcı tarafından view'dan bir işlem gerçekleştirilir. Öncelikle bu durumda direk Model ile baglantı kurulmaz veya başka bir View ile de baglantı kurulmaz bilgi aktarılmaz. Öncelikle bu bilgilier Controller'a gönderilir. Controller Model ile baglantı kurar ve gerekli işlemleri gerçekleştirip kullanıcıya uygun bilgileri bir View üzerinde gösterir. Controller'ı burada trafik polisi gibi düşünebiliriz. 


Örnek olarak düşünecek olursak,
Bir MVC projesi çalıştırıldıgında kullanıcıya tarayıcı üzerinden bir View gösterilir. Login sayfası örnegini düşünürsek, Login için bir sayfa karşımıza gelir. Bu sayfaya gerekli kullanıcı bilgilerini  ( kullanıcı adı, kullanıcı soyadı, email, şifre vs. ) girdikten sonra KAYIT butonuna bastıgımızda bu bilgiler Controller'a gönderilir. Controller bu bilgileri alıp, bi Model nesnesi oluşturup, nesneye set eder ve daha sonra bu bilgileri Model'e baglı olan database'ye kayıt için gönderir. Database'ye kayıt işleminden sonra Model Controller'a bir cevap döner. Controller'da bu cevaba göre kullanıcıya bir hoşgeldin sayfası ( html , jsp vs) döner. Yani kullanıcıya bir View döner. 

Sonuç olarak Model ile View arasındaki işlemleri Controller'da gerçekleştiririz. Model ile View arasında direk bir baglantı kurulmaz veya iki View arasında da direk bir baglantı kurulmaz. Bütün iş Controller tarafından yönetilir.


Spring MVC Yapısı

MVC mimarisinin Spring yapısına entegre edilmiş şeklidir. Web projelerinin olmazsa olmazıdır.



Yukarıdaki şekilde Spring MVC genel mimarisi gösterilmektedir. Bu yapıyı açıklayacak olursak;

Kullanıcıdan gelen bir istek ( request ) Distpatcher Servlet'e gelir. Dispatcher Servlet  front-controller (design pattern) tasarım deseni yapısında bir dispatcher'dır. Gelen bütün requestler buradan akar ve burada Handle edilerek (Handler Mapping)  doğru controller bilgisi bulunur. Controller bilgisi Disapatcher Servlete'e gönderilir.  Bu bilgiye bakarak Dispatcher Servlet ilgili Controller'a reuqest'i gönderir. İlgili Controller ise gerekli işlemleri yapıp bir ModelAndView nesnesi döndürür. Bu nesne içerisinde hangi View'ın kullanıcıya response olarak gönderilecegi ve View içerisinde gösterilecek bazı bilgiler bulunur. Dispatcher Servlet bu View'ı elde etmek için View Resolver'a gider. View Resolver bir View döndürür ve Dispatcher Servlet ilgili bilgileri bu View içerisine yazar. Ardından View'ı response olarak kullanıcıya gönderir. 

Dispatcher Servlet sadece Spring MVC de kullanılmaktadır.

Spring MVC yapısını daha iyi anlayabilmek için Spring MVC ile Hello World Örnegi yazıma bakabilirsiniz.



Kaynaklar:









Hiç yorum yok:

Yorum Gönder