Struts’a Giriş I,II,III serisi !

Cansiz

New member
Struts Nedir?



Struts,application geliştirmek için kullanılan MVC mimarisinin bir uygulamasıdır.

Peki MVC nedir?MVC bir applikasyonu Model, View ve Controller olmak üzere componentlere bölme operasyonudur.Modüler olarak applikasyonun bu şekilde componentlere bölünmesi uygulama geliştirmede çok önemlidir.Programcı ile designer’ın işlerini birbirinden ayırmakta, kolaylık ve geliştirilen applikasyon için iş birliğini ve hızı sağlar.



Her componentin kendi iş sahası vardır.



Model işlem mantığını yürüten componenttir.Örneğin; authentication işlemleri, database’le sorgu işlemleri özetle bilgi işlem mantığı Model’in görev sahasındadır.



View kullanıcıya sunulan arayüz componentidir.Bunlar genellikle jsp sayfalarıdır.Örneğin;kullanıcıdan bilgi almak için kullanılan bir Form olabilir.



Controller: Struts yapısında her request bir Action’a karşılık gelir.Controller Model ve View arasında çalışan bir arabirimdir.View’den yapılan her requesti yakalar ve Model’den bilgi işlem mantığını çalıştırıp tekrar View’de jsp için gerekli olan parametreleri üretir ve View Componentine geri iletir.View de bunu alır ve jsp’yi üretip gösterir.



Struts’da en önemli class ActionServlet classıdır.Bu Struts Applicationunun göbeğidir ve Controller Componentine karşılık gelir.



Struts Kurulumu ve gereksinimler



Ön gereksinimler


1-JDK.Tomcat için ve geliştireceğimiz classları derlemek için gerekli.Eğer elinizde bir ide varsa onu da kullanabilirsiniz.Fakat Tomcati çalıştırmak için mutlaka bir JDK lazım.JDK’yı java.sun.com’dan elde edebilirsiniz.Söylemeye gerek yoktur sanırım.

2-Tomcat.Tomcat’i Apache’nin sitesinden indirebilirsiniz. Burdan!

3-Servlet jar’ı bu jar classları derlerken gerekli olacak ve Tomcat ile birlikte gelir.common/lib altında bulabilirsiniz.



Struts’ın kurulumu


Öncelikle Tomcati bulup indirin ,kurun ve çalıştırın.Bunun için bir önceki dersi okumanızı tavsiye ederim.Struts için tekrar www.apache.org adresine giderek indirebilirsiniz.Benim uygulamalarda kullandığım Borland JBuilder’ın thirdparty ile gelen Struts’ı idi ve 1.0 versiyonunu kullandım.



Struts’ı indirdiniz zip’i açtınız. Struts’ı kurmak için yapacağınız sadece şu;



struts-blank.war dosyasını Tomcat’i kurduğunuz klasörde webapps klasörünün altına kopyalayıp yapıştırın,bitti.



struts-blank.war bir arşiv dosyasıdır (jar:java archive files,war:web archive files,ear:enterprise archive files gibi…) ve kullandığınız JSP-Servlet Container’i(Bizimki Tomcat) bu arşiv dosyasını kendisi otomatik açar (extract) ve deploy eder.Bu dosya bizim yeni Struts uygulamaları geliştirmek için oluşturulmuş bir boş Struts applicationudur ve istediğiniz şekilde yeni bir isimlendirme yapıp kopyalamanız mümkündür..Struts ‘ı açtığınız ziple birlikte gelen başka war dosyaları da vardır.Bunlardan struts-documentation ve struts-example dosyalarını da alıp aynı şekilde kopyalayın.İşimiz struts-blank ile olduğu halde bu iki dosya açıldığında birincisi struts için javadoc ve dokümantasyonu sağlar.İkinci dosya ise örnek bir struts uygulaması içeriyor.Bunlarda struts denemeleri yaparken size yararlı olacaktır.



Struts yapısını kurduk fakat bu yapıyı Tomcatin tanıması için (Tomcatten tarayıcıyla yapılan jspleri isteyebilmek için)Tomcatin konfigürasyon dosyasında(conf/server.xml) bir düzenleme yapmalısınız.Bunun için webapps’ın struts-blank klasörü için relative context oluşturun.”path” Attribute değerini “struts-test” olarak atayın(Ben öyle yaptım ve bu şekilde kullandım.).



Not: context oluşturma Tomcat ve Kurulumu dersinde anlatılmıştı.​
Alıntıdır!
 

Cansiz

New member
Struts'a Giriş II

Controller İçin Action Yaratmak


ActionServlet’in applikasyonun Controller kısmına tekabül ettiğini söylemiştik.Yapılan her request bir Action’a karşılık gelir ve yapılan requestlerin hangi Action’a yönlendirileceğine bu class karar verir.İşimiz bu classla ve onun kullanması için bir Action class yaratacağız.Basitçe başka bir jsp’ye yönlendirme yapan bir Action yapacağız.



Action classı org.apache.struts.action paketinde olup extend ederek sub-classlarını oluşturacağız.







import javax.servlet.http.*;

import org.apache.struts.action.*;

import java.io.IOException;

import java.servlet. ServletException;



public class HelloAction extends Action

{

public ActionForward perform(

ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response) throws IOException,ServletException

{

/*Herhangi baska islemler yapılabilir,data base islemleri olabilir.İşlem mantığına göre baska-baska jsp yönlendirmeleri de yapılabilir.*/

return mapping.findForward("hello");

}

}



Struts 1.0’da metod adı perform()’dur.Fakat 1.1 ve 1.2 için bu metodun yerine;



public ActionForward execute(ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)throws Exception



metodu kullanılıyor yukarı Struts versiyonları ile çalışırken dikkat edin.



Class’ı derlemek için Servlet jar’ı ve Struts jar’ı classpath e eklemeyi unutmayın.Borland JBuilder kullanıyorsanız bunları yapmanıza gerek kalmıyor.New dediğinizde gelen diyalog kutusundan web sekmesine tıklayın ve Action class etiketine tıklayın.Yeni bir Action classı template örneğini yaratır.Sonra yukarıdakileri kopya edip derleyin.



Derlenen classları WEB-INF\classes altında tutun.Bu directoryde birde ApplicationResources.properties adında bir başka önemli dosya durur.Bunu sonra anlatacağım.



Struts-config.xml Dosyası




Bu dosya bir xml dosyası olup Struts Controllerının kullandığı konfigürasyonu içerir.Yapılan her action’ın(request’in) sonucunda hangi Action class’ı devreye girecek burada bildirilmelidir.



<action-mappings></action-mappings>



Bu elementin içinde her action’un haritası(rotası)yer alır.Her hangi bir jsp’den yapılan requesting derlediğimiz bu Action’a yönlendirilmesi için;



<action path="/HelloAction" type="HelloAction">

<forward name="hello" path="Hello.jsp"/>

</action>



olarak bir action elementi bloğu tanımlayıp <action-mappings> elementinin altına koyun ve kaydedin.



Burada ‘path’ attributesi yapılan actionun adı

(yani HelloAction.do,kısaca HelloAction),type ise hangi Action classı bu action’u işleyecek belirtilir(yani HelloAction.class,kısaca HelloAction).



İçindeki forward elementi ise işlem mantığından sonra hangi jsp’ye yönlendirilecek onu belirler.Mesela Action classımızda;



return mapping.findForward("hello");



ile “hello” adıyla ilişkilendirilen bir jsp’ye forward ediyor.

Controller bu forward’a karşılık gelen jsp’yi belirler ve View’e iletir.



Hello.jsp


Kurduğumuz bu basit yapıyı çalıştırmak için bir Hello.jsp adında bir jsp yapmamız lazım.İşte jsp’miz;



<%@ page language="java" %>

<%@ taglib uri="/ WEB-INF/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/ WEB-INF/struts-html.tld" prefix="html" %>

<html:html locale="true">

<head>

<title><bean:message key="hello.title"/></title>

<html:base/>

</head>

<body bgcolor="white">

<h3><bean:message key="hello.heading"/></h3>

<p><bean:message key="hello.message"/></p>

</body>

</html:html>



Bu jsp’ye request etmek için struts-blank.war extract edildiğinde gelen index.jsp’den bir link vereceğiz.index.jsp’yi açıp ve içine link ekleyip editleyeceğiz.



Linkimiz şöyle olacak;



<html:link page="/HelloAction.do">İlk Temas</html:link>



görüldüğü üzere index.jsp Tomcat’ten istendiğinde daha sonra <a href=”TestAction.do”>...</a> tagını üretecektir.Bu ilginç tagler Struts ile birlikte gelen Struts Tag Library’nin içindeki taglerdir ve Tag Library ise Struts’ın View componentinin bir parçasıdır.Tag library’e ileride kısa bir giriş yapılacaktır.



Dikkatinizi çekti mi HelloAction.do diye bir yer var linkte?Bu html kodunda <a> tagınada bu şekilde taşınır.Yani jsp’den jsp’ye artık direkt geçiş olmayacak.Struts’ın amacıda bu.Geçişler ve buna benzer operasyonlar Action classı forward edilecek jsp’yi belirleyerek yapacak.



Daha sonra WEB-INF/classes/ApplicationResources.properties dosyasını açın.Bu dosyada bir kaç ekleme yapacağız.



hello.title=Struts 1.0

hello.heading= Selam-ün aleyküm Struts

hello.message=İşte struts karşınızda...Struts Model View ve controller yapısıyla Applicasyon geliştirmede kolaylık sağlayan bir yapıdır...



Satırlarını ekleyin ve kaydedip çıkın.



ApplicationResources.properties



Bu dosya struts-bean.tld’deki taglar tarafından kullanılan bir dosyadır.



Bizim jsp’mizde <title>,<h3> ve <p> taglarında içinde



<bean:message key="hello.title"/>



şeklinde kullanıldı.Burada properties dosyasına kaydettiğiniz key ile bu değerler tag içindeki key attributesinde aynı key ile belirtilerek çağrılır ve basılırlar.Kullanılan bu dosya web.xml dosyasından konfigüre edilir.



Web.xml dosyası

ApplicationResources dosyası



<servlet>

.

.

.

<init-param>

<param-name>application</param-name>

<param-value>ApplicationResources</param-value>

</init-param>

.

.

.

</servlet>




olarak yer alır ve konfigüre edilir.İsterseniz bu dosyayı classes altında klasörlere koyabilirsiniz.Fakat properties dosyasının nerde duracağı konusunda değişiklik yaptığınızda mutlaka burayı konfigüre edip belirtin.



Örn:<param-value>yildiz.test.struts.ApplicationResources </param-value> gibi...



Yada ismini değiştirmeniz ve kendiniz bir isim vermeniz mümkündür.

Verdiğiniz dosya adını da burada aynı şekilde belirtip konfifüre edin.



Yapılan actionların *.do şeklinde olacağını söylemiştim.

İsterseniz yine web.xml’i düzenleyerek istediğiniz türe değiştirmeniz de mümkündür.









<!-- Standard Action Servlet Mapping -->

<servlet-mapping>

<servlet-name>action</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>



elementinde belirtildiği gibi Actionların *.do tipinde olacağı söyleniyor.Bunu;



<!-- Standard Action Servlet Mapping -->

<servlet-mapping>

<servlet-name>action</servlet-name>

<url-pattern>*.yap</url-pattern>

</servlet-mapping>



şeklinde düzenleyebilirsiniz.Daha sonra ise link verirkende yeni şekliyle vereceksiniz.Örn: HelloAction.yap gibi.



Herşeyi hazırladık sıra sadece test etmeye geldi.Önce index.jsp’yi açın. “İlk Temas” Linkine tıklayın.Şöyle bir sayfa gelmeli;

Çok güzel.



Not:Struts’da bir değişiklik yaptığınızda,Örneğin,herhangi bir jsp’ye bişeyler eklemek,config dosyalarıyla oynamak gibi durumlarda zaman-zaman Tomcati restart etmeniz gerekebilir.Çoğu kez ctrl+F5 işe yaramıyor.Hatta bazen work directory’sinin altında tutulan cache’i silmeniz dahi gerekebilir.Çünkü yapılan değişikliği Tomcat algılayamıyor ve bu operasyonlara ihtiyaç duyulabiliyor.Haberiniz olsun.


Alıntıdır!
 

Cansiz

New member
Struts'a Giriş III

Struts İle Form Bilgilerinin Validasyonunu sağlamak​


Şimdiki dersimizde bir login formundan gelen bilgilerin validasyonu yapılacaktır.Basit bir şekilde form alanlarındaki bölgelerin boş olmamasını kontrol eden bir uygulama yapacağız.



ActionForm Class’ı


Bu classlar Struts paketindeki org.apache.struts.action.ActionForm classını extend eden java-bean classlarıdır.



Bu classta formdan gönderilen her property yani değer, aynı String değişkeni ile classta tutulur ve işlenir.Örneğin <input type=text name=”username“> olan bir form elemanının adı ve gönderilen değeri aynı String değişkeni ile ActionForm classımızda temsil edilir.



ActionForm classı daha çok View componentine yakınlık gösterir.Aslında yapılan bir requesti Action’a gitmeden önce ele alan bir firewall gibi düşünülebilir.



Örneğimize geçelim;

Söylendiği gibi ActionForm’da sadece alanların boş olmaması gereken durumda geri yönlendirme yapacak bir uygulama yapacağız.İşte ActionFrom örneğimiz;



import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.*;



public class LoginForm extends ActionForm

{

private String username=null;

private String password=null;



public void setUsername(String username){

this.username=username;

}



public String getUsername(){

return this.username;

}



public void setPassword(String password){

this.password=password;

}



public String getPassword(){

return this.password;

}

public void reset(ActionMapping mapping, HttpServletRequest request) {

this.username=null;

this.password=null;

}



public ActionErrors validate(

ActionMapping mapping, HttpServletRequest request ) {

ActionErrors errors = new ActionErrors();



if( getUsername() == null || getUsername().length() < 1 ) {

errors.add("username",new ActionError("error.username.required"));

}

if( getPassword() == null || getPassword().length() < 1 ) {

errors.add("password",new ActionError("error.password.required"));

}

return errors;

}



}


Classın validate() metodu sayesinde gelen requesti işliyoruz.<action-mappings> de Action’a gitmeden önce gelen request’ten username ve password değerleri alınır ve classtaki değişkenlerine atanır.validate() metoduyla birlikte üretilen hatalar varsa geri döndürülür.Hataları bir Hashmap’te tutan class ActionErrors classıdır.

Classa bir error eklemek için add() metodu kullanılır.Daha sonra da bir ActionError classı örneği yaratılır ve konur.ActionError classı kurucuda bir String alır bu String oluşan hatanın ApplicationResources dosyasında hangi key ile tutulduğunu belirten bir String’dir.Örnekte “error.username.required” ve “error.password.required” adlı iki key ile tanımlanacak değerde tutulacaktır hatalar.



Şimdi sıra ApplicationResources dosyasında ve bu keyler ile alınacak olan değerleri yaratmada.

ApplicationResources dosyasını açın ve şu satırları ekleyin, kaydedin, çıkın;



errors.header=<h3><font color="red">Validasyon Hataları</font></h3>Önce,aşağıdaki hataları doğrulayınız...<ul>

errors.footer=</ul><hr>


error.username.required=<li>Kullanıcı adı girilmemiş...</li>

error.password.required=<li>Şifre girilmemiş...</li>



Burada ilk iki key “errors.header” ve “errors.footer” görülmektedir. Bunlar Hata başlığı ve hata sonu keyleridir.



Sonraki iki satırda ise bunlar bizim boş gönderilen durumda oluşturulacak hata mesajlarımız.Bu iki key aynı zamanda ActionError clasının kullandığı key ve değerlerdir.



Sırada Login.jsp’nin hazırlanmasında işte Login.jsp;





<%@ taglib uri="/tags/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/tags/struts-html.tld" prefix="html" %>



<html:html locale="true">



<head>



<title><bean:message key="login.title"/></title>



<html:base/>



</head>



<body bgcolor="white">



<html:form action="/Login">



<html:errors/>



<table>



<tr>



<td align="center" colspan="2">

<font size="4">Kullanıcı Girişi</font>

</tr>

<tr>

<td align="right">

Kullanıcı Adı

</td>

<td align="left">

<html:text property="username" size="30" maxlength="30"/>

</td>

</tr>

<tr>

<td align="right">

Şifre

</td>

<td align="left">

<html:text property="password" size="30" maxlength="30"/>

</td>

</tr>

<tr>

<td align="right">

<html:submit>Login</html:submit>

</td>

<td>

<html:reset>Temizle</html:reset>

</td>

</tr>

</table>

</html:form>

</body>

</html:html>




Login.jsp’miz hazır.from elementinde gördüğünüz üzere Login diye bir action’a gidecek bu form.



Şimdide LoginAction classımızı yaratalım.



Bu class yine basit olarak hiç bişey yapmadan sadece success.jsp’ye yönlendiriyor.request bu class tarafından işlenmeden ActionForm’ca işlendiğini unutmayın.



İşte classımız;





import javax.servlet.http.*;

import org.apache.struts.action.*;

import java.io.IOException;

import java.servlet.ServletException;



public class LoginAction extends Action

{

public ActionForward perform(

ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws IOException, ServletException{

return mapping.findForward("success");

}

}



Class görüldüğü üzere success.jsp’ye forward ediyor.Bunun için success.jsp’miz ;





<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>



<html:html locale="true">



<head>



<title>Giriş başarılı<title>



<html:base/>



</head>



<body bgcolor="white">



<font color=”red”>Girdiniz!!!</font>

</body>

</html:html>


şeklindedir.

En sonunda sıra struts-config dosyamızı düzenlemeye geldi.Dosyayı açın.

<action- mappings>’e bir action haritalaması yapmamız lazım.



Elementin içine şöyle yazın;



<action

path="/Login"

type="LoginAction"

name="LoginForm"

scope="request"

validate="true"

input="/Login.jsp">

<forward name="success" path="/success.jsp"/>

</action>

yaratılan actionu haritaladık.Birde bir form-bean kullanılıyorsa onu da eklemeliyiz.Bizim applikasyonda kullanılan bir de LoginForm bean’imiz vardı.Bunun için yine struts-config.xml’de <form-beans> elementine ekleme yapacağız. Elementi bulup içine;



<form-bean name="LoginForm" type="LoginForm"/>



Şeklinde ekleme yapın ve kaydedip çıkın.Ufak bir detay daha kaldı;Login.jsp’de <title> elementi içinde kullanılan <bean:message> elementi ‘login.title’ key’i ile ApplicationResources dosyasından bir değer kullanmaktadır.Bu değeri de dosyaya ekleyin mesela;



login.title=Kullanıcı adı ve şifre giriniz.



gibi… sonra kaydedin ve çıkın.

Sonra Login.jsp’yi index.jsp’de vereceğiniz bir linkle çağırın yada browserden kendiniz girerek çağırın.


Bir alanın boş bırakılması durumunda aşağıdaki gibi bir sonuç elde edeceksiniz




Tüm alanlar doldurulduğunda yönlendirilmiş (girmiş) olacaksınız.

AlıntıdıR!!
 

makine04

New member
devam et cansiz kim tutar seni...
 

HTML

Üst