1. Framework & W eb M VC
M uharrem TAÇ
M artı Bilişim
www.martisoft.com
2. Spring Framework Nedir
2004 yılından itibaren Rod Johnson tarafından geliştirilen, topluluk
desteğiyle hızla büyüyen Java ve J2EE Frameworküdür,
Tüm Java Teknolojilerine doğal destek vermektedir,
Yeni nesil yazılım mimarilerini desteklemektedir,(AOP, IoC…)
Çok büyük projelerde rüştünü ispatlamıştır,
Interface driven development önermektedir.
4. Neden Spring MVC ?
•Web uygulamalarında modern tasarım desenleri (design patterns)
kullanmaktadır,
•Veri bindirme (data bindings) kolayca gerçekleştirilmektedir,
•Form nesnesi sayesinde denetim (form validation) ve hata yakalama
(error handling) basitleştirilmiştir,
•Çeşitli gösterim (view) teklolojilerini desteklemektedir,
JSP, Apache Velocity…
5. IoC
(Inversion of Control)
ve
Interface Driven Development
6. IoC Inversion of Control
Uygulamalarda new çağrısı ile yaratılan nesneler 2 temel soruna neden
olmaktadır:
1. Her seferinde yeniden yaratılmakta ve yeniden GC tarafından
sonlandırılmaktadır. Bu bir işlem maliyetidir.
1. Proje sürerken olası değişiklikler için kodun içinde refactoring
gerektirmektedir.
7. IoC Inversion of Control
Örneğin bir dao için
UserDao userDao = new UserDao();
Şeklinde bir tanımlama ile projede oluşacak veritabanı değişmeleri
(Oracle, MySQL…) için ayrı ayrı dao’lar çağırmak zorunda
kalınacaktır.
OracleUserDao oracleUserDao = new OracleUserDao();
MySqlUserDao dbUserDao = new MySqlUserDao();
..
..
8. IoC Inversion of Control
Oysa elimizde sadece metotların olduğu bir interface olsa ve bu
interface’ten türeyecek sınıfları ayrı bir konfigürasyonda tutsak sorun
ortadan kalkacak. interface’i bu methodları kullanacak sınıfa dahil
ederken de klasik POJO mantığıyla ekleyebiliriz.
UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
9. IoC Inversion of Control
Peki bu interface ne zaman ve nasıl kullanılacak?
İşte Spring’in büyüsü burada başlıyor…
Konfigürasyonda hangi interface’e hangi class’ın karşılık geldiğini
yazarak UYGULAMA BAŞLADIĞI ZAMAN classların birer sigleton
olarak yaratılmasını sağlıyoruz.
<bean id=quot;userDaoquot; class=quot;com.marti.UserDaoImpl” />
<bean id=quot;userDaoquot; class=quot;com.marti.OracleUserDaoImpl” />
11. Spring Web MVC Genel Akış
Yönetimi Spring Framework’e burakılmış web uygulamalarında tüm
request ve response’lar öncelikle DispatcherServlet tarafından
karşılanır.
DispatcherServlet kendisine gelen talebe göre ve set edilmiş Controller’ı
çağırır.
Controller iş mantığını uygulayacak manager’ları ve/veya model
objelerini kullanarak sonuçta ModelAndView nesnesi döndürür.
ViewResolver set edilmiş olan view objesine yönlenir ve sayfa
görüntülenir.
13. Spring Web MVC Kurulum
web.xml içerisinde tanımlama:
<servlet>
<servlet-name>servlet adı </servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servlet adı</servlet-name>
<url-pattern>*.uzantı</url-pattern>
</servlet-mapping>
Spring konfigürasyom dosyası adı:
/WEB-INF/[servlet adı]-servlet.xml
14. Spring Web MVC Kurulum
Spring 2.0’a kadar olan dönemde tek bir spring.jar var iken Spring
2.5’den sonra jarlar aşağıdaki gibi ayrılmıştır:
-spring.jar
-spring-web.jar
-spring-webmvc.jar
ModelAndView nesnesine bindirilecek dataların gösterimi için yaygın
olarak kullanılan JSTL ve Displaytag jarları:
-jstl.jar
-standard.jar
-displaytag.jar
Ve neredeyse tüm librarylerin gereksinim duyduğu
jakarta-commons jarları…
16. Controller
Controller mekanizması DispatcherServlet araclığıyla gelen requestler
ile iş katmanı (business tier) arasında bulunur,
İş katmanından dönen sonuçları bir ModelAndView nesnesine bindirir,
AbstractConroller
BaseCommandController
AbstractCommandController
AbstractFormController
SimpleFormController
AbstractWizardController
MultiActionController
ParameterizableViewController
17. Controller - SimpleFormController
org.springframework.web.servlet.mvc.SimpleFormController
Spring form nesnesi ile gelen datayı işler,
İçerisindeki yararlı methodlar ile request yaşam döngüsünü birbirinden ayırır
ve kolaylaştırır.
formBackingObject() : controller’da ilk çalışan methoddur ve Form
nesnesini hazırlar.
referenceData() : sayfaya gönderilecek listeleri yükleyen methoddur.
initBinder() : Spring Editor aracılığyla çoklu form nesnelerini
(combobox, chekbox..) set eder.
onSubmit() : Form submit olunca dönen formun içindeki objenin yakalandığı
methoddur.
19. Spring Form
İçerisinde model objelerini bulunduran klasik POJO nesnesidir.
Formun içindeki model objesinin new ile yaratılması gerekir.
Jsp sayfalarına bind edilmesi için Spring <form:form> tagı ile kullanılmaktadır.
<form: tagı bütün HTML formlarını tamamlamaktadır,
Örnekler :
<form:input
<form:option
…
Konfigürasyonda Controller’a commandName ve commandClass ile bağlanırlar:
<property name=quot;commandNamequot; value=quot;personelFormquot;/>
<property name=quot;commandClassquot; value=quot;com.marti.form.PersonelFormquot;/>
20. Spring Form Validator
org.springframework.validation.Validator ‘den implemente
olurlar içlerinde iki önemli methodları bulunur:
public boolean supports(Class clazz) {
return PersonelForm.class.isAssignableFrom(clazz);
}
public void validate(Object obj, Errors errors) {
PersonelForm personelForm = (PersonelForm)obj;
if(personelForm.getPersonel().getIsim().equals(quot;quot;))
errors.rejectValue(quot;personel.isimquot;,quot;hata.gerekli.isimquot;);
if(personelForm.getPersonel().getSoyIsim().equals(quot;quot;))
errors.rejectValue(quot;personel.isimquot;, quot;hata.gerekli.soyIsimquot;);
}
21. Spring Form Validator
Spring konfigürasyonunda FormController’ın tanımlandığı
bean içerisinde bağlanırlar.
<bean name=quot;/personel.mxxquot; class=quot;com.marti.controller.PersonelFormControllerquot;>
<property name=quot;commandNamequot; value=quot;personelFormquot;/>
<property name=quot;commandClassquot; value=quot;com.marti.form.PersonelFormquot;/>
<property name=quot;validatorquot;>
<bean class=quot;com.marti.validator.PersonelFormValidatorquot;/>
</property>
</bean>