Professional Documents
Culture Documents
Struts Framework RZAFER WwwJavaDiliCom
Struts Framework RZAFER WwwJavaDiliCom
___________________________________________________________________________
i.c
HACETTEPE ÜN VERS TES
B LG SAYAR MÜHEND SL BÖLÜMÜ
dil
B L447 - YAZILIM MÜHEND SL LABORATUVARI
Harun Re it Zafer
w.
20022365
hrzafer@gmail.com
ww
GR 3
m
B R JSP DOSYASI B R JAVA SERVLETT R 3
o
HTML SAYFAMIZDA ÇOK DAHA AZ JAVA KODU 6
i.c
GÖRÜNTÜ (V EW) 7
CONTROLLER (DENETÇ ) 9
MODEL 11
UYGULAMADA MVC 11
STRUTS A G R
STRUTS KURULUMU
ACTION SINIFI
ACTIONFORM SINIFI
dil 12
12
12
12
HTML FORMLARI 12
G RD LER ELE ALMA 13
va
MET N G RD S (TEXT INPUT) 13
AÇILIR KUTU G RD S (DROP-DOWN COMBO BOX INPUT) 13
RADYO DÜ MES G RD S 15
ONAY KUTUSU G RD S 15
ÇIKTILARI ELE ALMA 15
MET N ÇIKTISI(TEXT OUTPUT) 15
STRUTS TA TABLO YARATMA 15
ja
KAYNAKÇA: 22
m
GR
o
Günümüzde ortaokul çocuklar bile internete HTML sayfalar koyup yay nlayabiliyor. Oysa bu tür basitçe
haz rlanm bir web sayfas ile profesyonelce geli tirilmi bir web sitesi aras nda inan lmaz derecede fark
vard r. Sayfa tasar mc s (ya da HTML geli tiricisi) renk uyumu, ürün yelpazesi, mü teri al kanl klar ,
i.c
taray c uyumlulu u, sayfa genel görünümü, resim tasarlama, JavaScript ve daha birçok konudan anlamak
zorundad r. Büyük ve gerçekten güzel görünümlü bir siteyi bir araya getirmek gerçekten uzun ve yorucu
bir i tir ve ço u Java geli tiricisi iyi tasarlanm bir kullan c arayüzü geli tirmekten ziyade, iyi
tasarlanm bir nesne arayüzü geli tirmekle ilgilenir. Java Sunucu Sayfalar (JavaServer Pages, JSP) i te
bu noktada devreye girer ve bir sayfa tasar mc s ile bir Java geli tiricisi aras ndaki s k etkile imi sa lar.
Geni yelpazeli bir web uygulamas üzerinde çal m olanlar de i tirmek teriminin ne anlama geldi ini
dil
bilirler. MVC yap lacak de i iklikleri kontrol etmeye yard mc olmak üzere bir araya getirilmi bir
tasar m desenidir(örüntüsü). Struts ise J2EE tan mlar ndan Servlets 2.2 ve Jsp 1.1 i kullanan bir MVC
uygulamas d r.
Bu yaz da öncelikle, a ina oldu umuz -büyük ihtimalle- elemanlar kullanan bir JSP sayfas (dosyas ) ele
al nacak ve avantaj ve dezavantajlar tart lacakt r. Ard ndan Struts ve onun web projemizdeki
de i iklikler konusunda bize nas l yard mc olaca aç klanacakt r. Sonunda JSP sayfas yeniden
va
geli tirilecek ve tasar m mant de i tirilecek.
Asl nda bir JSP sayfas bir servlet i görüntülemenin farkl bir yolundan ba ka bir ey de ildir. JSP
kavram bize bir Java servlet i HTML sayfas olarak görebilmemizi sa lar. Bu görünüm normal olarak bir
Java kodunda görülen, rahats z edici tüm print()ifadelerini ortadan kald r r. JSP dosyas önce ".java"
ja
uzant l bir dosyaya çevrilir ard ndan derlenerek ".class" uzant l bir Java s n f elde edilir. ekil 1 JSP-
Servlet ak n gösteriyor.
w.
ekil 1
Küçük bir JSP uygulamas nda, genelde veri, i mant ve kullan c arayüzünün tek bir kod kesiminde bir
araya getirildi i görülür. Ve de genelde uygulama, uygulaman n ak n belirleyecek olan
mant (algoritmay ) içerir. Liste 1 ve ekil 2 kullan c lar n bir e-posta listesine (mailing list) kat lmalar n
sa layan basit bir JSP dosyas n gösteriyor.
o
String email = request.getParameter("email");
i.c
// validate input...
if( business.util.Validation.isValidEmail(email) ) {
// store input...
try {
business.db.MailingList.AddEmail(email);
%>
}
dil
} catch (Exception e) {
error = "Error adding email address to system.
if( error.length()==0 ) {
<jsp:forward page="welcome.html"/>
<%
va
}
} else {
// set error message and redisplay page
error = email + " is not a valid email address, please try
again.";
}
} else {
ja
email = "";
}
%>
<html>
<head>
w.
m
HTML kodunu olu turur.
o
ekil 2
Buradaki e-posta listesi JSP sayfas içeri i kendine ait, ak n tamam n Gerçekle tiren bir modül (parça).
JSP dosyas n n içermedi i iki ey e-posta geçerlili ini denetleyen, isValidEmail() metodunun içerdi i kod
i.c
kesimi ile e-posta adresini veritaban na ekleyen kod kesimidir yaln zca. Tek-sayfa yakla m n n avantaj
anla lmas n n ve ba lang çta in a edilmesinin kolayl d r. Buna ek olarak tüm grafiksel geli tirme
araçlar ile ba lan lmas kolayd r.
genelde ya berbat Java kodlar n n ortaya ç kmas na ya da berbat görünümlü sayfalar n haz rlanmas na
sebebiyet verir. Baz durumlarda her ikisi de olabilir!
Gömülü Algoritma
Uygulaman n ak mant n anlayabilmek için tüm sayfalar ke fetmek durumunday z. 100 sayfal bir
web sitesini hayal etti imizde ortaya ç kacak spagetti kodu bir dü ünün!
ww
K s tl De i im
mant nda ya da veride yap lacak bir de i iklik durumunda hemen hemen tüm sayfalara dokunmak
olas
Estetik
Do al olarak geni sayfalarda bu tür bir kodlama karmakar k olacakt r. Sat r say s 1000 e varabilir.
m
HTML Sayfam zda Çok Daha Az Java Kodu
Liste 1 de Java kodumuzun içinde çokça HTML kodu bulunmas yerine HTML sayfam zda çokça Java
kodu bulunuyor. Bu noktadan hareketle sayfa tasar mc lar na Java kodu yazmalar na izin vermenin
o
gerçekten problemimizi çözmedi ini görüyoruz. Neyse ki JSP 1.1 ile tag(etiket) ad verilen yeni bir
özelli e sahibiz.
Bir JSP etiketi kodu sayfadan soyutlaman n basit bir yoludur. JSP etiketleri JSP dosyalar için tasarlanm
i.c
kodu servlet te bulunan makrolarm gibi dü ünülebilir.(Bu yakla m hemen hemen do rudur) Ayn
nedenden dolay Java kodumuzda HTML etiketlerinin olmas ve JSP dosyam zda Java kodunun
bulunmas do ru de ildir. Çünkü JSP teknolojisinin tüm amac sayfa tasar mc s na Java kodu ile
u ra madan servlet ler tasarlamas na olanak vermektir. Etiketler Java programc lar n n HTML gibi
görünen Java kodlar ile JSP sayfalar n geni letmelerine olanak verir. ekil 3 bize kodu JSP sayfas ndan
al p JSP etiketine koyman n genel mant n gösteriyor.
action="join.do;jsessionid=ndj71hjo01">
<input type="text" name="email" maxlength="30" size="30" value="">
<input type="submit" name="submit" value="Submit">
</form>
<script language="JavaScript">
<!--
document.joinForm.email.focus()
m
// -->
</script>
o
Struts anlayabilmek için öncelikle MVC tasar m desenini anlamak gerekir. MVC tasar m deseni model,
view ve controller olmak üzere üç temel yap dan olu ur.
i.c
ekil 4 mvc
dil
ekilden de görebilece iniz gibi kullan c controller (genelde servletler) bile enleri ile onlara istem
va
göndererek etkile ir. Controller bile eni model (genelde ejb bean) bile enine anl k bildirimde bulunur ve
i ak mant na göre onlar idare eder. Model yap land r ld nda controller kullan c ya s rada hangi view
(genelde JSP) bile enini gösterece ine karar verir ve bu view bile eni kullan c ya ilgili veriyi göstermek
için model ile etkile ir.
ja
Bile enler aras ndaki etkile imi daha iyi anlayabilmek için basit bir örne i inceleyelim. Bu örnekte
kullan c basitce üye giri bilgileri ile sisteme giri yaparken bilgileri de sisteme kaydediliyor.
w.
Görüntü (View)
<html>
<head>
ww
<title>Please Login</title>
</head>
<body>
<h1>Please enter your login information</h1>
<br/>
<form action="controller?action=login" method="post">
m
<table border="0">
<tr>
<td>Username</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
o
<td>Password</td>
<td><input type="password" name="password"/></td>
</tr>
i.c
<tr>
<td>
<input type="submit"/>
</td>
<td>
</td>
</tr>
</table>
</form>
</body>
</html>
dil
va
login.jsp sayfas
Bu üye giri sayfas kullan c ya kullan c ad ve ifresini girme olana verir. Ve girilen veriyi controller
Servlet e (a a da gösterilen) arzederek ona login (giri yap) eylemini (action) yapmas n söyler :
<html>
<head>
<title>Welcome</title>
</head>
w.
<body>
<h1>Welcome <jsp:getProperty name="user"
property="name"/></h1>
</body>
</html>
ww
welcome.jsp sayfas
welcome.jsp sayfas kullan c ya bir önceki sayfada kullan c n n sa lad kullan c ad n kullanarak bir
m
ho geldin mesaj sunar. Görüldü ü gibi burada basitce oturum içindeki bir JavaBean kullan l r (useBean
etiketi kullan larak gösterilen). Bu bean oturuma birazdan görece imiz gibi Controller taraf ndan
yerle tirildi.
Controller (Denetçi)
o
A a daki kod ile gösterilen Servlet uygulamam zda kulland m z Controller gösterir.
package com.samjdalton.mvc.controller;
i.c
import com.samjdalton.mvc.controller.actions.LoginAction;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import
import java.io.IOException; dil
javax.servlet.RequestDispatcher;
Action action=null;
if (theAction.equalsIgnoreCase("login")) {
w.
action = new
LoginAction(httpServletRequest,httpServletResponse);
}
RequestDispatcher rd =
httpServletRequest.getRequestDispatcher(page);
m
Controller.class
o
Bu hangi eylemi (action) ça raca na karar vermek için yaln zca bir istem parametresi kullanan çok basit
bir Controller. Burada sayfa giri -yap eylemini parametre olarak gönderiyor ve LoginAction
ça r l yor. Bu eylem Request ve Response nesnelerini parametre olarak alan bir method ile standart
i.c
bir arayüz tan ml yor. Action s n f bir sonraki sayfan n yolunu dönderiyor ve kullan c bu sayfaya
yönlendirilmi oluyor.
package com.samjdalton.mvc.controller.actions;
import com.samjdalton.mvc.model.UserBean;dil
import com.samjdalton.mvc.controller.Action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
va
public class LoginAction implements Action {
public LoginAction(HttpServletRequest request,
HttpServletResponse response) {
}
// create a UserBean
UserBean user = new UserBean(username);
w.
LoginAction s n f
Bu action kullan c ad parametresini istemden elde ederek yeni bir model nesnesi (UserBean) yarat r,
oturuma yerle tirir ve aç lacak bir sonraki sayfan n welcome.jsp olaca na karar verir.
Model
m
Uygulamam zdaki model yaln zca bir JavaBean kullanan çok basit bir yap ya sahip. A a da gösteriliyor:
package com.samjdalton.mvc.model;
o
public class UserBean {
i.c
public UserBean(){}
public UserBean(String name) {
this.setName(name);
}
}
this.name=name;
}
return name;
dil
}
va
UserBean.class
Uygulamada MVC
Görüldü ü gibi yukar daki uygulama çok basit bir Model 2 (MVC 2) uygulamas . Bu uygulama istenseydi
ja
çok daha geni letilebilirdi. Örne in eylemleri dinamik olarak uyarlayabilir, ak kontrolünü d ar dan
yap l r hale getirebilirdik.
Bütün bu uyralamalar , de i iklikleri ve çok daha fazlas n yababilmemizi Struts framework sa l yor.
w.
ww
STRUTS A G R
m
Struts projesi 2000 Craig McClanahan taraf ndan MVC tabanl Java Web uygulamalar geli tirmede bir
standart belirlemek amac yla tasarland . Struts 1.0 2001 in ortas nda yay nland ve u anda Apache
Kurulu u nun Jakarta Projesinin bir parças d r. Struts çok çe itli projelerde geni bir yelpazede, farkl
endüstri dallar için kullan lmaktad r.
o
Struts yüksek uyarlanabilirlikli, geni letilebilir bir MVC framework üdür ve hayal edilebilecek herhangi
bir Java Web uygulamas nda kullan labilir. MVC tasar m deseninin her üyesi Struts ta desteklenmektedir.
i.c
Struts Kurulumu
ACTION SINIFI
Action s n f n n birkaç görevi var:
va
- Görüntülenecek JSP için veriyle birlikte istem(request)/oturum ba latmak
- Veri ile ActionForm s n f çekirde ini(bean) kurmak
- ActionForm s n f çekirde indeki kullan c dan dönen veriyi geçerlemek(validate) ve veri taban nda
saklamak
Bu son madde için Action s n f ndaki name alan na kar l k gelen struts-config.xml de name/yol çifti(yerel
ve genel yönleniciler) kurulur.
ja
JSP sayfas na veri aktarmak için mutlaka bir ActionForm s n f na ihtiyaç vard r, yani bir JSP sayfas ndan
baksa bir JSP sayfas na direkt bir geçi söz konusu de ildir. JSP lere direkt eri im tehlikelidir, mutlaka
denetçi üzerinden geçi yapmalar gerekiyor. Aksi takdirde denetçinin sa layaca eri im kontrolü
atlanm olur.
w.
ACTIONFORM SINIFI
ActionForm s n f bir yast k alan gibi dü ünülebilir.Kullan c yanl veri girerse, bunun hemen veri
taban na gitmesi engellenmi oluyor. Kullan c n n girdi i eski verilerd bir yanli l k varsa, kullan c nerede
hata yapt n görebiliyor ve bunu düzeltebiliyor.
ActionForm s n f ndaki bütün alanlara ilk de erler atayabilirsiniz. Struts bu ilk de erleri gösterir ve
kullan c n n bunlar de i tirmesine olanak verir. Kullan c formu onaylar, siz geçerlersiniz, hatalar
saptars n z, struts a buldu unuz hatalar n listesini verirsiniz ve bunlar ele almas n söylersiniz. Struts
ww
kullan c ya formun üst k sm ndaki hata listesiyle birlikte formu tekrar görüntüler. Böylece kullan c
hatalar n görür, düzeltir ve formu yeniden onaylar.
HTML FORMLARI
Struts daki html etiketleri(tag) genellikle sadece html:form etiketi ba lam içinde çal r. Örne in:
<html:form action="/Tan mDüzenle.do" scope="session">
</html:form>
Tan mDüzenle.do bu jsp için bir action s n f d r. scope verinin bulunaca ve geçerli olaca faaliyet
m
alan d r. Bu form sunucuya html:submit etiketi kullan larak onaya gönderilir. A a da bunun örne i yer
almakta:
<html:submit property= onayDü mesi value= Düzenle />
Yukar daki sat r; onayDü mesi dizgisini form çekirde inin property niteli ini ve value niteli inin de erini
Düzenle olarak atar ve formu onaylar.
o
Bu action s n f n zda ne yapaca n z ekillendiren bir anahtard r. E er bu alan bos olsayd , action
s n f n z ba ka bir sayfadan al rd n z ve ilk de erlerini atard n z. Alan bo de ilse bunu kullan c n n
Düzenle dü mesine basmas yla al rs n z. value hem dü meyi etiketlendirmek için hem de property ile
gösterilen alan n de erini atamak için kullan l r.
i.c
<html:submit property= i value= Ekle />
<html:submit property= i value= Düzenle />
<html:submit property= i value= Kaydet />
Form onayland zaman ekleme, düzenleme veya kaydetme i lemlerinden hangisini yapt n z i
alan n kontrol ederek karar verebilirsiniz.
JSP ye bir metin kutusu de eri girmek için u struts etiketini kullanabilirsiniz.
<html:text property="kullan c Ad "/>
Bunu çal t rmak için ActionForm çekirde i kullan c Ad olarak adland r lan özel(private) ve
va
korunmu (protected) dizgi de erleri içn setKullan c Ad adl atama(setter) ve getKullan c Ad adl
de er döndürme(getter) metodlar n içermelidir. Struts java çekirde indeki property i getirerek JSP de
görüntülemeyi ve onaya gönderildi inde JSP den al nan de erle java çekirde indeki property i doldurmay
sa lar.
Aç l r kutular kullan c n n birden çok eleman aras ndan birini seçmesi için kullan l r. Struts ta bu select,
option ve options etiketleri kullan larak gerçekle tirilir. Kullan c aç l r kutuda bir madde seçerken, struts
form çekirde inde seçilen de eri bir de i kenle il ikilendirir. Bu de i kenin ilk de eri seçim öncesi
görünen de eri gösterir.
Seçimi select etiketinin value niteli ini kullanarak hard coding(programda verinin kodun içinde oldu u
w.
dolay s yla de i tirilmesinin zor oldu u ekli) de mümkündür. Bu sadece seçim öncesi bir de eri
istedi imiz zaman yararl d r. Örne in ülke adlar n n alfabetik s raland bir listede her zaman Türkiye
nin görünmesi gibi. Bunu yapman n anlam kullan c bu ekrana geldi inde Türkiye nin öncelikli de er
olmas ve kullan c seçiminin bir i e yaramamas d r. Bu kötü bir fikirdir.
Select a a dakilerle kullan labilir:
dizgi kümesi(collection of strings), dizi listesi(arraylist)
her biri dizgi alanlar içeren çekirdek kümesi
ww
m
<html:options name="isimListesi" />
</html:select>
o
<html:options name="isimListesi" />
</html:select>
burada bir sim dizi listesindeki isimlerden biridir.
i.c
Çekirdek dizi listesi ile:
Çekirdeklerin dizgi alanlar unlarla ilgilidir:
- görüntülenenDe er
- kimlikDe eri
Dizi listesinin ad çekirdekListesi olsun. Bu liste istem veya oturum dan birinin içine koyulur.
Kullan c n n seçiminin atanaca form çekirde indeki alan n ad seçilenDe er dir. Bu seçilen çekirde in
</html:select>
dil
kimlikDe eri ne atanacakt r. Bu de er ayn zamanda formdaki seçim öncesi de ere atan r. Kullan c
görüntülenenDe er in içeri ini listedeki bir eleman olarak görecektir.
li kilendirilmi Dizgiler
Kullan c n n seçimi olan seçilen de er form çekirde indeki alan n ad na atan r. Bu de er formda seçim
öncesi de ere atanmal d r.
<html:select property="seçilenDe er">
w.
m
Radyo dü mesi girdisi için kullan c ya birbirini d layan birkaç seçenek sunulur ve sadece bir tanesini
seçmesine izin verilir. Bir örnek:
<html:radio property="seçim value= ssk />
<html:radio property="seçim value= emeklisand />
o
<html:radio property="seçim value= ba kur />
Hepsi ayn radyo dü mesi grubunda oldu u için property nitelik de erleri ayn , bu yüzden kar l kl
d lama sözkonusu. Seçim öncesi de ere value nitelik de erlerinden birini e le tirmek için action
s n f n zdaki form çekirde indeki niteli e seçim de erini atay n.
i.c
Onay Kutusu Girdisi
Onay kutusu struts n di er girdi türlerinden biraz farkl d r. Formdaki türü boole(boolean) olmal d r.
Ayr ca çal mas için de erini form çekirde indeki reset metodunda 0 (false) atamal s n z. Bunun sebebi
html nin s f r de erli onay kutular için de er göndermemesidir. Bir örnek:
silinmesi gerekir.
dil
<html:checkbox property= ö eEkle value= on />
Seçim öncesi de eri belirlemek için baska bir alan kullan lmal d r. Bu yüzden ö eEkle alan n n
Onay kutusunun bütün nitelikleri seçmelidir. value bu onay kutusunun seçilip seçilmedi ini belirler.Hiç
bir ey yap lmazsa de eri on dur.
de eri 0 (false) t r.
Struts ta iterate etiketi tablo yaratmak için kullan l r. A a da basit bir örnek var.
w.
m
yarat lan çekirde i kullanmak için kullan l yor.
scope de eri verilmemi se etiket çekirde i s rayla sayfa(page), istem(request), oturum(session) veya
uygulama(application) etki alanlar nda ar yor.
Type de eri formun fiziksel yolunu verirken; name formun mant ksal ismini veriyor.
o
Iterate Etiketinin Etki alan nda(scope) ndisli Nitelik Kullanma
Iterate kullan rken bir tabloya giri yapmaya imkan verilmesi için html etiketlerinin indisli niteliklerini
i.c
kullanmal s n z.Bunun birkaç örne i a a da ele al nm . Bu niteli i ele al rken dikkat edilmesi gereken
bir nokta da verinin struts ta sadece form çekirde ine girilebilmesidir.
Bu demek oluyor ki çal acak indisli niteli i almak için listenizi form çekirde inde saklamal s n z.
ndisli nitelik 1.02. sürümden sonra ortaya ç km t r.
dil
Bir tablonun elemanlar düzenlenmek veya silinmek üzere sunuldu u zaman, tablodaki her sat ra kar l k
bir ya da iki onay dü mesinin olmas n isteyebilirsiniz. A a da bunun örne i var.
<logic:iterate id="ö renci" name= Ö renciListesi scope="session"
type="hubm.ogrenci.proje.Ö reciListeForm">
<tr>
<td> <html:submit indexed="true" property="komut" value="Düzenle"
/>
va
</td>
<td> <html:submit indexed="true" property="komut" value="Sil" />
</td>
<td>
<bean:write name="ö renci" property="ad" filter="true"/>
</td>
<td>
ja
filter="true"/>
</td>
</tr>
</logic:iterate>
Bu komut dizgi dizisinin property niteli ine dü meye bas ld zaman Düzenle atan yordu, örne in
komut[3]== Düzenle . Struts reflection kullan r, reflection da atama ve de er döndürme metodlar na ba l
ww
olarak türü belirler. Bu örnekte form çekirde inin ilgili bölümleri u ekildedir:
private int secilenDeger = 0;
private String komut = ;
public void setKomut (int index, String deger)
{
secilenDeger = indis;
komut = deger;
}
m
public String getKomut (int indis)
{
return komut;
}
public String getKomut()
{
o
return komut;
}
public int getIndis()
i.c
{
return secilenDeger;
}
Action da hangi dü meye bas ld n komut u kontrol ederek ve hangi eleman oldu unu indisi kontrol
ederek görebilirsiniz. Formda oturum veya isteme geçirdi iniz listeyi al p getirmeniz gerekebilir, bu
durumda indisi kullanarak seçilen eleman alabilirsiniz.
select/ options etiketlerinin tersine radyo dü mesi etiketi tektir. select te struts a sonucu nereye
koyaca n z , options ta ise listeyi nereden alaca n z söylemeniz gerekir. Radyo dü mesinin etiketini
tekli inden dolay liste; sonuçlar n sakland yerle ayn yerden gelir(struts ta sonuçlar sadece form
çekirde inde saklan r). A a da bunun nas l yap laca n n örne i var.
ja
Bu örnekte çekirdek dizi listesi veri yap s var. Öyle ki her çekirdek kap ad ve durum propery sine sahip.
E er radyo dü me etiketinde belirlenen de er ile çekirde in durum özelli i e le irse, bu radyo dü mesi
tablo görüntülenirken kontrol edilir. Kullan c formu onaylad ktan sonra, dizi listesi getirilip her bir
çekirde in durum alan n n o anki de eri al n r.
Dikkat edilmesi gereken nokta; iterate etiketindeki id için kulland n z de er ile form çekirde indeki
property de erinin örtü mesidir. Bu sadece yerel de i ken yaratmak için de il, sonuçlar n nereye
w.
gidece ini de belirlemek için kullan l yor. Bu anlat lanlar id nin her eyin yolunda gitmesi için gereken iki
görevidir.
HATA MESAJLARI
Struts etiketlerin hata mesajlar n göstermelerine olanak verir:<html:errors/>. Bu struts etiketi jsp içinde
ww
html nin üretildi i noktada hata mesaj listesinin eklenmesine yol açar. Bu etiket <html:errors
property= anahtar /> da görüldü ü gibi bir property niteli ine sahiptir ve bu etiket sadece anahtar ile
e le en hata mesajlar n n görüntülenmesini sa lar.
Action s n f n zda, bir hata yakalad n z zaman u sekilde devam edilir:
ActionErrors hatalar = new ActionErrors( );
errors.add(parametre1,new ActionError(parametreler));
saveErrors(istem , hatalar);
return (new ActionForward( e lem.getInput()));
m
Burada istem (request) HttpServletRequest türündedir. e lem ise ActionMapping türündedir. Hata
mesaj listesi ActionErrors hatalar=new ActionErrors ile yarat l r ve tekil bir ActionError da add
metodu ile hatalara eklenir. add metodu iki parametre al r. Bunlar html:error etiketinde kullan lacak bir
anahtar ve hata mesaj n kapsülleyen(encapsulate) ActionError d r. Yine iki parametre alan a r
yüklenmi add metodunda hatalar.add( String özellik, ActionError hata) özellik(property) hatan n
o
kategorisini tan mlamak için kullan l r.
ActionError nesnesinin yap c metodu(constructor) birden be e kadar parametre alabilir.Birinci parametre
UygulamaKaynaklar .properties kütü üne anahtard r. Bu kütük hata mesajlar n n olu turdu u metni
içerir. Kalan parametreler seçmelidir, hata mesajlar ndaki yer-tutucular(place-holders) n yerine geçen
i.c
de erlerdir. Parametreler ve mesaj dizgilerinin nas l yarat ld hakk nda daha kapsaml bilgi için
java.text.MesageFormat kütüphane dökümanlar incelenmelidir.
Basit bir örnek:
UygulamaKaynaklar .properties kütü ünde:
VTHata = <li>Hata: {1}çal l rken {0}
Jsp kütü ünde:
<html:errors/>
Action s n f kütü ünde:
hatalar.add( ö renciListeDBError ,
alan bulunamad
dil
new ActionError( VTHata ,
,
"ö renci listesi almaya "));
JSP de görüntülenen Hata Mesaj :
Hata: ö renci listesi almaya çal l rken alan bulanamad
va
Hata Mesajlar nda Sabitlerin Kullan m
Derleme zaman nda dizgiler hata almazlar. Derleyicinin potansiyel çal ma zaman hatalar n bulmas na
yard mc olmak için mümkün oldu unca sabit kullanmak bir standart haline gelmi tir. Hata mesajlar için
iki yerde sabit kullan m uygundur.
Birincisi UygulamaKaynaklar .properties kütü ündeki mesaj anahtarlar n Sabitler kütü ü içine
ja
m
Hata Mesaj
Hata: ö renci listesi almaya çal l rken alan bulanamad
JSP Kütü ü içinde Sabitlerin Kullan m ile lgili Basit Örnek
Sabitler kütü ünde:
public static final String VT_HATA = "VTHata";
o
UygulamaKaynaklar .properties kütü ünde:
VTHata=<li>Hata: {0} çal l rken{1}
JSP kütü ünde:
<%@ page
i.c
import="com.ö renci.controller.org.Ö renciEkleAction" %>
<html:errors
property= "<%= Ö renciEkleAction. OGRENCI_VT_HATA %>" />
Action s n f kütü ünde:
public final String OGRENCI = ö renci ;
public final String OGRENCI_HATA =
Sabitler.VT_HATA+ "." + OGRENCI;
errors.add(PARENT_ORGS_DB_ERROR,
Hata Mesaj
dil
new ActionError (Sabitler.VT_HATA,
ö renci listesi almaya ,
Yorumlar:
1. Sabitlerde hata mesaj parametreleri belirlenebilmesine ra man asl nda buna gerek yok.Ço u zaman
va
parametre dizgisi kural d durum(exception) metninden geliyor çünkü.
2. Bir hata mesaj ile bir alan birle tirmek mümkündür. Bunu yapabilmek için her alan kümesi kendi
dene/yakala(try/catch) blo unda kapsüllenebilir, böylece her hata mesaj n n yeri belli olur.
html:errors etiketi parametresiz kullan ld zaman hata mesaj listesinden sonra sayfay ortadan
bölen bir çizginin görünmesine neden oluyor.
ja
UygulamaKaynaklar .properties kütü ünde sadece hata mesajlar saklanm yor, bunu yan nda hata sayfa
ba l ve altl da burada saklan yor. Bir örnek:
hatalar.header=<hr><p><b><center>Bu sayfa için Hatalar</center></b></p> hatalar.footer=<hr>
Bu u ekilde görünür:
-----------------------------------------------------------------------
Bu sayfa için Hatalar
.Hata: Bu bir hatad r
ww
o
public void reset(ActionMapping e lem, HttpServletRequest istem)
Bu metod java çekirde indeki de erleri onlar n ilk hallerine dönü türür.
validate metodu denetçi servlet taraf ndan java çekirde i özellikleri yayg nla t r ld ktan(deploy) sonra
ça r l r. validate kar l k gelen action s n f n n perform metodu ça r lmadan hemen önce ça r l r. validate
i.c
metodu u seçeneklere sahiptir:
1. Uygun geçerlemeleri yap ve hiçbir problem bulma. bo de er(null) veya s f r büyüklükte
ActionError döndür ve denetçi servlet e uygun action s n f n n perfom metodunu ça r.
2. Uygun geçerlemeleri yap ve problem bul. Bir ActionErrors kopyas döndür. Öyleki bu s n flar
görüntülenecek hata mesaj anahtarlar içersin. Denetçi servlet <html:errors> etiketinin
kullanaca uygun bir istem niteli i alarak bu diziyi saklar ve bunu giri formuna kadar yollar
(Bu form ActionMapping için girdiformu property de eri ile kimliklendirilmi tir ve bununla
ay rt edilebilmektedir) .
dil
validate metodunun normal gerçekle tirimi bo de er döndürür ve denetçi sevlet gerekli geçerlemenin
action s n f taraf ndan yap ld n farzeder. Bu normal artlarda olur fakat ço u geçerleme i mant na
ayk r bir geçerleme i lemi gerçekle tirir ve ActionForm çekirde i kendisine bile ik bir i mant içermez.
Not: Reset onay kutusu kullan yorsan z form çekirde inde kullan lmaz.
mant n z ,JSP niz ve tümle ik olan java çekirde ine ek olarak; veri taban na veri saklayan ve veri
getiren di er s n flarada sahip olman z gerekir .
va
Struts-config.xml NED R?
Struts-config.xml de 3 tür bilgi bulunur:
</html:link>
Çekirdek Bildirimleri
m
Action E lemleri(Action Mappings)
Bunu iki çe idi vard r. Biri girdi kabul edecek JSP ve girdi kabul etmeyecek JSP. Girdi kabul etmeyecek
JSP ler için tümle ik bir ActionForm dü ünülemez.
o
<action path="/bu sayfan n yolu"
type="action s n f n n yolu"
scope="request"
input="tümle ik JSP nin yolu">
i.c
<forward name="bir isim" path="/JSP nin yolu"/>
</action>
Bunun bir örne i:
<action path="/Kullan c Ekle"
type=" com.ogrenci.Action.Kullan c EkleAction "
scope="request"
input="/jsp/Kullan c Ekle.jsp">
Kaynakça:
m
http://www.athensgroup.com
http://www.sitepoint.com/"http://jakara.apache.org/struts/"
o
http://www.sitepoint.com/"http://www.amazon.com/exec/obidos/ASIN/0596005199//"
http://www.sitepoint.com/"http://www.amazon.com/exec/obidos/tg/detail/-/0596003285/"
i.c
http://www.sitepoint.com/"http://www.amazon.com/exec/obidos/ASIN/1930110502//"
dil
ja va
w.
ww