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.
- Kod:
-
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-INFclasses 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.
- Kod:
-
<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;
- Kod:
-
<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;
- Kod:
-
<%@ 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ı
- Kod:
-
<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.
- Kod:
-
<!-- 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;
- Kod:
-
<!-- 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.