Struts 2 İle Tanışma<br />Çeviri:<br />30 Haziran 2008<br />Okan Özeren okanozeren@gmail.com<br />Kaynak:<br />24 Şubat 20...
Struts 2<br />Kurumlar için Java Web uygulamaları geliştirmeye hazır, üstün ve uzatılabilir bir çatıdır (framework).<br />...
Artıları<br />Basit mimari<br />ObjectFactory ile uyumlu Interceptor&apos;lar, Action&apos;lar, Result&apos;lar<br />Contr...
Mimari<br />Request (İstek) gelir<br />FilterDispatcher uygun action&apos;u bulur<br />Interceptor&apos;lar (denetleyicile...
Mimari devam<br />
ActionMapper<br />HTTP ve action çağırım istekleri arasında iki taraflı eşleme sağlar<br />Öntanımlı implementasyon standa...
Interceptor&apos;lar<br />&lt;interceptor-stack name=&quot;yığıt&quot;&gt;<br />  &lt;interceptor-ref name=&quot;ilkÇalışa...
Interceptor&apos;lar devam<br />
Action&apos;lar<br />Bütün action&apos;lar, execute() metodunu veya bu gibi metodları barındırmalıdır. Bununla birlikte XW...
Result&apos;lar<br />
Tür dönüşümü<br />HTTP&apos;de her şey String&apos;dir<br />Dahili: boolean, char, numeric, types, dates, arrays, collecti...
Yerelleştirme<br />Kaynak paketlerine aşağıdaki sıra ile bakılır:<br />ActionClass.properties<br />BaseClass.properties (O...
Konfigürasyon dosyaları<br />
Taglib<br />Taglib’siz (JSP):<br />&lt;% User user = ActionContext.getContext() %&gt;<br />&lt;form action=&quot;Profile_u...
Taglib devam<br />&lt;%@ taglib uri=&quot;/struts-tags&quot; prefix=&quot;s&quot; %&gt;<br />Tag kategorileri:<br />Kontro...
Servlet/JSP kapsamındaki nesneler<br />Application&lt;s:property value=&quot;%{#application.foo}&quot; /&gt;<br />Session&...
OGNL<br />Object Graph Navigation Language<br />JSTL - EL’den (Jsp Standard Tag Library - Expression Language)daha güçlüdü...
Spring entegrasyonu<br />Varsayılan, framework’un nesneleri yaratırken Spring kullanmayı en azından denemesidir<br />Eğer ...
Test<br />Doğrudan Action çağrımı<br />Konteynır dışı test<br />Interceptor ve/veya Result’ların testi<br />
Struts 1 ve Struts 2<br />Aynı ada sahip olmasına rağmen (Struts), Struts 1’den WebWork 2’ye geçiş oldukça zordur.<br />
WebWork 2 ve Struts 2<br />Yalnız isimlendirme ve namespace dışında hemen hemen aynıdır.<br />
Gereksinimler<br />Servlet API 2.4<br />JSP API 2.0<br />Java 5 ve üstü (veya Retroweaver ile 1.4)<br />
Açık kaynak kütüphanelerle entegrasyon<br />Spring 2.0<br />Velocity<br />Freemarker<br />JasperReports<br />DWR (Direct W...
Bahsedilmeyenler<br />Annotation desteği<br />JSF, Ajax desteği<br />plug-in’ler<br />Hızlı başlangıç (QuickStart)<br />Va...
Adresler<br />Struts 2<br />http://struts.apache.org/2.x/<br />WebWorkhttp://www.opensymphony.com/webwork/<br />
Teşekkürler<br />ve örnek uygulama<br />
Upcoming SlideShare
Loading in …5
×

Struts 2 Ile Tanisma

2,126 views

Published on

Struts 2 is a framework based java.

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,126
On SlideShare
0
From Embeds
0
Number of Embeds
466
Actions
Shares
0
Downloads
17
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Struts 2 Ile Tanisma

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

×