Spring Framework

23
Framework & W eb M V C M uharrem TA Ç M artı Bilişim www.martisoft.com

description

Genç Girişimciler Spring Semineri

Transcript of Spring Framework

Page 1: Spring Framework

Framework & Web M VC

M uharrem TAÇM artı Bilişim

www.martisoft.com

Page 2: Spring Framework

Spring Framework NedirSpring Framework Nedir

2004 yılından itibaren Rod Johnson tarafından geliştirilen, topluluk 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,desteğiyle hızla büyüyen Java ve J2EE Frameworküdür,

Tüm Java Teknolojilerine doğal destek vermektedir,Tüm Java Teknolojilerine doğal destek vermektedir,

Yeni nesil yazılım mimarilerini desteklemektedir,(AOP, IoC…)Yeni nesil yazılım mimarilerini desteklemektedir,(AOP, IoC…)

Çok büyük projelerde rüştünü ispatlamıştır,Çok büyük projelerde rüştünü ispatlamıştır,

Interface driven development önermektedir.Interface driven development önermektedir.

Page 3: Spring Framework

Spring Framework NedirSpring Framework Nedir

Page 4: Spring Framework

Neden Spring MVC ?Neden Spring MVC ?

•Web uygulamalarında modern tasarım desenleri (design patterns) Web uygulamalarında modern tasarım desenleri (design patterns) kullanmaktadır,kullanmaktadır,

•Veri bindirme (data bindings) kolayca gerçekleştirilmektedir,Veri bindirme (data bindings) kolayca gerçekleştirilmektedir,

•Form nesnesi sayesinde denetim (form validation) ve hata yakalama Form nesnesi sayesinde denetim (form validation) ve hata yakalama (error handling) basitleştirilmiştir,(error handling) basitleştirilmiştir,

•Çeşitli gösterim (view) teklolojilerini desteklemektedir,Çeşitli gösterim (view) teklolojilerini desteklemektedir,JSP, Apache Velocity…JSP, Apache Velocity…

Page 5: Spring Framework

IoC IoC (Inversion of Control)(Inversion of Control)

veveInterface Driven DevelopmentInterface Driven Development

Page 6: Spring Framework

IoC Inversion of ControlIoC Inversion of Control

Uygulamalarda new çağrısı ile yaratılan nesneler 2 temel soruna neden Uygulamalarda new çağrısı ile yaratılan nesneler 2 temel soruna neden olmaktadır:olmaktadır:

1.1. Her seferinde yeniden yaratılmakta ve yeniden GC tarafından Her seferinde yeniden yaratılmakta ve yeniden GC tarafından sonlandırılmaktadır. Bu bir işlem maliyetidir.sonlandırılmaktadır. Bu bir işlem maliyetidir.

1.1. Proje sürerken olası değişiklikler için kodun içinde refactoring Proje sürerken olası değişiklikler için kodun içinde refactoring gerektirmektedir.gerektirmektedir.

Page 7: Spring Framework

IoC Inversion of ControlIoC Inversion of Control

Örneğin bir dao içinÖrneğin bir dao için

UserDaoUserDao userDaouserDao == newnew UserDao();UserDao();Şeklinde bir tanımlama ile projede oluşacak veritabanı değişmeleri Şeklinde bir tanımlama ile projede oluşacak veritabanı değişmeleri (Oracle, MySQL…) için ayrı ayrı dao’lar çağırmak zorunda (Oracle, MySQL…) için ayrı ayrı dao’lar çağırmak zorunda kalınacaktır.kalınacaktır.

OracleUserDaoOracleUserDao oracleUserDaooracleUserDao == newnew OracleUserDao();OracleUserDao();MySqlUserDaoMySqlUserDao dbUserDaodbUserDao == newnew MySqlUserDao();MySqlUserDao();........

Page 8: Spring Framework

IoC Inversion of ControlIoC Inversion of Control

Oysa elimizde sadece metotların olduğu bir interface olsa ve bu 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 interface’ten türeyecek sınıfları ayrı bir konfigürasyonda tutsak sorun ortadan kalkacak. interface’i bu methodları kullanacak sınıfa dahil ortadan kalkacak. interface’i bu methodları kullanacak sınıfa dahil ederken de klasik POJO mantığıyla ekleyebiliriz.ederken de klasik POJO mantığıyla ekleyebiliriz.

UserDao userDao;

public UserDao getUserDao() {return userDao;

}

public void setUserDao(UserDao userDao) {this.userDao = userDao;

}

Page 9: Spring Framework

IoC Inversion of ControlIoC Inversion of Control

Peki bu interface ne zaman ve nasıl kullanılacak?Peki bu interface ne zaman ve nasıl kullanılacak?

İşte Spring’in büyüsü burada başlıyor…İşte Spring’in büyüsü burada başlıyor…Konfigürasyonda hangi interface’e hangi class’ın karşılık geldiğini Konfigürasyonda hangi interface’e hangi class’ın karşılık geldiğini yazarak UYGULAMA BAŞLADIĞI ZAMAN classların birer sigleton yazarak UYGULAMA BAŞLADIĞI ZAMAN classların birer sigleton olarak yaratılmasını sağlıyoruz.olarak yaratılmasını sağlıyoruz.

<bean id="userDao" class="com.marti.UserDaoImpl” />

<bean id="userDao" class="com.marti.OracleUserDaoImpl” />

Page 10: Spring Framework

Spring Web MVCSpring Web MVC

Page 11: Spring Framework

Spring Web MVC Genel AkışSpring Web MVC Genel Akış

Yönetimi Spring Framework’e burakılmış web uygulamalarında tüm Yönetimi Spring Framework’e burakılmış web uygulamalarında tüm request ve response’lar öncelikle request ve response’lar öncelikle DispatcherServlet DispatcherServlet tarafından tarafından karşılanır.karşılanır.

DispatcherServlet kendisine gelen talebe göre ve set edilmiş DispatcherServlet kendisine gelen talebe göre ve set edilmiş ControllerController’ı ’ı çağırır.çağırır.

Controller iş mantığını uygulayacak manager’ları ve/veya model Controller iş mantığını uygulayacak manager’ları ve/veya model objelerini kullanarak sonuçta objelerini kullanarak sonuçta ModelAndViewModelAndView nesnesi döndürür. nesnesi döndürür.

ViewResolver set edilmiş olan view objesine yönlenir ve sayfa ViewResolver set edilmiş olan view objesine yönlenir ve sayfa görüntülenir.görüntülenir.

Page 12: Spring Framework

Spring Web MVCSpring Web MVC

DispatcherDispatcherServletServlet

Page 13: Spring Framework

Spring Web MVC KurulumSpring Web MVC Kurulum

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

web.xml içerisinde tanımlama:web.xml içerisinde tanımlama:

Spring konfigürasyom dosyası adı:Spring konfigürasyom dosyası adı:

/WEB-INF/[servlet adı]-servlet.xml/WEB-INF/[servlet adı]-servlet.xml

Page 14: Spring Framework

Spring Web MVC KurulumSpring Web MVC Kurulum

-spring.jar-spring-web.jar-spring-webmvc.jar

Spring 2.0’a kadar olan dönemde tek bir spring.jar var iken Spring 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:2.5’den sonra jarlar aşağıdaki gibi ayrılmıştır:

ModelAndView nesnesine bindirilecek dataların gösterimi için yaygın ModelAndView nesnesine bindirilecek dataların gösterimi için yaygın olarak kullanılan JSTL ve Displaytag jarları:olarak kullanılan JSTL ve Displaytag jarları:

-jstl.jar-standard.jar-displaytag.jarVe neredeyse tüm librarylerin gereksinim duyduğu Ve neredeyse tüm librarylerin gereksinim duyduğu

jakarta-commons jarları…jakarta-commons jarları…

Page 15: Spring Framework

ControllerController

Page 16: Spring Framework

ControllerController

Controller mekanizması DispatcherServlet araclığıyla gelen requestler Controller mekanizması DispatcherServlet araclığıyla gelen requestler ile iş katmanı (business tier) arasında bulunur,ile iş katmanı (business tier) arasında bulunur,

İş katmanından dönen sonuçları bir ModelAndView nesnesine bindirir, İş katmanından dönen sonuçları bir ModelAndView nesnesine bindirir,

AbstractConrollerAbstractConrollerBaseCommandControllerBaseCommandController

AbstractCommandControllerAbstractCommandControllerAbstractFormControllerAbstractFormController

SimpleFormControllerSimpleFormControllerAbstractWizardControllerAbstractWizardController

MultiActionControllerMultiActionControllerParameterizableViewControllerParameterizableViewController

Page 17: Spring Framework

Controller - Controller - SimpleFormControllerSimpleFormController

org.springframework.web.servlet.mvc.SimpleFormControllerorg.springframework.web.servlet.mvc.SimpleFormControllerSpring form nesnesi ile gelen datayı işler,Spring form nesnesi ile gelen datayı işler,İçerisindeki yararlı methodlar ile request yaşam döngüsünü birbirinden ayırır İçerisindeki yararlı methodlar ile request yaşam döngüsünü birbirinden ayırır ve kolaylaştırır.ve kolaylaştırır.

formBackingObject() : formBackingObject() : controller’da ilk çalışan methoddur ve Form controller’da ilk çalışan methoddur ve Form nesnesini hazırlar.nesnesini hazırlar.

referenceData() : referenceData() : sayfaya gönderilecek listeleri yükleyen methoddur.sayfaya gönderilecek listeleri yükleyen methoddur.

initBinder() : initBinder() : Spring Editor aracılığyla çoklu form nesnelerini Spring Editor aracılığyla çoklu form nesnelerini (combobox, chekbox..) set eder.(combobox, chekbox..) set eder.

onSubmit()onSubmit() : : Form submit olunca dönen formun içindeki objenin yakalandığı Form submit olunca dönen formun içindeki objenin yakalandığı methoddur.methoddur.

Page 18: Spring Framework

Spring FormSpring Form

Page 19: Spring Framework

Spring FormSpring Formİçerisinde model objelerini bulunduran klasik POJO nesnesidir.İçerisinde model objelerini bulunduran klasik POJO nesnesidir.

Formun içindeki model objesinin new ile yaratılması gerekir.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.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,<form: tagı bütün HTML formlarını tamamlamaktadır,Örnekler : Örnekler : <form:input<form:input<form:option <form:option ……

Konfigürasyonda Controller’a commandName ve commandClass ile bağlanırlar:Konfigürasyonda Controller’a commandName ve commandClass ile bağlanırlar: <property name="commandName" value="personelForm"/><property name="commandName" value="personelForm"/> <property name="commandClass" value="com.marti.form.PersonelForm"/><property name="commandClass" value="com.marti.form.PersonelForm"/>

Page 20: Spring Framework

Spring Form ValidatorSpring Form Validator

org.springframework.validation.Validator ‘den implemente org.springframework.validation.Validator ‘den implemente olurlar içlerinde iki önemli methodları bulunur:olurlar içlerinde iki önemli methodları bulunur:

public boolean supports(Class clazz) {public boolean supports(Class clazz) {return PersonelForm.class.isAssignableFrom(clazz);return PersonelForm.class.isAssignableFrom(clazz);

}}public void validate(Object obj, Errors errors) {public void validate(Object obj, Errors errors) { PersonelForm personelForm = (PersonelForm)obj;PersonelForm personelForm = (PersonelForm)obj; if(personelForm.getPersonel().getIsim().equals(""))if(personelForm.getPersonel().getIsim().equals(""))

errors.rejectValue("personel.isim","hata.gerekli.isim");errors.rejectValue("personel.isim","hata.gerekli.isim"); if(personelForm.getPersonel().getSoyIsim().equals(""))if(personelForm.getPersonel().getSoyIsim().equals(""))

errors.rejectValue("personel.isim", "hata.gerekli.soyIsim");errors.rejectValue("personel.isim", "hata.gerekli.soyIsim");}}

Page 21: Spring Framework

Spring Form ValidatorSpring Form Validator

Spring konfigürasyonunda FormController’ın tanımlandığı Spring konfigürasyonunda FormController’ın tanımlandığı bean içerisinde bağlanırlar.bean içerisinde bağlanırlar.

<bean name="/personel.mxx" class="com.marti.controller.PersonelFormController"><bean name="/personel.mxx" class="com.marti.controller.PersonelFormController"> <property name="commandName" value="personelForm"/><property name="commandName" value="personelForm"/> <property name="commandClass" value="com.marti.form.PersonelForm"/><property name="commandClass" value="com.marti.form.PersonelForm"/> <property name="validator"><property name="validator"> <bean class="com.marti.validator.PersonelFormValidator"/><bean class="com.marti.validator.PersonelFormValidator"/> </property></property></bean></bean>

Page 22: Spring Framework

SORU – CEVAP BÖLÜMÜ

Page 23: Spring Framework

Teşekkürler

Muharrem TAÇMartı Bilişim

[email protected]