Download as pdf
Download as pdf
You are on page 1of 22

o m

___________________________________________________________________________

i.c
HACETTEPE ÜN VERS TES
B LG SAYAR MÜHEND SL BÖLÜMÜ

dil
B L447 - YAZILIM MÜHEND SL LABORATUVARI

ARA TIRMA ÖDEV


va
(Struts Framework)
ja

Harun Re it Zafer
w.

20022365

hrzafer@gmail.com
ww
GR 3

m
B R JSP DOSYASI B R JAVA SERVLETT R 3

BAS T B R JSP DOSYASININ ÇER 3


TEK-SAYFA YAKLA IMININ DEZAVANTAJLARI 5

o
HTML SAYFAMIZDA ÇOK DAHA AZ JAVA KODU 6

MODEL-V EW-CONTROLLER (MVC) TASARIM DESEN 7

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

ITERATE ET KET N N ETK ALANINDA(SCOPE) ND SL N TEL K KULLANMA 16


B R TABLODA ONAY DÜ MELER KULLANMA 16
RADYO DÜ MELER TABLOSU YARATMA 17
HATA MESAJLARI 17
HATA MESAJLARINDA SAB TLER N KULLANIMI 18
HATA MESAJLARI Ç N SAYFA BA LI I VE SAYFA ALTLI I 19
w.

ACT ONFORM GEÇERLEME(VAL DATE) VE RESETLEME(RESET) 20


STRUTS-CONF G.XML NED R? 20
GENEL YÖNLEN C LER(GLOBAL FORWARDS) 20
ÇEK RDEK B LD R MLER 20
ACT ON E LEMLER (ACT ON MAPP NGS) 21
ww

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.

B R JSP DOSYASI B R JAVA SERVLETT R

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

Basit bir JSP dosyas n n içeri i


ww

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.

Liste 1. "join.jsp" basit bir talep-yan t JSP dosyas


m
<%@ page language="java" %>
<%@ page import="business.util.Validation" %>
<%@ page import="business.db.MailingList" %>
<%
String error = "";

o
String email = request.getParameter("email");

// do we have an email address


if( email!=null ) {

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

// redirect to welcome page...


" + e;

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

<title>Join Mailing List</title>


</head>
<body>
<font color=red><%=error%></font><br>
<h3>Enter your email to join the group</h3>
<form action="join.jsp" name="joinForm">
<input name="email" id="email" value=<%=email%>></input>
ww

<input type=submit value="submit">


</form>
</body>
</html>
Basit bir istem-yan t durumunda, JSP dosyas veriyi haz rlar, bir sonraki sayfaya ak kontrol eder ve

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.

Join.jsp nin yapt klar

1. lk giri sayfas n görüntüle


2.
3.
4. email adresi geçerli ise
a. Adresi veritaban na ekle
dil
form parametresinden email de erini oku
email geçerlili ini kontrol et

b. Bir sonraki sayfaya yönlendir


5. email adresi geçersiz ise
a. bir hata mesaj haz rla
va
b. join.jsp sayfas n hata mesaj ile beraber tekrar görüntüle

Tek-Sayfa Yakla m n n Dezavantajlar

A r html ve Java e lemesi


JSP dosyas n n kodlay c s hem bir Java geli tiricisi hem de bir sayfa tasar mc s olmak zorundad r. Bu
ja

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!

Java ve JavaScript belirsizli i


Sayfalar geni ledikçe biraz JavaScript kullanma e ilimi ortaya ç kabilir. JavaScript sayfada göründü ünde
Java kodu ile bir çak ma söz konusu olabilir. Örne in email de erinin geçerlili ini s namak için istemci
w.

tarafl bir JavaScript kullanmak olas bir çak ma sebebidir.

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

Hata Ay klama (debuging) zorlu u


HTML etiketleri, Java ve JavaScript kodunun hepsinin bir arada olmas hata ay klamay zorla t r r.

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.

ekil 3 JSP tag


dil
Liste 2 de Struts tag n sa lad avantaja bir örnek görüyoruz. Liste 2 de normal HTML <form> etiketi
Struts <form:form> etiketi ile de i iyor. Liste 3 ise taray c n n alaca sonuç HTML i gösteriyor. Taray c
va
HTML <form> etiketini al yor fakat JavaScript gibi bir tür ek kod ile. Ek JavaScript email alan ndaki
focus ilk de erini atar. Sunucu tarafl <form:form> etiket kodu özelle tirilmi HTML kodunu olu turdu ve
JavaScript kodunu sayfa tasar mc s ndan soyutlam oldu.
ja

<form:form action="join.do" focus="email" >


<form:text property="email" size="30" maxlength="30"/>
<form:submit property="submit" value="Submit"/>
</form:form>
w.

<form name="joinForm" method="POST"


ww

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>

Model-View-Controller (MVC) Tasar m Deseni

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)

Bu uygulaman n görünümü için 2 basit JSP kullanaca z.

<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>
&nbsp;
</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 :

<jsp:useBean id="user" class="com.samjdalton.mvc.model.UserBean"


scope="session" />
ja

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

public class Controller extends HttpServlet {


protected void doGet(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws ServletException,
IOException {
va
doPost(httpServletRequest, httpServletResponse);
}

protected void doPost(HttpServletRequest httpServletRequest,


HttpServletResponse httpServletResponse) throws ServletException,
IOException {
ja

// get the action property from the request


String theAction = httpServletRequest.getParameter("action");

Action action=null;
if (theAction.equalsIgnoreCase("login")) {
w.

action = new
LoginAction(httpServletRequest,httpServletResponse);
}

// execute the action, which returns the page to go to next


String page =
action.execute(httpServletRequest,httpServletResponse);
ww

RequestDispatcher rd =
httpServletRequest.getRequestDispatcher(page);

// forward to the next page


rd.forward(httpServletRequest,httpServletResponse);
}
}

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.

Örne imizdeki LoginAction a a da gösterilmi tir

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) {
}

public String execute(HttpServletRequest req, HttpServletResponse


res) {
ja

// get the user name


String username = req.getParameter("username");

// create a UserBean
UserBean user = new UserBean(username);
w.

// put it in the session


req.getSession().setAttribute("user", user);

// redirect to the welcome.jsp page


return "/welcome.jsp";
}
ww

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 {

private String name;

i.c
public UserBean(){}
public UserBean(String name) {
this.setName(name);
}

public void setName(String name) {

}
this.name=name;

public String getName() {

}
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

En son Struts sürümünü bu adresten elde edebilirsiniz. http://www.sitepoint.com/"http://apache.get-


software.com/jakarta/struts/binaries/jakarta-struts-1.1.zip/" . ndirdikten sonra s k t r lm dosyalar
açmal s n z. Da t m bir Struts uygulamas geli tirebilmek için gerekli olan tüm kütüphaneleri
içermektedir. Da t mda ayn zamanda Webapps dizininin içerisinde bo bir Struts uygulamas (struts-
blank.war) bulunmaktad r. Bu kendi web uygulamalar m z geli tirmek için bize bir çat sa lamak ad na
oldukça kullan l d r.
dil
Kendi kodunuzu WEB-INF/classes dizinine, kendi ayarlar n z WEB-INF/struts-config.xml dosyas na
koyabilirsiniz. Böylelikle tamamen fonksiyonel bir Struts uygulamas na sahip olmu olursunuz.

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.

G RD LER ELE ALMA

htlm:form etiketi ba lam nda çal r.

Metin Girdisi(Text Input)


dil
Struts ta girdiler ço unlukla html:form etiketi ba lam içinde ortaya ç kar. Html etiketleri sadece

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 Kutu Girdisi(Drop-Down Combo Box Input)


ja

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

kod içine gömülü(hard coded) de erler


yukar dakilerin kombinasyonu

Dizgilerin dizi listesi ile:


Dizi listesinin ad isimListesi olsun. Bu liste istem veya oturumdan birinin içine koyulacak. Kullan c n n
seçimiyle atamak için kullan lan form çekirde indeki alan n ad seçilenDe er . Formda bu de er seçim
öncesi de er olarak atan r.
<html:select property="seçilenDe er">

m
<html:options name="isimListesi" />
</html:select>

Dizgi dizi listesi ile seçilen value nas l ili kilendirilir:


Select u sekilde de i tirilir:
<html:select property="seçilenDe er" value="bir sim">

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 property="seçilenDe er">

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

<html:options collection="isimListesi" property="idValue"


labelProperty="görüntülenenDe er"/>

Çekirdeklerin dizi listesi ile seçilenDe er nas l ili kilendirilir:


va
Select u ekilde de i tirilir:
<html:select property="seçilenDe er" value="birÖzellik">
<html:options collection="isimListesi" property="kimlikDe eri"
labelProperty="görüntülenenDe er"/>
</html:select>
birÖzellik options etiketinde collection niteli i taraf ndan belirlenen listedeki çekirde in alanlar ndaki
dizgilerden biridir.
ja

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.

<html:option value="de er1"/>


<html:option value="de er2"/>
<html:option value="de er3"/>
</html:select>

li kilendirilmi dizgilerle SeçilenDe er in li kilendirilmesi


Select u ekilde de i tirilir:
ww

<html:select property="selectedValue" value="de er2">


<html:option value="de er1"/>
<html:option value="de er2"/>
<html:option value="de er3"/>
</html:select>
Radyo Dü mesi Girdisi

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.

ÇIKTILARI ELE ALMA


va
Metin Ç kt s (Text Output)

bean:write etiketi metnin yazd r lmas için kullan l r.Bir örnek:


<bean:write property="isim" filter="true"/>
Form çekirde indeki isim alan n n de erini yazmak içindir. filter niteli i html de problem
yaratacakkarakterleri otomatik kodlamaya izin verir.Hiç b r de i iklik yap lmad takdirde(default)
ja

de eri 0 (false) t r.

Struts ta Tablo Yaratma

Struts ta iterate etiketi tablo yaratmak için kullan l r. A a da basit bir örnek var.
w.

<logic:iterate id="ö renci" name= Ö renciListesi scope="session"


type="hubm.ogrenci.proje.Ö reciListeForm">
<tr>
<td><bean:write name="ö renci" property="ad"
filter="true"/></td>
<td><bean:write name="ö renci" property="soyad"
filter="true"/></td>
ww

<td><bean:write name="ö renci" property="numara"


filter="true"/></td>
<td><bean:write name="ö renci" property="bölümkodu
filter="true"/></td>
</tr>
</logic:iterate>
bean:write etiketinin name niteli i property i form çekirde inde aramak yerine iterate etiketi taraf ndan

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.

Bir Tabloda Onay Dü meleri Kullanma

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

<bean:write name="ö renci" property="soyad" filter="true"/>


</td>
<td>
<bean:write name="ö renci" property="numara" filter="true"/>
</td>
<td> <bean:write name="ö renci" property="bölümkodu
w.

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.

Radyo Dü meleri Tablosu Yaratma


dil
Baz durumlarda a a daki tablo benzeri tablolar yarat lmak istenebilir.
durum
muaf geçti Kald Form eleman
0 * 0 Genel ders durumu
va
* 0 0 Akademik ders durumu

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

yerle tirmektir. Hata mesaj anahtarlar n n bütün referanslar UygulamaKaynaklar .properties


kütü ündeki hata mesajlar ile birebir e le ir.
kincisi ActionError s n f na konan tekil ActionError nesnelerini kimliklendiren anahtarlar için action alt
s n flar nda yerel sabitler yaratmakt r. html:errors etiketinin property niteli i ile e le en anahtar yine
listede dönen bir elemanla e le ecektir.
w.

Sabitlerle ilgili Örnek:


com.ö renci.Sabitler.java kütü ünde:
public static final String VT_HATA= "VTHata";
UygulamaKaynaklar .properties kütü ünde:
VTHata=<li>Hata: {0} çal l rken {1}
JSP kütü ünde:
<html:errors />
ww

Action s n f kütü ünde:


public final String OGRENCI= Ö renci ;
public final String OGRENCI_VT_HATA = Constants.VT_HATA + "." +
OGRENCI;
hatalar.add(OGRENCI_VT_HATA,
new ActionError (Constants.VT_HATA,
ö renci listesi almaya ,
"alan bulunamad "));

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 ,

Hata: ö renci listesi almaya çal l rken alan bulanamad


"alan bulunamad "));

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

Hata Mesajlar için Sayfa Ba l ve Sayfa Altl


w.

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

.Hata: Bu ba ka bir hatad r.


-----------------------------------------------------------------------
JSP sayfas n n geri kalan
E er hatalar n tekil alanlardan sonra görüntülenmesini istiyorsan z sayfa ba l nda ve altl nda herhangi
bir atama yap lmad ndan emin olmal s n z.
m
ActionForm Geçerleme(Validate) ve Resetleme(Reset)
ActionForm tabanl java çekirde inde validate metodu u ekildedir:
public ActionErrors validate(ActionMapping e lem, HttpServletRequest istem)
Bu; kullan c n n girdilerini geçerlemek için ça r l r. Java çekirde i ayr ca a a da görüldü ü gibi bir reset
metodu da belirleyebilir.

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:

Genel Yönleniciler(Global Forwards)


ja

<forward name="JSP için Ad" path="/JSP Ad .jsp"/>


bir örnek: <forward name= AnaSayfa path= /AnaSayfa.jsp />
Bu name i kullanarak kendi jsp nizden di er sayfa ba lant lar na gitmenizi sa lar. E er dizin yolu
de i irse siz de JSP nizde herhangi bir de i iklik yapmaya gerek kalmadan sadece
struts-config.xml kütü ünde de i iklik yaparak halledebilirsiniz .Bunu yapmak için u formu
kullanbilirsiniz:
w.

<html:link forward="genel yönlenicilerde tan ml de er">


görüntülenecek ba lant ad
</html:link>
Bir örnek:
<html:link forward="Kullan c Ekle">
Kullan c eklemek için t kla
ww

</html:link>
Çekirdek Bildirimleri

<form-bean name="Form Ad " type="Çekirde in dizin yolu"/>


Bir örnek:
<form-bean name= Kullan c EkleForm
type= com.ö renci.ActionForms.Kullan c EkleForm />
Kullan c n n girdilerini kabul edecek her JSP sayfan z için bunlardan bir tane olmal d r.

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

path niteli i bu sayfan n yolunu veriyor.


dil
<forward name="basar l " path="/jsp/Kullan c Ekle.jsp"/>
</action>

type niteli i bu action için action s n f na yolunu verir.


input niteli i JSP ye bu action için yolunu verir.
forward niteli i action s n f nda kullan lacak name leri veriyor. Örne in action s n f n zda kullan c n n
girdisine ba l olarak farkl sayfalara gidebilirsiniz. Bunu yukar daki tan ml name leri kullanarak
yapabilirsiniz. Gitmek istedi iniz sayfa ba na bir name tan mlamak yeterlidir. Bu size hedef sayfa
va
de i t i inde struts-config.xml i düzenlemeye olanak verir. E er kullan c girdisi yoksa kendi ba ar l
sayfam za geri döneriz. Action s n f n zda bu name e a a daki gibi ula rs n z:
return mapping.findForward("ba ar l ");
Girdi kabul eden JSP ActionMapping formu:
<action path="bu sayfay ça rmak için kullan lan mant ksal yol"
type="action s n f n yolu" scope="request"
input="actiona ula lmas n sa layan JSP nin yolu"
ja

name= Action formun ad >


<forward name="bir isim" path="/JSP nin yolu"/>
</action>
Bunun bir örne i:
<action path="/Kullan c Ekle"
w.

type="com.ogrenci.Action.Kullan c EkleAction" scope="request"


input="/jsp/Kullan c Ekle.jsp" name= Kullan c EkleForm >
<forward name="ba ar l " path="/jsp/Kullanc Ekle.jsp"/> </action>
Daha önce form çekirdeklerinde belirtilmesi gereken Kullan c EkleFormu nu name niteli i belirler.
Struts ta uygulaman z n her modülü için bir ActionForm çekirde i kullanman z tavsiye edilir.
ww
Not: Örneklerin baz lar mant ksal olarak dü ünüldü ünden okunurlu unun kolay olmas aç s ndan
Türkçe karakterler kullan lm t r.

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

Hacettepe Üniversitesi Bilgisayar Mühendisli i, Harun Re it Zafer, Ocak 2006 22/22

You might also like