SlideShare uma empresa Scribd logo
1 de 26
Struts 2 İle Tanışma Çeviri: 30 Haziran 2008 Okan Özeren okanozeren@gmail.com Kaynak: 24 Şubat 2007 Thomas Wiradikusumathomas@wiradikusuma.com Java User Group Indonesia
Struts 2 Kurumlar için Java Web uygulamaları geliştirmeye hazır, üstün ve uzatılabilir bir çatıdır (framework). MVC (Model-View-Controller) bir çatıdır. Action tabanlıdır. Bilinen, ünlü Struts çatısının varisidir (ve teknik açıdan WebWork 2'nin de).
Artıları Basit mimari ObjectFactory ile uyumlu Interceptor'lar, Action'lar, Result'lar Controller veya Sayfa tabanlı gezinim POJO (Plain Old Java Object), Annotation ve JSF desteği OGNL (Object-Graph Navigation Language) destekli düzenlenebilir tag kütüphanesi Value stack (değer yığıtı) Öntanımlı IoC (Inversion of Control) konteynırı olarak Spring kullanımı Hızlı başlangıç Dahili Ajax desteği Konfigürasyonu kolaylaştırıcı bir çok mantıklı öntanımlı kural Kolay test edilebilir (konteynır dışında) Struts 1 ve WebWork 2'nin en iyi özelliklerini barındırması.
Mimari Request (İstek) gelir FilterDispatcher uygun action'u bulur Interceptor'lar (denetleyiciler) uygulanır Action içindeki metod çalıştırılır (genellikle temel işlevleri yerine getiren) Sonuç çıktı olarak sunulur
Mimari devam
ActionMapper HTTP ve action çağırım istekleri arasında iki taraflı eşleme sağlar Öntanımlı implementasyon standart *.[ext] (genellikle action) kalıbını kullanır. Uzantı, "struts.action.extension" Struts konfigürasyon anahtarı ile tanımlanır.Önekler: method: <a:submit name="method:bar" value="Bar" /> action: <a:submit name="action:foo" value="Foo" /> redirect: <a:submit name="redirect:http://www.google.com" value="Google" /> redirect-action: <a:submit name="redirect-action :foo" value="Foo" />
Interceptor'lar <interceptor-stack name="yığıt">   <interceptor-ref name="ilkÇalışacakInterceptor"/>   <interceptor-ref name="ikinciÇalışacakInterceptor"/>   <interceptor-ref name="üçüncüÇalışacakInterceptor"/>   <interceptor-ref name="sonÇalışacakInterceptor"/> </interceptor-stack> ilkÇalışacakInterceptor ikinciÇalışacakInterceptor üçüncüÇalışacakInterceptor      sonÇalışacakInterceptor         Action1         Action2 (zincir) ÖnSonuçDinleyicim         Result (sonuç)  sonÇalışacakInterceptor üçüncüÇalışacakInterceptor ikinciÇalışacakInterceptor ilkÇalışacakInterceptor
Interceptor'lar devam
Action'lar Bütün action'lar, execute() metodunu veya bu gibi metodları barındırmalıdır. Bununla birlikte XWork 1.1'deki gibi, bu çok gerekli değildir ve sadece kullanıcılara yardımcı olması amacıyla bulunabilir. Farklı bir interface'i gerçekleştirmeden bu interface'i kullanarak POJO'ları yaratmakta tamamen serbestsinizdir. ActionSupport sınıfı bir çok ortak action için öntanımlı gerçekleştirim sunar.
Result'lar
Tür dönüşümü HTTP'de her şey String'dir Dahili: boolean, char, numeric, types, dates, arrays, collections ClassAdı-çevrim.properties: foo = package.FooÇevirici Genel olarak struts-çevrim.properties class yolunun kök dizininde bulunur (genellikle WEB-INF/classes): package.Foo = package.FooÇevirici Temel bir tür dönüştürücü'yü StrutsTypeConverter'dan uzatabilirsiniz (extending) TypeConversionException istisnası (exception) çevrim istisnası oluştuğunda fırlatılır. Bu istisnada gösterilecek bilgi ise Struts'ın struts.default.invalid.fieldvalue konfigürasyon anahtarında tutulur
Yerelleştirme Kaynak paketlerine aşağıdaki sıra ile bakılır: ActionClass.properties BaseClass.properties (Object.properties'e başından sonuna kadar) Interface.properties (her interface vealt-interface) ModelDriven modeli (eğer ModelDriven tanımlanmışsa), model nesnesini 1'den itibaren tekrarlamak için package.properties (class nerde bulunuyorsa ve kök dizine kadar her üst dizinde) Kendi I18n mesaj anahtarı hiyerarşisine göre arar Genel kaynak (global resource properties) anahtarları Erişim yolları: getText: <s:property value="getText('herhangibir.anahtar')" /> text tag’ı: <s:text name="herhangibir.anahtar" /> Değer yığıtında herhangi bir kaynak paketine erişmek için I18n tag’ı: 	<s:i18n name=" herhangibir.paket" > <s:text name=" herhangibir.anahtar" /> 	</s:i18n>
Konfigürasyon dosyaları
Taglib Taglib’siz (JSP): <% User user = ActionContext.getContext() %> <form action="Profile_update.action" method="post">  <table>   <tr>     <td> align="right"><label>First name:</label></td>     <td><input type="text" name="user.firstname" value="<%=user.getFirstname() %> /></td>   </tr>   <tr>    <td>     <input type="radio" name="user.gender" value="0" id="user.gender0"       <% if (user.getGender()==0) { %> checked="checked" %> } %> />      <label for="user.gender0">Female</label> ... Taglib’li (JSP): <s:actionerror/> <s:form action="Profile_update" validate="true"> <s:textfield label="Username" name="username"/> <s:password label="Password" name="password"/> <s:password label="(Repeat) Password" name="password2"/> <s:textfield label="Full Name" name="fullName"/> <s:textfield label="From Address" name="fromAddress"/> <s:textfield label="Reply To Address" name="replyToAddress"/> <s:submit value="Save" name="Save"/> <s:submit action="Register_cancel" value="Cancel" name="Cancel"onclick="form.onsubmit=null"/> </s:form>
Taglib devam <%@ taglib uri="/struts-tags" prefix="s" %> Tag kategorileri: Kontrol Veri UI (forma özgü olanlar ve diğerleri) Ajax
Servlet/JSP kapsamındaki nesneler Application<s:property value="%{#application.foo}" /> Session<s:property value="%{#session.foo}" /> Request<s:property value="%{#request.foo}" /> Parameter<s:property value="%{#parameter.foo}" /> Context<s:property value="%{#foo}" />
OGNL Object Graph Navigation Language JSTL - EL’den (Jsp Standard Tag Library - Expression Language)daha güçlüdür
Spring entegrasyonu Varsayılan, framework’un nesneleri yaratırken Spring kullanmayı en azından denemesidir Eğer nesne Spring tarafından yaratılmamışsa, o zaman framework nesneleri kendisi yaratacaktır
Test Doğrudan Action çağrımı Konteynır dışı test Interceptor ve/veya Result’ların testi
Struts 1 ve Struts 2 Aynı ada sahip olmasına rağmen (Struts), Struts 1’den WebWork 2’ye geçiş oldukça zordur.
WebWork 2 ve Struts 2 Yalnız isimlendirme ve namespace dışında hemen hemen aynıdır.
Gereksinimler Servlet API 2.4 JSP API 2.0 Java 5 ve üstü (veya Retroweaver ile 1.4)
Açık kaynak kütüphanelerle entegrasyon Spring 2.0 Velocity Freemarker JasperReports DWR (Direct Web Remoting) Apache Pluto dojo ve daha birçoğu...
Bahsedilmeyenler Annotation desteği JSF, Ajax desteği plug-in’ler Hızlı başlangıç (QuickStart) Validation (onaylama) Değer yığıtı (Value stack) Wildcard haritalama(mappings) Sıfı configürasyon (Zero configuration)
Adresler Struts 2 http://struts.apache.org/2.x/ WebWorkhttp://www.opensymphony.com/webwork/
Teşekkürler ve örnek uygulama

Mais conteúdo relacionado

Semelhante a Struts 2 Ile Tanisma

JSP Custom Tag Library
JSP Custom Tag LibraryJSP Custom Tag Library
JSP Custom Tag Libraryseleciii44
 
Yalova Üniversitesi - (JavaServer Pages) JSP
Yalova Üniversitesi - (JavaServer Pages) JSPYalova Üniversitesi - (JavaServer Pages) JSP
Yalova Üniversitesi - (JavaServer Pages) JSPMimar Aslan
 
Roket Yazılımı Eğitimi Hafta 1
Roket Yazılımı Eğitimi Hafta 1Roket Yazılımı Eğitimi Hafta 1
Roket Yazılımı Eğitimi Hafta 1Uğurkan Ateş
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculumustafa sarac
 
WAF atlatma yontemleri, Hacktrick14, Suleyman Ozarslan
WAF atlatma yontemleri, Hacktrick14,  Suleyman OzarslanWAF atlatma yontemleri, Hacktrick14,  Suleyman Ozarslan
WAF atlatma yontemleri, Hacktrick14, Suleyman OzarslanSüleyman Özarslan
 
Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Anar Godjaev
 
9. şablonlar
9. şablonlar9. şablonlar
9. şablonlarkarmuhtam
 
Android'e Giriş Eğitimleri 1_2
Android'e Giriş Eğitimleri 1_2Android'e Giriş Eğitimleri 1_2
Android'e Giriş Eğitimleri 1_2Univerist
 
Javascript kursu-kartal
Javascript kursu-kartalJavascript kursu-kartal
Javascript kursu-kartalsersld61
 
10. istisna isleme
10. istisna isleme10. istisna isleme
10. istisna islemekarmuhtam
 

Semelhante a Struts 2 Ile Tanisma (20)

JSP Custom Tag Library
JSP Custom Tag LibraryJSP Custom Tag Library
JSP Custom Tag Library
 
Csharp 3.0
Csharp 3.0Csharp 3.0
Csharp 3.0
 
Junit
JunitJunit
Junit
 
Yalova Üniversitesi - (JavaServer Pages) JSP
Yalova Üniversitesi - (JavaServer Pages) JSPYalova Üniversitesi - (JavaServer Pages) JSP
Yalova Üniversitesi - (JavaServer Pages) JSP
 
Jsf
JsfJsf
Jsf
 
Merhaba Sinatra
Merhaba SinatraMerhaba Sinatra
Merhaba Sinatra
 
PostgreSQL Hem Güçlü Hem Güzel!
PostgreSQL Hem Güçlü Hem Güzel!PostgreSQL Hem Güçlü Hem Güzel!
PostgreSQL Hem Güçlü Hem Güzel!
 
Roket Yazılımı Eğitimi Hafta 1
Roket Yazılımı Eğitimi Hafta 1Roket Yazılımı Eğitimi Hafta 1
Roket Yazılımı Eğitimi Hafta 1
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculu
 
WAF atlatma yontemleri, Hacktrick14, Suleyman Ozarslan
WAF atlatma yontemleri, Hacktrick14,  Suleyman OzarslanWAF atlatma yontemleri, Hacktrick14,  Suleyman Ozarslan
WAF atlatma yontemleri, Hacktrick14, Suleyman Ozarslan
 
Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇
 
9. şablonlar
9. şablonlar9. şablonlar
9. şablonlar
 
Android'e Giriş Eğitimleri 1_2
Android'e Giriş Eğitimleri 1_2Android'e Giriş Eğitimleri 1_2
Android'e Giriş Eğitimleri 1_2
 
Javascript kursu-kartal
Javascript kursu-kartalJavascript kursu-kartal
Javascript kursu-kartal
 
10. istisna isleme
10. istisna isleme10. istisna isleme
10. istisna isleme
 
Extjs 4 education
Extjs 4 educationExtjs 4 education
Extjs 4 education
 
PAROLA KIRMA SALDIRILARI
PAROLA KIRMA SALDIRILARIPAROLA KIRMA SALDIRILARI
PAROLA KIRMA SALDIRILARI
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
ASP.NET MVC 3
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3
 
ASP.NET MVC 3
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3
 

Struts 2 Ile Tanisma

  • 1. Struts 2 İle Tanışma Çeviri: 30 Haziran 2008 Okan Özeren okanozeren@gmail.com Kaynak: 24 Şubat 2007 Thomas Wiradikusumathomas@wiradikusuma.com Java User Group Indonesia
  • 2. Struts 2 Kurumlar için Java Web uygulamaları geliştirmeye hazır, üstün ve uzatılabilir bir çatıdır (framework). MVC (Model-View-Controller) bir çatıdır. Action tabanlıdır. Bilinen, ünlü Struts çatısının varisidir (ve teknik açıdan WebWork 2'nin de).
  • 3. Artıları Basit mimari ObjectFactory ile uyumlu Interceptor'lar, Action'lar, Result'lar Controller veya Sayfa tabanlı gezinim POJO (Plain Old Java Object), Annotation ve JSF desteği OGNL (Object-Graph Navigation Language) destekli düzenlenebilir tag kütüphanesi Value stack (değer yığıtı) Öntanımlı IoC (Inversion of Control) konteynırı olarak Spring kullanımı Hızlı başlangıç Dahili Ajax desteği Konfigürasyonu kolaylaştırıcı bir çok mantıklı öntanımlı kural Kolay test edilebilir (konteynır dışında) Struts 1 ve WebWork 2'nin en iyi özelliklerini barındırması.
  • 4. Mimari Request (İstek) gelir FilterDispatcher uygun action'u bulur Interceptor'lar (denetleyiciler) uygulanır Action içindeki metod çalıştırılır (genellikle temel işlevleri yerine getiren) Sonuç çıktı olarak sunulur
  • 6. ActionMapper HTTP ve action çağırım istekleri arasında iki taraflı eşleme sağlar Öntanımlı implementasyon standart *.[ext] (genellikle action) kalıbını kullanır. Uzantı, "struts.action.extension" Struts konfigürasyon anahtarı ile tanımlanır.Önekler: method: <a:submit name="method:bar" value="Bar" /> action: <a:submit name="action:foo" value="Foo" /> redirect: <a:submit name="redirect:http://www.google.com" value="Google" /> redirect-action: <a:submit name="redirect-action :foo" value="Foo" />
  • 7. Interceptor'lar <interceptor-stack name="yığıt"> <interceptor-ref name="ilkÇalışacakInterceptor"/> <interceptor-ref name="ikinciÇalışacakInterceptor"/> <interceptor-ref name="üçüncüÇalışacakInterceptor"/> <interceptor-ref name="sonÇalışacakInterceptor"/> </interceptor-stack> ilkÇalışacakInterceptor ikinciÇalışacakInterceptor üçüncüÇalışacakInterceptor sonÇalışacakInterceptor Action1 Action2 (zincir) ÖnSonuçDinleyicim Result (sonuç) sonÇalışacakInterceptor üçüncüÇalışacakInterceptor ikinciÇalışacakInterceptor ilkÇalışacakInterceptor
  • 9. Action'lar Bütün action'lar, execute() metodunu veya bu gibi metodları barındırmalıdır. Bununla birlikte XWork 1.1'deki gibi, bu çok gerekli değildir ve sadece kullanıcılara yardımcı olması amacıyla bulunabilir. Farklı bir interface'i gerçekleştirmeden bu interface'i kullanarak POJO'ları yaratmakta tamamen serbestsinizdir. ActionSupport sınıfı bir çok ortak action için öntanımlı gerçekleştirim sunar.
  • 11. Tür dönüşümü HTTP'de her şey String'dir Dahili: boolean, char, numeric, types, dates, arrays, collections ClassAdı-çevrim.properties: foo = package.FooÇevirici Genel olarak struts-çevrim.properties class yolunun kök dizininde bulunur (genellikle WEB-INF/classes): package.Foo = package.FooÇevirici Temel bir tür dönüştürücü'yü StrutsTypeConverter'dan uzatabilirsiniz (extending) TypeConversionException istisnası (exception) çevrim istisnası oluştuğunda fırlatılır. Bu istisnada gösterilecek bilgi ise Struts'ın struts.default.invalid.fieldvalue konfigürasyon anahtarında tutulur
  • 12. Yerelleştirme Kaynak paketlerine aşağıdaki sıra ile bakılır: ActionClass.properties BaseClass.properties (Object.properties'e başından sonuna kadar) Interface.properties (her interface vealt-interface) ModelDriven modeli (eğer ModelDriven tanımlanmışsa), model nesnesini 1'den itibaren tekrarlamak için package.properties (class nerde bulunuyorsa ve kök dizine kadar her üst dizinde) Kendi I18n mesaj anahtarı hiyerarşisine göre arar Genel kaynak (global resource properties) anahtarları Erişim yolları: getText: <s:property value="getText('herhangibir.anahtar')" /> text tag’ı: <s:text name="herhangibir.anahtar" /> Değer yığıtında herhangi bir kaynak paketine erişmek için I18n tag’ı: <s:i18n name=" herhangibir.paket" > <s:text name=" herhangibir.anahtar" /> </s:i18n>
  • 14. Taglib Taglib’siz (JSP): <% User user = ActionContext.getContext() %> <form action="Profile_update.action" method="post"> <table> <tr> <td> align="right"><label>First name:</label></td> <td><input type="text" name="user.firstname" value="<%=user.getFirstname() %> /></td> </tr> <tr> <td> <input type="radio" name="user.gender" value="0" id="user.gender0" <% if (user.getGender()==0) { %> checked="checked" %> } %> /> <label for="user.gender0">Female</label> ... Taglib’li (JSP): <s:actionerror/> <s:form action="Profile_update" validate="true"> <s:textfield label="Username" name="username"/> <s:password label="Password" name="password"/> <s:password label="(Repeat) Password" name="password2"/> <s:textfield label="Full Name" name="fullName"/> <s:textfield label="From Address" name="fromAddress"/> <s:textfield label="Reply To Address" name="replyToAddress"/> <s:submit value="Save" name="Save"/> <s:submit action="Register_cancel" value="Cancel" name="Cancel"onclick="form.onsubmit=null"/> </s:form>
  • 15. Taglib devam <%@ taglib uri="/struts-tags" prefix="s" %> Tag kategorileri: Kontrol Veri UI (forma özgü olanlar ve diğerleri) Ajax
  • 16. Servlet/JSP kapsamındaki nesneler Application<s:property value="%{#application.foo}" /> Session<s:property value="%{#session.foo}" /> Request<s:property value="%{#request.foo}" /> Parameter<s:property value="%{#parameter.foo}" /> Context<s:property value="%{#foo}" />
  • 17. OGNL Object Graph Navigation Language JSTL - EL’den (Jsp Standard Tag Library - Expression Language)daha güçlüdür
  • 18. Spring entegrasyonu Varsayılan, framework’un nesneleri yaratırken Spring kullanmayı en azından denemesidir Eğer nesne Spring tarafından yaratılmamışsa, o zaman framework nesneleri kendisi yaratacaktır
  • 19. Test Doğrudan Action çağrımı Konteynır dışı test Interceptor ve/veya Result’ların testi
  • 20. Struts 1 ve Struts 2 Aynı ada sahip olmasına rağmen (Struts), Struts 1’den WebWork 2’ye geçiş oldukça zordur.
  • 21. WebWork 2 ve Struts 2 Yalnız isimlendirme ve namespace dışında hemen hemen aynıdır.
  • 22. Gereksinimler Servlet API 2.4 JSP API 2.0 Java 5 ve üstü (veya Retroweaver ile 1.4)
  • 23. Açık kaynak kütüphanelerle entegrasyon Spring 2.0 Velocity Freemarker JasperReports DWR (Direct Web Remoting) Apache Pluto dojo ve daha birçoğu...
  • 24. Bahsedilmeyenler Annotation desteği JSF, Ajax desteği plug-in’ler Hızlı başlangıç (QuickStart) Validation (onaylama) Değer yığıtı (Value stack) Wildcard haritalama(mappings) Sıfı configürasyon (Zero configuration)
  • 25. Adresler Struts 2 http://struts.apache.org/2.x/ WebWorkhttp://www.opensymphony.com/webwork/