struts mgulec wwwjavadilicom

Upload: wwwjavadilicom

Post on 30-May-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    1/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    1

    2007, Ankara

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    2/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    2

    HAZIRLAYANLAR

    Ekip sim - Soyisim E-Posta Tarih2.Ekip Harun Reit Zafer [email protected]

    1. EkipSerta Demir [email protected]

    21.01.2007Karahan ztrk [email protected]

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    3/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    3

    NDEKLER

    NDEKLER ....................................................................................................................... 3STRUTS HIZLI BALANGI .............................................................................................. 5

    Struts Nedir? ....................................................................................................................... 5MVC (Model-View-Controller) Mimarisi ......................................................................... 5

    Model: ............................................................................................................................ 5Grnm: ....................................................................................................................... 5Deneti: .......................................................................................................................... 5

    Gelitirme Ortamn Kurma ............................................................................................... 6JDKy Kurma ................................................................................................................ 6Tomcati Kurma ............................................................................................................. 6

    Strurts

    Kurmak ............................................................................................................. 6lk Uygulamay Gerekletirme ......................................................................................... 6Denetiyi Anlamak ............................................................................................................. 6

    Hosgeldin.do stemini Hosgeldin.jspye Ynlendirmek ................................................ 7Eylem Snfn (Action Class) Anlamak ............................................................................. 8

    Eylem Snf Nedir? ........................................................................................................ 8Eylem Snf Oluturmak ................................................................................................ 8Struts-config.xml Dosyasna Eylem Elemesi Eklemek ................................................ 9

    ActionForm Snf .............................................................................................................. 9ActionForm Nedir? ...................................................................................................... 10

    Struts HTML Etiketleri .................................................................................................... 141. STRUTS NEDR? ............................................................................................................ 15

    1.1 Web uygulamas nedir? .............................................................................................. 152. MVC TASARIM RNTS ....................................................................................... 172.1. Struts ve MVC ........................................................................................................... 19

    3. STRUTS KURULUMU ................................................................................................... 223.1. Java Development Kit Kurulumu .............................................................................. 223.2. Tomcat Kurulumu ..................................................................................................... 223.3. Struts Kurulumu ........................................................................................................ 23

    4. BAST BR STRUTS RNE....................................................................................... 234.1. Eclipsede Struts Projesi ............................................................................................ 244.2. rnek Uygulama ....................................................................................................... 26

    5. ACTION ........................................................................................................................... 315.1. ACTIONFORM ........................................................................................................ 32

    5.2. ACTIONSERVLET .................................................................................................. 325.3. HTML FORM ........................................................................................................... 33

    6. GRDLERN ELE ALINMASI ...................................................................................... 336.1. Metin Girdisi(Text Input) .......................................................................................... 346.2. Alr Kutu Girdisi(Drop-Down Combo Box Input) ................................................. 346.3. Radyo Dmesi Girdisi ............................................................................................. 366.4. Onay Kutusu Girdisi .................................................................................................. 36

    7. IKTILARIN ELE ALINMASI ...................................................................................... 367.1. Metin kts(Text Output) ........................................................................................ 36

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    4/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    4

    7.2. Struts ta Tablo Yaratma ........................................................................................... 367.3. Iterate Etiketinin Etki alannda(scope) ndisli Nitelik Kullanma .............................. 377.4. Bir Tabloda Onay Dmeleri Kullanma ................................................................... 377.5. Radyo Dmeleri Tablosu Yaratma .......................................................................... 38

    8. AYKIRI DURUMLARIN ELE ALINMASI ................................................................... 398.1. Zincirlenmi(Chained) aykr durumlarn Kullanlmas............................................ 39

    8.2. Haber veren(declarative) veya programsal(programmatic) aykr durumlar ............ 408.3. Programsal Aykr Durumlar ..................................................................................... 47KAYNAKLAR ..................................................................................................................... 48

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    5/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    5

    STRUTS HIZLI BALANGI

    Struts Nedir?Struts ats, JSP iin MVC (Model-View-Controller) tasarm rntsnn gerekletirimidir.Struts, Apache Jakarta projesininbir parasdr ve ak kaynaktr. Struts, her hangi boyuttakiuygulamalar iin uygundur. Son srm http://jakarta.apache.org/adresinden indirilebilir.

    MVC (Model-View-Controller) MimarisiMVC mimarisi; uygulamay model, grnm (view) ve deneti (controller) bileenlerine

    blmektir. Bu bileenlerin mimari iinde biricik sorumluluklar vardr ve dier bileenlerdenbamszdrlar. Bir bileendeki deiiklik dier bileenleri etkilemez.

    Model: Veri kaynandan veri salama ve verileri saklamakla sorumludur. Tm i mantmodelde gerekletirilir. Veri eriimi, veri dorulama ve veri saklama model tarafndangerekletirilir.

    Grnm: Kullancya, uygulamann grntlenecek ksmn gsterir; kullancdan girdialr, istemleri denetiye gnderir ve denetiden gelen yantlar sunar. Html, jsp, etiketkitaplklar ve kaynak ktkleri (resources files) bu bileenin paralarndandr.

    Deneti: Model ve grnm arasndaki bileendir. Kullancdan istemleri alr; modeldekiuygun i mantn altrr ve kty retip grnme gnderir. ActionServlet, Action,ActionForm ve struts-config.xml denetinin paralardr.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    6/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    6

    Gelitirme Ortamn Kurma

    JDKy KurmaJDK 1.5i ya da daha st srm http://java.sun.com adresinden indirin ve el kitabndakitalimatlara gre kurun.

    Tomcati KurmaApachenin sitesinden Tomcati indirip kurun. Kurulumunuzu snamak iin kurduunuzyerdeki /bin dizinindeki sunucuyu altrn ve a taraycnzda http://localhost:8080/yazn.Bir ho geldiniz sayfasyla karlamyorsanz, kurulum iin belgelerden yararlann.

    Strurts Kurmakhttp://jakarta.apache.org/strutssitesinden son srm Struts indirin. Arivi atnzda wardosyalaryla karlaacaksnz (struts-blank.war, struts-documentation.war, struts-example.war).

    lk Uygulamay Gerekletirmestruts-blank.war dosyasn yeniden adlandrarakornek-proje.war yapn ve Tomcatin wabappsdizini altna yerletirin. Tomcat, otomatik olarak bu arivi karp ykleyecektir.

    Denetiyi AnlamakOrg.apache.struts.action.ActionServlet, struts atsn kalbidir, struts atsn deneti

    bileenidir. ActionServlet, web.xml dosyasnda Servlet olarak yaplandrlr.

    actionorg.apache.struts.action.ActionServletconfig/WEB-INF/struts-config.xml

    debug2detail2

    2

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    7/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    7

    Bu servlet, struts iin tm istemlerden sorumludur. Kullancweb.xml dosyasnda etiketiyleActionServlete belirli bir istem rnts eleyebilir. Varsaylan olarak

    *.dodur. Aada bu eleme (mapping) gsterilmektedir.

    Yukardaki eleme, *.do uzantl istemleri ActionServlete ynlendirir. ActionServlet, hedefiin struts.config.xml dosyasndaki yaplandrmay kullanr. Eylem eleme tanmlar (action

    mapping definitions) herhangi bir eylemi elemek iin kullan

    l

    r. Bir Hosgeldin.jsp sayfas

    oluturup istemi Hosgeldin.doya ynlendirelim.

    Hosgeldin.jsp

    Hosgeldin.do stemini Hosgeldin.jspye YnlendirmekEylem eleme tanmlar, struts-config.xml dosyasnn en nemli ksmdr. Bu blm, Formekirdei Tanmlar (Form Bean Definitions) ksmndan tanml formlar alr ve eylem

    snfna ynlendirir.

    Aada etiketleri kullanlarak istem, Hosgeldin.jspye ynlendirilir.

    Hosgeldin.jsp dosyasn armak iin aadaki kod kullanlacaktr.

    action*.do

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    8/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    8

    Anasayfadan (index.jsp) Buraya Tkla balantsna tklannca istem, denetiye gider;deneti Hosgeldin.jspye ynlendiri ve sayfa grntlenir.

    Eylem Snfn (Action Class) Anlamak

    Eylem Snf Nedir?Eylem snf, strutsn org.apache.struts.action.Action snfndan treyen bit uygulamadr.Eylem snf, i mant etrafnda sarmalayc gibi davranr ve model katmanna arayz salar.Grnm ve model katmanlar arasnda tutkal grevi grr. Grnm katmanndan verilerialp ilemlere ynlendirir ve ilemlerden dnen verileri tekrar grnm katmannaynlendirir.Bir eylem (action), gelen http isteminin ieriiyle o istemle ilgili i mant arasnda

    badatrc (adapter) olarak alr. Daha sonra struts denetisi (ActionServlet) uygun bireylem seer, gerekliyse bir olgu (instance) oluturur be execute() yordamn altrr.Eylemi kullanmak iin, execute() yordamnn stne yazacak (overwrite) bir alt snfa(subclass) gereksinim duyacaz. Eylem snfna i mantn eklemeyin. Bunun yerine veritabann ve i mantn ilem ya da veri eriim nesneleri (data Access objects) katmannayerletirin.

    ActionServlet; parametrelendirilmi snf, execute() yordamn kullanarak Action Formauzatr. Execute() yordam ActionForward tr bir nesne dndrr. ActionForwad nesnesinindeerine gre, struts ats istemi ynlendirir.

    Eylem Snf Oluturmakrnekte eylem snf (YonlendirEylemi.java), sadece ynlendirme ilemi yapacaktr.Snfmz, tamam deeri tayan AcitonForward nesnesi dndrecektir. Bu deer struts-config.xml dosyasnda da tanmlanacaktr.

    YonlendirEylemi.java

    Buraya Tkla

    package anapaket;

    import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

    import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;

    public class YonlendirEylemi extends Action{public ActionForward execute(

    ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception{

    return mapping.findForward("tamam");}

    }

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    9/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    9

    Eylem snfnn imzas aadaki gibidir.

    public ActionForward execute(ActionMapping mapping,ActionForm form,

    javax.servlet.http.HttpServletRequest request,

    javax.servlet.http.HttpServletResponse response)

    throws java.lang.Exception

    Eylem snf, http istemini iler ve uygun http yantn oluturur (ya da oluturacak snfaynlendirir). Ynlendirmek iin ActionForward nesnesi dndrr ya da yant tamamlanmsanull dndrr.

    Temel Deikenler (Parameters):

    mapping - ActionMapping olgusuform Gerektiinde istem iin ActionForm ekirdei (bean)request - Gelen HTTP istemiresponse Oluturulan http yant

    Aykr Durum:throws java.lang.Exception

    Struts-config.xml Dosyasna Eylem Elemesi EklemekUygulamamz snama iin anasayfaya (index.jsp) aadaki balanty ekleyelim: Ynlendir

    Struts-config.xml:

    Anasayfadaki balantya tklannca Yonlendir.jsp sayfas grntlenecektir.

    ActionForm SnfBu konuyu aklamak iin verilecek rnekte kullancdan adres bilgileri alnacak,dorulanmas halinde model katmanna (eylem snf) gnderilecektir. Eylem snfndan da

    basarili.jsp sayfasna ynlendirilecektir.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    10/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    10

    ActionForm Nedir?

    ActionForm, org.apache.struts.action.ActionForm snfndan treyen java ekirdeidir(JavaBean). ActionForm, kullanc tarafndan verilen girdilerle sunucu ksmnda otomatikolarak oluturulur.

    AdresForm.java

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    11/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    11

    package form;

    import javax.servlet.http.HttpServletRequest;

    import org.apache.struts.action.*;

    public class AdresForm extends ActionForm{private String ad=null;private String adres=null;private String e_iletiAdresi=null;

    public void setAd(String ad){this.ad=ad;

    }

    public String getAd(){return this.ad;

    }

    public void setAdres(String adres){this.adres=adres;

    }

    public String getAdres(){return this.adres;

    }

    public void setE_iletiAdresi(String e_iletiAdresi){this.e_iletiAdresi = e_iletiAdresi;

    }

    public String getE_iletiAdresi (){return this.e_iletiAdresi;

    }

    public void reset(ActionMapping mapping, HttpServletRequest request) {this.ad=null;this.adres=null;this.e_iletiAdresi =null;}

    public ActionErrors validate()(ActionMapping mapping, HttpServletRequest request ) {ActionErrors errors = new ActionErrors();

    if( getAd() == null || getAd().length() < 1 ) {errors.add("ad",new ActionMessage("error.ad.required"));

    }if( getAdres() == null || getAdres().length() < 1 ) {errors.add("adres",new ActionMessage("error.adres.required"));

    }if( getEmailAddress() == null || getEmailAddress().length() < 1 ) {errors.add("e_iletiAdresi",new ActionMessage("error.e_iletiAd.required"));

    }return errors;

    }}

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    12/48

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    13/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    13

    Alanlar Doldurunuz

    Name

    Address

    E-mail address

    Kaydet

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    14/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    14

    Kullanc alanlar doldurup, Kaydet dmesine basar. Form dorulamas sunucu tarafndayaplr. Hatalar etiketiyle jsp sayfasnda grntlenir. Metin alan olutyrmakiin etiketi kullanlr.Bylece metin alanndan veriler alnr ve ilgili form ekirdeinde saklanr.Anasayfaya aadaki balanty ekleyerek Adres.jsp sayfamz snayabiliriz.

    Addres Formuna Git

    Struts HTML EtiketleriStruts, kullanc arayz iin bir etiket ktphanesi salar. Bu ktphaneden yararlanmak iin

    jsp sayfasnn banaeklenmelidir.

    Struts HTML Etiketleri

    leti kayna

    nda, anahtara kar

    gele iletiye bakar.

    Form ekirdeinde ifre isimli alanda saklanmakzere birifre alan oluturur.

    Form ekirdeinde metin isimli alanda saklanmakzere bir metin alan oluturur.

    GnderGnder isimli bir dme oluturur (submit button).Reset Bir Reset dmesi oluturur. Sayfadaki hatalar yazdrr. Formda dosya ykleme esi oluturur. Bu e

    org.apache.struts.upload.FormFiledan tremelidir.

    Bir denetim kutusu oluturur.

    Formda gizli bir e oluturur.

    Radyo dmesi oluturur.

    Formda liste kutusu oluturur. se desteklenen veritrleri dizisi olmal, kullanc bir ok varlkseebilmeli. Varlklar tanmlamak iin kullann.

    Metin kutusu oluturur.

    HTNL Formu sunucuya gndermek iin kullanlr.

    Taban etiketi oluturur.. taraycya, nusayfann bulunduu yeri temel almasn salar. Dierreferanslar bu tabana gre hesaplanr.

    HTML esi oluturur.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    15/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    15

    1. STRUTS NEDR?

    Struts projesi 2000 Craig McClanahan tarafndan MVC tabanl Java Webuygulamalar gelitirmede bir standart belirlemek amacyla tasarland. Struts 1.0 2001in ortasnda yaynland ve u anda Apache Kuruluunun Jakarta Projesinin birparasdr. Struts ok eitli projelerde geni bir yelpazede, farkl endstri dallar iin

    kullanlmaktadr.

    1.1 Web uygulamas nedir?Web uygulamas znde, web sunucu tarafnda alan, kullancnn isteine

    gre statik ve dinamik sayfalar reten bir programdr. Kullanc istemleri geneldesayfa zerine fare ile tklanarak gelir.

    Web mimarisi aadaki ekilde grlmektedir:

    Web container web uygulamasnn elemanlarn ynetmeye yarayan aratr.Web container; gvenlik, ayn anda kullanm ve yaam dngs zelliklerini salar.Apache tomcat iyi ve cretsi bir web containerdr.

    Struts byk web uygulamalar yapmamza yardmc olur. Kullanldndauygulama daha etkin ve sorunsuz alr. Debugla ve proglama ile harcayacamzsreyi byk oranda azaltr.

    Struts java tabanl web uygulamarnn btn paralarn ieren bir frameworktr.Bu noktada java tabanl web uygulamalarnn paralarna baklrsa;

    Java servlets: java ile yazlm web sunucu tarafnda alan ve kullancnnistemlerini cevaplayan programdr.

    Java server pages: web sayfalarn statik ve dinamik olarak oluturmay salayanteknolojidir.

    Java beans: belirli kurallar belirli ekillerde uygulayan paralardr.Business Logic: fonksiyonellii veya zellemi uygulamann kurallarn ieren

    koddur.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    16/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    16

    Java tabanl web uygulamalarna baktktan sonra frameworkn ne olduu dabizim iin nem kazanyor. Framework bir eit yazlm problemini zmek iintoparlanm (organize edilmi) snflar ve arayzler btndr. Framework birsorunun zm iin gerekli paralar ve bu paralarn bir arada nasl kullanlacanierir. Fraemeworkn paralar yeniden kullanlabilirdir.

    Framework ve ktphane ayney deillerdir. Ktphane; uygulamanngereksinim duyduu fonksiyonlar ve usulleri ierirken, framework; uygulamanneritii genel ve yardmc paralar salar.

    Struts framework 300e yakn java snfndan olumutur ve bu snflar 8 paketiinde yer alrlar. Strutsn bu 8 paketi ve birbiri ile ilikilerinin aklamalaruekildedir.

    actionActionForm, ActionMessage gibi control snflar ve diergerekli framework paralarn ierir.

    actionsAction snfnn iermedii DispatchAction gibi uygulamannkulland veya ierdii Action snflarn ieririr.

    config Struts konfigrasyon dosyasnn belleindeki configrasyon

    snflarn ierir.

    taglibStruts tag libraryleri iin tagleri ele almaya yarayansnflar ierir.

    tiles Balk framework tarafndan kullanlan snflar ierir

    uploadBrowser kullanarak yerel dosya sisteminden dosya indirmek yada dosya yklemek iin gerekli olan dosyalar ierir.

    utilBtn framework tarafndan kullanlan genel amal yararldosyalar ierir.

    validatorTanmlaycnn yerletirilmesi iin kullanlan zel snflarierir.

    uygulama framework uygulama gelitirici tarafndan dzenlenen uygulamanniskeletidir. Struts da J2EE web paralarnn birbiri ile belirli etkileimlerini ieren biruygulama frameworkdr. Struts bu birlemeyi MVC tasarm rnts kullanarakyapar. Bu birleimin ne kadar nemli olduunu anlamak iin MVCnin ne olduuanlalmaldr.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    17/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    17

    2. MVC TASARIM RNTS

    Model-View-Controller tasarm rnts nesneye ynelik tasarm rntlerininatasdr. lk olaral Smalltalk-80 da kullanc arayz olarak kullanmtr. u an hertrlkulanc arayz gerektiren sistemde kullanlabiliyor.

    MVC rnts adndan anlald gibi katmandan oluur:

    Model: veri ve i mantn aklar.

    View: Verilerin sunumudur.Controller: Kontrol mekanizmasdr.

    Bu katmanl yap dier katmana en az etki ile maximum esneklii salar.

    Model, i mantnda ilanmasi gereken veriye eriimi salar. Veri ekleme vegncelleme ilamleri iin kullanlan aralarla uyumu salar.

    View, modelden kullancya grntlenmesinden sorumludur. View aynzamanda verinin kullancdan controllera gitmesini salar. Bu balamda istem decevap da viewn nderliinde yaplr.

    Controller btn kullanc istemlerini ele alr ve geri dnte hangi viewagidileceine karar verir. Controller bir istem aldnda, bu istemi uygun handler agnderir. Handler hangi actionun bu istem iin uygul olduuna karar verir. Controllermodelde bu action iin gerekli olan fonksiyonu arr. Model gerekli ilemi yaptktansonra controller hangi viewe dnleceini belirler.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    18/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    18

    MVC rntsnn alma mant aadaki akilde grlebilir.

    The Model-View-Controller Yaps

    MVC rntsnn katmanlar biribirinden bamsz olduu iin, katmankullancsna byk bir esnekli salar. Programc ve tasarmclar, bu ayrk yapsayesinde, kendi uzmanlik alanlarnda dier alanlarla ilgilenmeden alabilirler. Aynzaman da bu rntnn admlar ve yaps iyi birekilde tanmland iin rahatlklaanlalabilir ve gerekli deiiklikler yaplabilir.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    19/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    19

    2.1. Struts ve MVC

    Struts incelendiinde MVC rntsn btn ile ierdii anlalr. Bu yzdenMVCnin bileenlerinin struts ierisinde nasl ele alnd incelenecektir. Strutsn MVCle oluturulmas aadaki izimde gsterilmitir.

    2.1.1. Struts controller

    Strutsn ilk controller snf ActionServlettir. Bu snf btn kullanc istemleriniele alr. Konfigrasyon dosyasndaki bilgileri kullanarak, ActionServlet snf istemin birparas olan verileri toplayan RequestProcessor snfn alr ve ActionForm akoyar. ActionForm kullancdan gelen ve kullancya giden verileri ieren bir beandir.Son admda controller istem trne gre uygun handler a controldevreder(delegate). Handler action snfnn alt snfdr. Action snf controllernalt asl yerdir. Kullanc istemi burada altrlr ve ilamlari yaplr.

    Gerekli action al

    t

    r

    ld

    ktan sonra action s

    n

    f

    uygun viewe geri dner. Strutscontrollern paralar aada gsterilmitir.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    20/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    20

    2.1.2. Struts View

    Struts zel bir sunu teknolojisi iermez. Birok struts JSPyi kullanr ki buJSPler Struts tag library(Struts and Struts-EL), JSTL (java standart tag library) veJSF (Java server faces) tabanldrlar

    2.1.3. Struts Model

    Strutsdaki hibirey modelin nasl gerekletirileceini belirtmez. Bunun iinbirok yntem kullanlr. En ok kullanlan yntem: veriyi ve ilemler JavaBean ilesarmalamakdr. Veri ve ilem ayn veya farkl snflarda bulanabilirler.

    lemler uygulamann tanmlad i mantnn sunumudur. Bir i belirlizellikte uygulanmas gereken kurallaraklinde dnlebilir.

    Controller ve Model snflar arasndaki tm etkileim action snf ile olur

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    21/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    21

    Struts MVC rnts ile yaplm login ilemi bir izim ile aada rneklenmitir.

    Neden struts kullanmalym?

    Struts ile;

    JSP sayfalarnda bulunan Java kodlar en aza inmekte Kullanc arayznde (JSP) i mantn barndran kodlarn bulunmas

    engellenmekte Arayz tasarmcsnn tasarma younlamas salanmakta Web tabanl uygulamann olay aknn tek bir XML dosyas (struts-config.xml)

    zerinden kontrol salanmakta Yaygn olarak kullanlan form kontrolleri (e-posta adresi, boluk, say, karakterkontrolleri v.b. ) tanmlanm olarak gelmekte

    Form kontrolleri sunucu (Java) veya istemci (JavaScript) tarafndakullanlabilmekte

    Birden fazla dili destekleyen uygulamalarda kullanc arayznde gsterilenmesaj ve etiketlerin ynetimi properties dosyalarndan yaplmakta (id8n)

    UTF - 8 kodlamasna (Internalization) destek verilmektedir

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    22/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    22

    3. STRUTS KURULUMUStrutsn kurulumu iin java development kit(jdk), modern bir web container

    (rnein tomcat 5.0) ve ve basit bir yaz editr yeterlidir. Eer java ve web containersisteminize kurulu deilse ite yapmanz gerekenler:

    JDKy indirin ver kurun Tomcat 5.0 indirin ve kurun Tomcatin altndan emin olun

    Bu uygulamalar bulabileceiniz web adresleri: http://java.sun.com/javase/downloads/index.jsp http://jakarta.apache.org/tomcat

    Kurulumu dahada basitletirmek adna aada bu admlarn Windows iinkurulumlar yer almaktadr.

    3.1. Java Development Kit KurulumuSundan indirilen Java Development Kitin Windows iin olan srm artk

    Windows kurulumuna hazrdr. Windows kurulum sihirbaz size kurulumun btnadmlarnda yardmc olacaktr.

    3.2. Tomcat KurulumuJDK makinenize kurulduktan sonra artk Tomcat kurulumuna hazrsnz.

    Windows kurulum sihirbaz kurulumun ayrntlarn ele almak iin uygundur.Windowsun kurulum sihirbazn kullanmak iin tomcatin .exe srmnindirmelisiniz.Daha sonra indirilen bu exe dosyann zerine ift tklamalsnz.

    Tomcatin standart kurulumu birok kii iin yeterlidir, bu yzden kurulum

    genelinde nexte tklama eklindedir. Aada sizdem yapmanz beklenen ilemleryer almaktadr, bu ilemleri sizden nelerin beklendiini anlamanz adna aklyoruz.

    1. Kk bir pencere, sizden jdk nn nereye kurulduunu (adresini) renmekiin, kacaktr.

    2. OK u tklayn, anlama artlarn greceksiniz. Next tklamadan nceanlama artlarn okuyunuz.

    3. Bir sonraki ekran size kurulum seeneklerini gsterir. Normal (defoult)ayarlar seip, next e tklayn.

    4. Size ana klasr semek iin seenek sunulacaktr. Normal seim(defoult)genelde C:\ProgramFiles\ Apache Software Foundation\Tomcat5.5olacaktr. Bu adres birok kullanc iin uygundur. Eer adres deiikliiyapacaksanz sadece src harfi deitirmeniz tavsiye edilir ki dahasonra rahat birekilde takip edebileiniz. Ama adres deiikliiyapmamanz nerilir.

    5. Install a tklayn ve kurulum balar, uygulama ubuu(progress bar) sizekurulumun hangi aamada olduunu gsterir.

    6. Kurulum tamamlandnda close dmesine tklaynz.

    Tomcat kurulumu tamamlandimdi Tamcati test etmelisiniz. Tomcatincelikle altrmanz gerekir bunun iin Windows kurulum sihirbaz tomcati balat

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    23/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    23

    mensne atar yerletirir, buradan tomcat bala y seerek tomcati balatabilirsiniz.Ayn yerden tomcat dur diyerek tomcati durdurursunuz.

    Tomcati test etmek iin web salaycsn (browser) http://localhost:8080adresine ynlendirin eer giri sayfas alrsa doru alyor anlamndadr.

    3.3. Struts KurulumuEn son Struts srmn bu adresten elde edebilirsiniz.

    http://archive.apache.org/dist/struts/struts-1.1/. ndirdikten sonra sktrlmdosyalar amalsnz. Datm bir Struts uygulamas gelitirebilmek iin gerekli olantm ktphaneleri iermektedir. Datmda ayn zamanda Webapps dizinininierisinde bo bir Struts uygulamas (strutsblank.war) bulunmaktadr. Bu kendi webuygulamalarmz geliitirmek iin bize bir at salamak adna olduka kullanldr.

    Kendi kodunuzu WEB-INF/classes dizinine, kendi ayarlarnz WEB-INF/struts-config.xml dosyasna koyabilirsiniz. Bylelikle tamamen fonksiyonel bir Strutsuygulamasna sahip olmu olursunuz.

    4. BAST BR STRUTS RNEAnlatlanlarn pekimesi adna bir tane struts rnei verilecektir. Bu rnek ok

    basit bir giri uygulamas olacaktr. rnekte kullancnn ismi ve ifresi isteniyor. ifreiki kere isteniyor eer girilen ifreler birbirinin ayn ise doru giri aksi durumda yanlgiri oluyor ve ilgili sayfalara ynleniliyor. Ama ncelikte eclipse de bir struts projesialacaktr.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    24/48

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    25/48

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    26/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    26

    4.2. rnek Uygulamarnek olarak yapacamz uygulama giri sayfas ile alyor. Bu sayfada

    kulancnn dnn alnd bir yaz girdi alan ve kullancnn ifresinin iki kere

    girmesinin salandii iki tane parola giri alan

    bulunmaktad

    r. Bu alanlar

    n alt

    nda isegiri dmesi yer almaktadr.

    Aada giri sayfasnn ilgili blmnn grnm yer almaktadr:

    Bu sayfann yaplmas iin gerekli kod aada verilmitir. Bu kod baslangic.jspde tutulmaktadr.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    27/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    27

    Kullanici Adi:
    Parola Giriniz:
    Parolayi Tekrarlayiniz:

    Kullancnn girdii iki parola ayn ise basari.htmle ynlenilenecektir. Baarlolma grnm ve ilgili kod aada verilmitir.

    Basari.html:

    BASAR

    Giris Basarili!!!!

    yeniden dene?

    Kullancnn girdii iki parola birbirinden farkl ise hata.htmle ynlenilenecektir.Hatal olma grnm ve ilgili kod aada verilmitir.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    28/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    28

    Hata.html:

    HATA!

    Giris Basarisiz!

    yeniden dene?

    Baslangic.jsp deki bilgiler bir formda kendiliinden tutulurlar. Bu formbaslangic.jspden alnan veriler zerinde oynama imkan salar. Bu formu kullanarakbu verileri elde edebiliriz. Bu ekilde verileri jspden almaya aba harcamayz verilerzaten formda olduu iin biz bu verileri kullanrz. Bu formun ierii ise yledir.

    RegisterForm.java

    package app;import org.apache.struts.action.*;

    public class RegisterForm extends ActionForm {

    protected String username;protected String password1;protected String password2;

    public String getUsername () {return this.username;};public String getPassword1() {return this.password1;};public String getPassword2() {return this.password2;};

    public void setUsername (String username) {this.username =username;};

    public void setPassword1(String password) {this.password1 =password;};

    public void setPassword2(String password) {this.password2 =password;};

    }(Projedeki java dosyalar app paketinin iindedir)

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    29/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    29

    Bu formdaki bilgiler zerinde bu formla ilikili action snf i yapar. Action snfbu formu kullanp gerekli ilemleri yapan snftr. Bu proramda parolalar karlatrphata ya da basar durumuna ynlenmeyi salar. Programn ilgili action snf ise:

    RegisterAction.javapackage app;

    import org.apache.struts.action.*;import javax.servlet.http.*;import java.io.*;

    public class RegisterAction extends Action {public ActionForward perform (ActionMapping mapping,

    ActionForm form,HttpServletRequest req,HttpServletResponse res) {

    // b Cast the form to the RegisterFormRegisterForm rf = (RegisterForm) form;String username = rf.getUsername();

    String password1 = rf.getPassword1();String password2 = rf.getPassword2();

    // c Apply business logicif (password1.equals(password2)) {

    try {// d Return ActionForward for success

    //UserDirectory.getInstance().setUser(username,password1);return mapping.findForward("success");

    } catch (Exception e) {return mapping.findForward("failure");

    }

    }// E Return ActionForward for failurereturn mapping.findForward("failure");

    }}

    Bu snf ile ilgili ilamler yaplr ve basar ve hata durumuna saplr. Ama hatave basar durumlaryla ilikili html veye jsp sayfalarnn belirlenmesi gerekir. Programiin bu adreslemeler struts-config. xml dosyasnda eletirilmitir. Programn struts-config.xml dosyas verilmeden nce bu dosya hakknda baz bilgile aklanacaktr.

    Struts-config.xml de 3 tr bilgi bulunur:Genel Ynleniciler(Global Forwards)bir rnek:

    Bu namei kullanarak kendi jspnizden dier sayfa balantlarna gitmenizisalar. Eer dizin yolu deiirse siz de JSP nizde herhangi bir deiiklik yapmayagerek kalmadan sadece struts-config.xml ktnde deiiklik yaparakhalledebilirsiniz .Bunu yapmak iin u formu kullanbilirsiniz:

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    30/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    30

    grntlenecek balant adBir rnek:Kullanc eklemek iin tkla

    ekirdek BildirimleriBir rnek:Kullancnn girdilerini kabul edecek her JSP sayfanz iin bunlardan bir tane olmadr.

    Action E lemleri(Action Mappings)Bunun iki eidi vardr. Biri girdi kabul edecek JSP ve girdi kabul etmeyecek JSP.Girdi kabul etmeyecek JSP ler iin tmleik bir ActionForm dnlemez.

    Bunun bir rnei:

    path nitelii bu sayfann yolunu veriyor. type nitelii bu action iin actionsnfna yolunu verir. input nitelii JSPye bu action iin yolunu verir. forward niteliiaction snfnda kullanlacak nameleri veriyor. rnein action snfnzda kullancnngirdisine bal olarak farkl sayfalara gidebilirsiniz. Bunu yukar daki tanml namelerikullanarak yapabilirsiniz. Gitmek istediiniz sayfa bana bir name tanmlamakyeterlidir. Bu size hedef sayfa deitiinde struts-config.xmli dzenlemeye olanakverir. Eer kullanc girdisi yoksa kendi baarl sayfamza geri dneriz. Actionsnfnzda bu namee aadaki gibi ularsnz:

    return mapping.findForward("baar

    l

    ");Girdi kabul eden JSP ActionMapping formu:

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    31/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    31

    Bunun bir rnei:

    Daha nce form ekirdeklerinde belirtilmesi gereken KullancEkleFormununame nitelii belirler. Struts ta uygulamanzn her paras iin bir ActionFormekirdei kullanmanz tavsiye edilir.

    Bu bilgilerin iiinde oluturulan struts-config.xml dosyamz:

    5. ACTION

    Eylem (Action), gelen HTTP isteminin ieriiyle, buna istem iin altrlacak imant arasndaki adaptr olarak dnlebilir.Deneti, her istem iin uygun eylem seer; gerekiyorsa bir olgusunu yarat r ve

    execute yordamn arr.

    Eylemler, kanal korumal tarzda programlanmaldr; nk deneti, eanl okluistemler iin atn nesneyi paylar.Bu yzden;

    * Olgu( instance) ve duraan deerler (static variables) istem durumuyla ilgilibilgileri saklamamk iin kullanlmammaldr. Ayn eylem iin istemlerin evrenselkaynaklar (global resources) iin kullanlabilirler.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    32/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    32

    * Dier kaynaklar (Java ekirdekleri, oturum deikenleri vs.) iin eriimler, bukaynaklar korunma gerektiriyorsa, ezamanl olarak yaplr.

    Bir Action nesnesi ilk yaratldnda; deneti, setServlet yordamn eylemin (Action)eklendii servlet olgusunu belirlemek iin null olmayan argmanlarla (bamszdeikenlerle) arr. Servlet kapatldnda ya da yeniden baladnda, setServlet

    yordam null bamsz deikeniyle arlr ve bu eylem tarafndan yer ayrlankaynaklar temizlenmi olur.

    5.1. ACTIONFORM

    ActionForm, bir ya da daha fazla ActionMappingsle ilikilendirilen bir JavaBeandir.zellikleri, uygun Action.execute yordam arlmadan nce uygun istem parametreleri(temel deikenleri) ile ilklendirilir.

    Bu ekirdein zelliklerine deer atandktan sonra, execute yordam arlmadan nce bu

    ekirdein validate yordam arlarak kullanc tarafndan geerli veri girii yapt snanr.Eer bu yordam bir hata tespit ederse, bir hata iletisi nesnesi dndrlr. Aksi durumda,validate yordam null dndrr ve girdilerin kabul edilebilir olduu anlalarakAction.execute yordam arlr.

    5.2. ACTIONSERVLET

    A uygulamasna gelen her trl istemden sorumludur. ok ilem yapmasa da ilk iiyapt iin nemlidir. Bir struts uygulamasnda balatlan ilk servlettir.Balatldktan sonra istemleri ele almaya hazrdr. Her istem process yordamyla elealnr.

    Uygulama kapat

    l

    rken a kab

    taraf

    ndan destroy yordam

    yla sonland

    r

    l

    r.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    33/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    33

    5.3. HTML FORM

    Neredeyese her a uygulamas girdi deerleri alr. Ad, soyad, ifre, adres vb bilgilerrnek gsterilebilir. HTML, bu bileenler iin gerekli metin alan, radyo dmesi, onaykutular vb alanlar taraycda gsterilmesini salar. Bu tr sayfalarda, bu girdiler htmlforml gelerince yerletirilir.Struts HTML etiket kitapl, html formlar oluturacak etiketleri ierir.

    Burada action ile bu formun gnderilecei URL girilir. Eer yol elemesi (pathmapping) yerine uzant elemesi (extension mapping) kullanlyorsa aramaAction.doyazlr. *.do uzantllar zdevinir (otomatik) olarak ActionServlete ynlendirilir. Bununyannda method, focus, type, scope gibi pek ok nitelik de kullanlabilir. Varsayolanmethod deeri POSTtur. Scope deeri olarak request ya da session seilebilir.

    6. GRDLERN ELE ALINMASI

    Struts ta girdiler ounlukla html:form etiketi balam iinde ortaya kar. Htmletiketleri sadece htlm:form etiketi balamnda alr.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    34/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    34

    6.1. Metin Girdisi(Text Input)

    JSP ye bir metin kutusu deeri girmek iin u struts etiketini kullanabilirsiniz.

    Bunu altrmak iin ActionForm ekirdei kullanc Ad olarak adlandrlanzel(private) ve korunmu (protected) dizgi deerleri iin setKullancAd adlatama(setter) ve getKullancAd adl deer dndrme(getter) metodlarn iermelidir.Struts java ekirdeindeki property i getirerek JSP de grntlemeyi ve onayagnderildiinde JSP den alnan deerle java ekirde indeki propertyi doldurmaysalar.

    6.2. Alr Kutu Girdisi(Drop-Down Combo Box Input)

    Alr kutular kullancnn birden ok eleman arasndan birini semesi iin

    kullan

    l

    r. Struts da bu select, option ve options etiketleri kullan

    larak gerekletirilir.Kullanc alr kutuda bir madde seerken, struts form ekirdeinde seilen deeri birdeikenle ilikilendirir. Bu deikenin ilk deeri seim ncesi grnen deerigsterir. Seimi select etiketinin value niteliini kullanarak hard coding (programdaverinin kodun iinde olduu dolaysyla deitirilmesinin zor olduu ekli) demmkndr. Bu sadece seim ncesi bir deeri istediimiz zaman yararldr. rneinlke adlarnn alfabetik sraland bir listede her zaman Trkiyenin grnmesi. Bunuyapmann anlam kullanc bu ekrana geldiinde Trkiyenin ncelikli deer olmas vekullanc seiminin bir ie yaramamasdr. Bu kt bir fikirdir.

    Select aadakilerle kullanlabilir: Dizgi kmesi(collection of strings), dizi listesi(arraylist)

    Her biri dizgi alanlar ieren ekirdek kmesi Kod iine gml(hard coded) deerler Yukardakilerin birleimi

    Dizgilerin dizi listesi ile:

    Dizi listesinin ad isimListesi olsun. Bu liste istem veya oturumdan birinin iinekoyulacak. Kullancnn seimiyle atamak iin kullanlan form ekirdeindeki alannad seilenDeer. Formda bu deer seim ncesi deer olarak atanr.

    Dizgi dizi listesi ile seilen value nasl ilikilendirilir:

    Select u sekilde deitirilir:

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    35/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    35

    Burada birsim dizi listesindeki isimlerden biridir.

    ekirdek dizi listesi ile:

    ekirdeklerin dizgi alanlarunlarla ilgilidir: grntlenenDeer kimlikDeeri

    Dizi listesinin ad ekirdekListesi olsun. Bu liste istem veya oturumdan birinin iinekoyulur. Kullancnn seiminin atanacak form ekirdeindeki alann adseilenDeerdir. Bu seilen ekirdein kimlikDeeri ne atanacaktr. Bu deer aynzamanda formdaki seim ncesi deere atanr. Kullanc grntlenenDeerinieriini listedeki bir eleman olarak grecektir.

    ekirdeklerin dizi listesi ile seilenDeer nasl ilikilendirilir:

    Select u ekilde deitirilir:

    birzellik options etiketinde collection nitelii tarafndan belirlenen listedekiekirdein alanlarndaki dizgilerden biridir.

    likilendirilmi Dizgiler

    Kullancnn seimi olan seilen deer form ekirdeindeki alann adna atanr.Bu deer formda seim ncesi deere atanmaldr.

    likilendirilmi dizgilerle SeilenDeerin likilendirilmesi

    Select u ekilde deitirilir:

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    36/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    36

    6.3. Radyo Dmesi Girdisi

    Radyo dmesi girdisi iin kullanc ya birbirini dlayan birka seeneksunulur ve sadece bir tanesini semesine izin verilir. Bir rnek:

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    37/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    37

    Bu komut dizgi dizisinin property niteliine dmeye basld zamanDzenle atanyordu, rnein komut[3]==Dzenle. Struts reflection kullanr,reflection da atama ve deer dndrme metodlarna bal olarak tr belirler. Burnekte form ekirdeinin ilgili blmleri u ekildedir:

    private int secilenDeger = 0;private String komut = ;

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    38/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    38

    public void setKomut (int index, String deger){

    secilenDeger = indis;komut = deger;

    }public String getKomut (int indis)

    {return komut;}public String getKomut(){

    return komut;}public int getIndis(){return secilenDeger;}

    Actionda hangi dmeye basldn komut u kontrol ederek ve hangieleman olduunu indisi kontrol ederek grebilirsiniz. Formda oturum veya istemegeirdiiniz listeyi alp getirmeniz gerekebilir, bu durumda indisi kullanarak seileneleman alabilirsiniz.

    7.5. Radyo Dmeleri Tablosu Yaratma

    Baz durumlarda aadaki tablo benzeri tablolar yaratlmak istenebilir.Durum

    Muaf Geti Kald Form eleman

    0 * 0 Genel ders durumu

    * 0 0 Akademik ders durumu

    select/ options etiketlerinin tersine radyo dmesi etiketi tektir. select testrutsa sonucu nereye koyacanz, optionsta ise listeyi nereden alacanzsylemeniz gerekir. Radyo dmesinin etiketini tekliinden dolay liste; sonularn

    sakland

    yerle ayn

    yerden gelir(strutsta sonular sadece form ekirdeindesaklanr). Aada bunun nasl yaplacann rnei var.Bu rnekte ekirdek dizi listesi veri yaps var. yle ki her ekirdek kap ad ve

    durum propery sine sahip. Eer radyo dme etiketinde belirlenen deer ileekirdein durum zellii eleirse, bu radyo dmesi tablo grntlenirken kontroledilir. Kullanc formu onayladktan sonra, dizi listesi getirilip her bir ekirdein durumalannn o anki deeri alnr.

    Dikkat edilmesi gereken nokta; iterate etiketindeki id iin kullandnz deer ileform ekirdeindeki property deerinin rtmesidir. Bu sadece yerel deiken

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    39/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    39

    yaratmak iin deil, sonularn nereye gideceini de belirlemek iin kullanlyor. Buanlatlanlar id nin hereyin yolunda gitmesi iin gereken iki grevidir.

    8. AYKIRI DURUMLARIN ELE ALINMASIAykr durum frlatma javann programn normal ileyii iinde normal olmayan

    bir durumu belirtme yntemidir. Bu ekilde kullanc hatann tr ve oluma anhakknda bilgi edinebilir. Strutsda da aykr durumlarn ele aln javadan farkldeildir. Deien ey aykr durumlarn ele aln ve kullancya geri dnmdr.

    Strutsda aykr durumlar ele alrken genelde iki yaklam vardr. Eer aykrdurum uygulama hatas ise; bu hata muhyemelen son kullanc tarafndan zlebilir.Bu durumda genelde giri sayfasna dnlr, kullancya bu durumla ilgili bilgi verilirve bu durumun zlmesi iin yaplabilecek deiiklikler kullancya sunulur.

    Eer aykr durum sistem tarafndan olumusa(low-level exception);yaplabilecek en anlaml i sistem hata sayfasnn gntlenmesidir. Kullancnn busorunu zme hususunda yapabilecei herhangi birey bulunmamaktadr. Bu hataprogramlama hatas veya adaki bir sorun olablir ama buradaki nemli nokta siz buhatann ayrntsn(stack trace) kullancya gstermezsiniz, sadece sistem hatasayfasn grntlersiniz. Sistem hata sayfasnn daha kullanc dostudur ve sistemyneticisi ile balant kurulmasn salayabilir.

    8.1. Zincirlenmi(Chained) aykr durumlarn KullanlmasBazen bir aykr durumu ele alp farkl bir aykr durum frlatmak istenebilir.

    Kullancnn esas aykr durumu umarsamyor veya bilmek istemiyor olabilir. rneinkullanc veritabanna bir resim eklemek istesin ve ekleme yapan yordam u ekildearlsn:

    public void updateImageFile( String imagePath ) throws UploadException;

    Methot arldnda bir hata olutuunda UploadException frlarlr. Ama esassorun ok farkl olabilir rnein dosya sistemi dolu olabilir veya veri taban zaten budosyay ieriyor olabilir. Gerekte oluan eykr durum IOException veyaSQLExceptiondur. Ama kullancnn bu ayrnty bilmeye veya cmlemesine gerekyoktur. Bilmesi gereken ey yklemenin yaplamam olmasdr. Bu sebepleproblemin asl sebebini gndermessiniz, bunun yerine baka bir aykr durumfrlatrsnz.

    Zincirli aykr durumlaru destekleyen aykr durum snf aada verilmitir:import java.io.PrintStream;import java.io.PrintWriter;/**

    * This is the common superclass for all applicationexceptions. This* class and its subclasses support the chained exceptionfacility that allows* a root cause Throwable to be wrapped by this class or oneof its* descendants.*/public class BaseException extends Exception {

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    40/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    40

    protected Throwable rootCause = null;

    protected BaseException( Throwable rootCause ) {this.rootCause = rootCause;

    }

    public void setRootCause(Throwable anException) {rootCause = anException;

    }

    public Throwable getRootCause( ) {return rootCause;

    }

    public void printStackTrace( ) {printStackTrace(System.err);

    }

    public void printStackTrace(PrintStream outStream) {printStackTrace(new PrintWriter(outStream));

    }

    public void printStackTrace(PrintWriter writer) {super.printStackTrace(writer);

    if ( getRootCause( ) != null ) {getRootCause( ).printStackTrace(writer);

    }writer.flush( );

    }

    }

    Bu snfn eleri ile gerek aykr durum gizlenebilir ve bu aykr durumunayrntl yapsndan souyutlanlabilir. Bu yap ayn azamanda kullancya vakitkazandrr.

    8.2. Haber veren(declarative) veya programsal(programmatic) aykrdurumlar

    Haber veren aykr durumlarn nasl ele alnaca, hangi aykr durumlarnfrlatlaca nasl ele alnaca, prohramn dnda bir dosyada genellikle XMLdosyasnda belirtilir. Bu yaklam aykr durumlar zerinde koda dokunmadan daharahat birekilde deiiklik yaplmasna olanak verir.

    Programsal aykr durumlar bunun tam tersidir. Aykr durumu ele alan methodkodun ierisindedir, d bir dosyada ele alnmaz. Struts iin bu yaklamn kullanmbiraz daha zordur.

    Dier struts biim(configration) seenekleri gibi, haber veren aykr durumlarda struts-configuraion dosyasnda yer alr.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    41/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    41

    Aada haber veren aykr durumlar kullanan bir struts configuration dosyasyer almaktadr:

    Exception elementinin iindeki path aykr durum olutuunda programnynlenecei sayfay gsterir. Mesela ExpiredPasswordException olutuunda,controller control changepassword.jspye ynlendirir.

    Aykr durum Action snfnn iinde programsal olarak ele alnmad zamanRequestProcessor bu aykr durum trnde bir exception elemenam var m diyebakar. Eer varse control bu elemann pathindeki yere ynlendirilir. Aadaki rnekRequestProcessorn processException metodunu gstermekteir.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    42/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    42

    protected ActionForward processException(HttpServletRequest request,HttpServletResponse response,Exception exception,ActionForm form,ActionMapping mapping)

    throws IOException, ServletException {

    // Is there a defined handler for this exception?ExceptionConfig config =mapping.findException(exception.getClass( ));

    if (config == null){if (log.isDebugEnabled( )){

    log.debug(getInternal().getMessage("unhandledException",exception.getClass( )));}

    if (exception instanceof IOException){throw (IOException) exception;}else if (exception instanceof ServletException){throw (ServletException) exception;}else{throw new ServletException(exception);}}

    // Use the configured exception handlingtry {Class handlerClass = Class.forName(config.getHandler( ));

    ExceptionHandler handler =(ExceptionHandler)handlerClass.newInstance( );

    return (handler.execute(exception, config, mapping,form,request, response));}catch (Exception e){throw new ServletException(e);

    }}

    Exceptionconfig nesnesi biim(configration) dosyasndaki exception nesnesiiin bellek alandr. Eer findExcetion metodu bu aykr durum iin bir exception

    nesnesi bulamaz ise aykr durum struts aykr durum ele alcsna gnderilmedenkullancya geri frlatlr.

    Eer oluan aykr durumun trnde bir exception eleman ver isefindException metodundan ExceptionConfig nesnesi dner. Rdndan bu nesezerinden getHandler metodu arlr ve aykr durum ilenir.

    Eer sizin kendi yanlmadnz yoksa Ssruts ats kendi aykr durum elealc(handler) snfn kullanr. Strutsn kendi ele alc snforg.apache.struts.action.ExceptionHandlerdr. bu snfn execute() metodu birActionError yaratr, bunu uygun alanda saklar ve exception elemannn path nitelii

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    43/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    43

    ile ilikili ActionForward nesnesini dndrr. zetlersek, eer action elemann iineexception elemann tanmlarsanz, aykr durum ele alcs ActionError yaratr veuygun alanda saklar ve kontrol path niteliinde tanmlanan kaynaa verir

    Exception nesnesi, aykr durum deiriinde, aykr durumun ele elnnyeniden dzenlemenize izin verir. Bunu org.apache.struts.action.ExceptionHandlersnfn genileten(extends) bir java snfnn handler zelliinden yapabilirsiniz. Bu

    snf sizin yapmak istediiniz zellii gerekletirmek iin ExceptionHandler snfnnexecute metodunu yeniden yazar(overwrite). rnein uygulamanz aadakisnf(BaseException) geniletsin(extends).package com.oreilly.struts.framework.exceptions;

    import java.util.List;import java.util.ArrayList;import java.io.PrintStream;import java.io.PrintWriter;/*** This is the common superclass for all applicationexceptions. This

    * class and its subclasses support the chained exceptionfacility that allows* a root cause Throwable to be wrapped by this class or oneof its* descendants. This class also supports multiple exceptionsvia the* exceptionList field.*/public class BaseException extends Exception{

    protected Throwable rootCause = null;private List exceptions = new ArrayList( );

    private String messageKey = null;private Object[] messageArgs = null;

    public BaseException( ){super( );

    }

    public BaseException( Throwable rootCause ) {this.rootCause = rootCause;

    }

    public List getExceptions( ) {

    return exceptions;}

    public void addException( BaseException ex ){exceptions.add( ex );

    }

    public void setMessageKey( String key ){this.messageKey = key;

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    44/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    44

    }

    public String getMessageKey( ){return messageKey;

    }

    public void setMessageArgs( Object[] args ){this.messageArgs = args;

    }

    public Object[] getMessageArgs( ){return messageArgs;

    }

    public void setRootCause(Throwable anException) {rootCause = anException;

    }

    public Throwable getRootCause( ) {return rootCause;

    }

    public void printStackTrace( ) {printStackTrace(System.err);

    }

    public void printStackTrace(PrintStream outStream) {printStackTrace(new PrintWriter(outStream));

    }

    public void printStackTrace(PrintWriter writer) {super.printStackTrace(writer);

    if ( getRootCause( ) != null ) {getRootCause( ).printStackTrace(writer);

    }writer.flush( );

    }}

    BaseException, snf strutsn kaynaklarna bir anahtar olan, messageKey

    ierir. Bu anahtar ActionError snfnn yaplandrcsna(constructor) geilir ve strutsbunu struts kaynaklarndaki bir mesej ile ilikilendirir. Bu snf ayn zamanda aykrdurum yaratcsnn gnleyebilecei bir nesne dizisi ierir. Bu nesnelerMessageFormat snf temelli parametrelerin tutulmasnda grevlidir. Bu mesaj uekilde olabilir.

    global.error.invalid.price=The price must be between {0} and {1}.ActionError nesnesi oluturulduunda ikinci parametre olarak nesneler dizisinigeebilirsiniz. Dizideki sfrnc eleman sfrnc pozisyona yerletirilir, bir indislieleman birinci pozisyona diye devam eder.

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    45/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    45

    Aadaki rnek default aykr durum ele alcsnn nasl geniletileceini(extent) veActionError snfnn yaplandrcsndaki aykr durumdaki argmanlarvekillendirerek(substituning) nasl zel zellik kazandrlcan ele almaktadr.package com.oreilly.struts.chapter10examples;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ExceptionHandler;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionError;import org.apache.struts.util.AppException;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.config.ExceptionConfig;

    import com.oreilly.struts.framework.exceptions.BaseException;

    public class SpecialExceptionHandler extends ExceptionHandler{

    protected ActionForward execute(Exception ex,ExceptionConfig config,ActionMapping mapping,ActionForm formInstance,HttpServletRequest request,HttpServletResponse

    response)throws ServletException {ActionForward forward = null;

    ActionError error = null;String property = null;

    /* Get the path for the forward either from theexception element

    * or from the input attribute.*/String path = null;if (config.getPath( ) != null) {path = config.getPath( );}else{path = mapping.getInput( );

    }// Construct the forward objectforward = new ActionForward(path);

    /* Figure out what type of exception has been thrown.The Struts

    * AppException is not being used in this example.*/if( ex instanceof BaseException) {

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    46/48

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    47/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    Belgeye ilikin eletiri ve nerilerinizi ltfen Ar. Gr. Fatih M. GLEe [email protected]

    47

    Struts

    n haber veren ayk

    r

    durum ele alma yntemini kullanmak, programsal

    kullanmanz engellemek, birarada gayet iyi alrlar. Ama bu kesimde programsalaykr durumlara yer verilmeyecektir.

    8.3. Programsal Aykr DurumlarBu yaklamda aykr durumlar kodun ierisinde ele alnr. Bunun anlam siz bir

    aty uygulamanz iin geniletmelisiniz(extend). Bu yaklamda yine actionErroryaratlr ve uygun alanda saklanr ve kontrol uygun ActionForwarda devrediliyor.

    Uygulamann aykr durumlar yine BaseExceptiondan tremilerdir. Aykrdurumu yakalamak kolaydr nk aykr durumu yakalamak iin sadece bir catchblou kullanrsnz. Eer aykr durum BaseExceptiondan treyen bir durum deise,

    bunun sistem aykr durumu olduu anlanr ve yle davranlr. Action snfnntry/catch bloklar ve aykr durumun ele aln aadaki gibidir.try{

    // Peform some work that may cause an application or systemexception

    }catch( BaseException ex ){// Log the exception

    // Create and store the action errorActionErrors errors = new ActionErrors( );

    ActionError newError = new ActionError( ex.getErrorCode(),ex.getArgs( ) );errors.add( ActionErrors.GLOBAL_ERROR, newError );saveErrors( request, errors );

    // Return an ActionForward for the Failure resourcereturn mapping.findForward( "Failure" )

    }catch( Throwable ex ){

  • 8/14/2019 Struts MGULEC WwwJavaDiliCom

    48/48

    HACETTEPE NVESTES

    BLGSAYAR MHENDSL BLM

    // Log the exception

    // Create and store the action errorActionError newError = new ActionError(

    "error.systemfailure" );ActionErrors errors = new ActionErrors( );

    errors.add( ActionErrors.GLOBAL_ERROR, newError );saveErrors( request, errors );

    // Return an ActionForward for the system error resourcereturn mapping.findForward( IConstants.SYSTEM_FAILURE_PAGE

    );}

    Bu yaklamdaki hata her Action snfnn iinde kod fazlal oluturmasdr.Bu fazlal yok etmenin yolu haber veren yntemin kullanmndr. Eer bu yntemikullanamyor ya da kullanmyorsanz bu fazlalktan kurtulmak iin bir yntem daha

    vardr.Eer abstract bir snfa programsal aykr durumlar ele alma zellii eklenirse, actionsnfnn tamamna gerek kalmaz. Bunu gerekletirmek iin executeAction metodunutanmlamanz(implement) gerekir. executeAction metodu storefrontBaseAction snftarafnda tanmldr ve templete tasarm rntsnn bir gerekletirimidir

    KAYNAKLAR

    OReilly Programming Jakarta Struts

    Struts in Action- Ted Husted, Cedric Demoulin, George Franciscus, DavidWinterfeldt Jakarta Struts for Dummies- Mike Robinson, Ellen Finkelstein http://www.forumta.com/programlama/99196-struts-sisteminin-

    kurulumu.html www.ibm.com www.cs.unc.edu www.oracle.com www.athensgroup.com www.sitepoint.com www.jakarta.apache.org/struts http://www.roseindia.net