26
Struts 2 İle Tanışma Çeviri: 30 Haziran 2008 Okan Özeren [email protected] Kaynak: 24 Şubat 2007 Thomas Wiradikusuma [email protected] Java User Group Indonesia

Struts 2 Ile Tanisma

Embed Size (px)

DESCRIPTION

Struts 2 is a framework based java.

Citation preview

Page 1: Struts 2 Ile Tanisma

Struts 2 İle Tanışma

Çeviri:30 Haziran 2008Okan Özeren [email protected]

Kaynak:24 Şubat 2007Thomas Wiradikusuma [email protected] User Group Indonesia

Page 2: Struts 2 Ile Tanisma

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

Page 3: Struts 2 Ile Tanisma

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

Page 4: Struts 2 Ile Tanisma

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

Page 5: Struts 2 Ile Tanisma

Mimari devam

Page 6: Struts 2 Ile Tanisma

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

Page 7: Struts 2 Ile Tanisma

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ışacakInterceptorilkÇalışacakInterceptor

Page 8: Struts 2 Ile Tanisma

Interceptor'lar devamInterceptor Adı Açıklama

Checkbox checkbox Seçili olmayan checkbox'ları kontrol eden otomatik checkbox işleme kodunu ekler ve parametrelerine öntanımlı değer (genellikle 'false') atar. Özel adlandırılmış gizli bir alan ile submit edilmeyecek checkboxları belirler.

Execute and Wait execAndWait Action'ı arka planda işletir ve kullanıcıyı bir ara bekleme sayfasına yönlendirir.

Parameters params Action üzerinde istek parametrelerini setler.

Prepare prepare Eğer Action Preparable olarak implemente edilmişse o Action'a ait prepare methodunu çağırır.

Roles roles Action sadece doğru JAAS (Java Authentication and Authorization Service) rolüne sahip kullanıcı tarafından işletilebilir.

Token token Action'da gönderilen parametrelerin geçerliliğini kontrol eder ve aynı formun birden fazla kere submit edilmesini engeller.

Ve daha fazlası…

Page 9: Struts 2 Ile Tanisma

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.

Page 10: Struts 2 Ile Tanisma

Result'larResult Kullanımı

Dispatcher JSP entegrasyonu ile web kaynak bütünleştirmesi için kullanılır.

Redirect Başka bir URL'e (web kaynağı) yönlendirim için kullanılır.

Redirect Action Başka bir action'a haritasına yönlendirim için kullanılır.

Stream Browser arkasında bir InputStream ile akış için kullanılır (genellikle dosya indirileceğinde).

Chain Action zincirleme (chaining) için kullanılır.

Velocity Velocity entegrasyonunda kullanılır. Velocity Java için bir şablon dilidir.

Ve daha fazlası…

Page 11: Struts 2 Ile Tanisma

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

Page 12: Struts 2 Ile Tanisma

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

Page 13: Struts 2 Ile Tanisma

Konfigürasyon dosyalarıDosya Opsiyonel? Konum Amaç

web.xml No /WEB-INF/ DD - Deployment Descriptor (bir web uygulamasının nasıl açılacağını anlatır)

struts.xml Yes /WEB-INF/classes/ Ana konfigürasyondur ve result/view tiplerini, action haritalarını, interceptor’ları ve bunlar gibi diğerlerini barındırır

struts.properties Yes /WEB-INF/classes/ Framework (çatı) özellikleri

struts-default.xml Yes /WEB-INF/lib/struts2-core.jar

Struts tarafından öntanımlı konfigürasyon sağlar

struts-default.vm Yes /WEB-INF/classes/ velocity.properties tarafından öntanımlı makroları refere eder

struts-plugin.xml Yes Root of a plug-in JAR plug-in’ler için struts.xml ile aynı formatta opsiyonel konfigürasyon dosyasıdır

velocity.properties Yes /WEB-INF/classes/ Öntanımlı Velocity konfigürasyonunu ezer (override)

Page 14: Struts 2 Ile Tanisma

TaglibTaglib’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>...

<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’li (JSP):

Page 15: Struts 2 Ile Tanisma

Taglib devam

<%@ taglib uri="/struts-tags" prefix="s" %>

Tag kategorileri: Kontrol Veri UI (forma özgü olanlar ve diğerleri) Ajax

Page 16: Struts 2 Ile Tanisma

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}" />

Page 17: Struts 2 Ile Tanisma

OGNL

Object Graph Navigation Language JSTL - EL’den (Jsp Standard Tag

Library - Expression Language) daha güçlüdür

Page 18: Struts 2 Ile Tanisma

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

Page 19: Struts 2 Ile Tanisma

Test

Doğrudan Action çağrımı Konteynır dışı test Interceptor ve/veya Result’ların testi

Page 20: Struts 2 Ile Tanisma

Struts 1 ve Struts 2Struts 1 Struts 2

struts-config.xml struts.xml

ActionServlet FilterDispatcher

Action (singleton) Action veya POJO

ActionForm Action veya POJO

RequestProcessor Interceptors

ActionForward Result

validation.xml {action}-validation.xml

Aynı ada sahip olmasına rağmen (Struts), Struts 1’den WebWork 2’ye geçiş oldukça zordur.

Page 21: Struts 2 Ile Tanisma

WebWork 2 ve Struts 2Yalnız isimlendirme ve namespace dışında hemen hemen aynıdır.

WebWork 2 Struts 2

xwork.xml struts.xml

com.opensymphony.webwork.* org.apache.struts2.*

com.opensymphony.xwork.* com.opensymphony.xwork2.*

webwork.properties struts.properties

<ww:*/> <s:*/>

“webwork” “struts”

Page 22: Struts 2 Ile Tanisma

Gereksinimler

Servlet API 2.4 JSP API 2.0 Java 5 ve üstü (veya Retroweaver ile

1.4)

Page 23: Struts 2 Ile Tanisma

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

Page 24: Struts 2 Ile Tanisma

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)

Page 25: Struts 2 Ile Tanisma

Adresler

Struts 2http://struts.apache.org/2.x/

WebWorkhttp://www.opensymphony.com/webwork/

Page 26: Struts 2 Ile Tanisma

Teşekkürlerve örnek uygulama