Bu Blogda Ara

15 Mayıs 2010 Cumartesi

Spring Framework - Web MVC / NetBeans 6.8

Herkese merhaba,
Bu yazımda sizlerle Spring Framework ile mvc web uygulamalarına giriş yapacağız. Amacım framework altyapısını uzun uzun anlatmak, çıkış hikayesi vb. yazılarla aklınızı karıştırmak değil. Detaylı bilgi almak isteyenler http://www.springsource.com/ adresinden ya da arama motorlarını kullanarak bilgi alabilirler. Arama yaptığınızda siz de anlayacaksınız, tüm sitelerde bu konuya giriş yapılmış. Framework alt yapısı çalışma mantığı anlatılmış fakat elle tutulur bir proje yok. En büyük sorun çalışan uygulama eksikliği. Elimden geldiğince sizlere gerçek şartlarda çalışan uygulamalar göstermeye çalışacağım.

Hangi IDE?

Ben bu örnekte Netbeans 6.8 üzerinden anlatacağım. Bu geliştirme ortamını seçmemin sebebi kolay olması. İçeresinde bir çok gerekli kütüphane hazır olarak geliyor. Olayı kavradıktan sonra Eclipse ile projelerimizi geliştirmeye devam edeceğiz. Buradaki tek amacımız Spring, IDE kaynaklı sorunlarla kafamızı yoramayız.

Ortamın Hazırlanması

Netbeans 6.8 Web EE içeren bir paketini kurmanız yeterli. Ayrıca Java kodlarının derlenmesi için JDK gerekli konumuz Java olmadığı için bundan bahsetme gereği duymuyorum.
File | New
Netbeans geliştirme ortamını açtıktan sonra yeni bir Dynamic Web Application projesi oluşturuyoruz.



Daha sonra dikkat etmeniz gereken tek nokta projemize dahil edeceğimiz kütüphanelerdir. Burada Spring Web MVC 2.5 seçeneğini işaretliyoruz.



Finish diyerek projemizi oluşturuyoruz. Sonra karşınıza şu şekilde bir görüntü çıkmalı.



Şimdi projemizi Run menüsünden ya da F6 kısayol tuşu ile çalıştıralım. Karşınıza aşağıdaki gibi bir ekran çıktıysa merak etmeyin doğru yoldasınız :)



Dur bir dakika! Burada neler oluyor?
Hemen izah edeyim. Az önce bir Spring Web MVC projesi oluşturduk. Netbeans bizim yerimize varsayılan bazı ayarlamaları ve iskelet yapıyı oluşturdu. Bu Netbeans'in özelliği. Sol taraftaki klasör yapısına bakmamız yapıyı anlamada faydalı olacaktır. Web Pages klasörü altında WEB-INF, META-INF klasörleri ve redirect.jsp dosyası var. WEB-INF ve META-INF dışarıdan erişilemeyen (dışarıdan derken, projeyi siteye yüklediğimizde internetten sitemize giren kullanıcıları kastediyorum) özel ayar klasörleridir. Bu klasörlerden bahsetmeden önce ana dizinde bulunan tek dosya olan redirect.jsp ye bakalım. Bildiğimiz gibi Java Dynamic Web projelerinde bütün JSP dosyaları Web Pages altında olurdu ve biz buradaki dosyalara web tarayıcımız vasıtasıyla erişebiliyorduk. Fakat burada yalnız bir dosya var? Öyle ise hemen merakımızı redirect.jsp dosyasına bakarak giderelim.

Buyurun efendim:


Hiçbir şey anlamadım?
Kesinlikle çok saçma! index.htm nerede? Olmayan bir dosyaya yönlendirme mi yapılıyor? Burada bir gariplik var sanki. Evet durum biraz garip ama biraz incelediğimizde ve detaylara dikkat ettiğimizde aslında ne kadar güzel bir yapı olduğunu daha iyi anlayacağız. Burada index.htm dosyasına yönlendirerek aslında index.htm dosyasını açmıyoruz, index adındaki görüntüyü çağırıyoruz.
Görüntü mü? Nasıl yani?
MVC tasarım şablonunun (Model View Controller) ortasındaki View olayından bahsediyoruz. Bu tasarım desenini anlamak biraz sancılı olabilir ama anladıktan sonra hele bir de nimetlerinden faydalandıktan sonra ne kadar güzel bir şey olduğunu siz de anlayacaksınız. Görüntü dediğimiz kavram, önceden hazırlanmış tasarım dosyalarıdır. Herbiri bir controller nesnesine bağlıdır. Onun yetkisi olamadan ilgili görüntüye erişmek mümkün değildir.
İyice karıştı, Controller derken?
Controller sınıflar görüntüleri kullanıcıdan gelen talepler doğrultusunda göstermek ve şekillendirmek adına geliştirilmiştir. Daha detaylı bilgiyi ilerleyen kısımlarda vereceğim.

Tamam ama hâlâ olmayan bir index.htm dosyasını nasıl açtığımızı anlayamadım?

Sır perdesi WEB-INF klasörünü açmamızla aralanacaktır. Bildiğimiz gibi WEB-INF klasörü özel bir ayar klasörü.



xml uzuntılı dosyalar ayarlama için gerekli dosyalar. Sorumuzun cevabı ise jsp klasörü altında gizli. Evet haklısınız, index.jsp :D
Görüntü dosyalarımızı bu klasör altına atmamızın sebebi dış dünyadan soyutlamak. Yalnızca controller nesnesi tarafından erişilmesini sağlamak için yapılmış bir sarmalama mekanizması. Zekice!
Hmm.. Peki ya uzantı?
Sizden de hiçbir şey kaçmıyor :) ama yine de dikkatsizsiniz. Projemizi ilk oluşturduğumuz zamana geri dönelim. Orada Spring Web MVC 2.5 kütüphanesini seçerken Dispatcher Mapping: *.htm şeklinde bir desen girmiştik. İşte bu *.htm şeklinde gelen istekleri .jsp uzantılı görüntülere aktarılmasını sağlıyor. Bu desen çok farklı şekilde olabilir bunları daha sonra inceleyeceğiz. Tüm bu ayarlar WEB-INF altındaki xml uzantılı dosyalarda tanımlanıyor. Bu konuya da daha sonra değineceğim.
Kafam karıştı, böylece bırakıp gidemezsin!
Bu yazımı burada noktalayacağım. Amacım çalışan örneklerle bu konuya değinmekti. Tam olarak hedefime ulaştığım söylenemez, fakat parça parça anlatmak daha faydalı olacak gibi. Konu hakkında yazmaya kaldığım yerden devam edeceğim.
Görüşmek üzere...

1 yorum:

Adsız dedi ki...

Süpersiniz resmen bildiğim halde bu konuları tekrar okudum, teşekkürler değerli bilgileriniz ve güzel anlatımınız için :)