Struts projesi Jakarta grubu tarafından Java Server Pages ve Java Servlet tabanlı web uygulamalarının belli bir kalıba (MVC-2) uygun olarak geliştirilmesini kolaylaştırmak için oluşturulmuştur. Struts sistemi web sayfası tasarımcısının tasarıma, yazılım geliştiricisinin ise iş mantığına odaklanmasına olanak sağlar.
Bildiğimiz gibi Java Servlet teknolojisi geliştirilerek Java programlama dili ile sunucu (server) taraflı web uygulaması geliştirmenin temelleri atılmıştır. Servlet teknolojisi, Java sınıflarından oluştuğu için istemciden gelen istekleri Java servlet sınıflarına yönlendirecek bir Servlet kabına (Container) ihtiyaç duymaktadır (bkz Şekil-1). En çok kullanılan Servlet kapları Apache Tomcat, Websphere v.b.
Şekil 1 - Servlet uygulaması
Gelen isteğe göre istemciye gönderilecek cevap (HTML etiketleri ?) servlet sınıfı içinde oluşturulmaktadır. Cevap olarak gönderilen HTML etiketlerinde (HTML tag) değişiklik yapmak istediğimizde Servlet sınıfı içinde değişiklik yapıp derlememiz gerekir. Bu da uygulama esnekliğinin kaybolmasına, tasarımcının Java kodlarıyla uğraşmasına neden olur.
Servlet ile web uygulaması geliştirmedeki zorluğu ortadan kaldırmak için daha sonraları Java Server Pages (JSP) teknolojisi geliştirildi. JSP teknolojisinin temelini, XML / HTML etiketlerinden ve bunların aralarına script olarak konulan Java kodlarından oluşan jsp uzantılı dosyalar oluşturmaktadır. Tomcat gibi kaplar tarafından web uygulaması yüklenirken jsp uzantılı dosyalar arka tarafta Servlet sınıflarına dönüştürülüp derlenmektedir. (bkz Şekil-2)
Şekil 2 - JSP uygulaması
JSP teknolojisi geliştirilmesi ile Servlet teknolojisindeki sorunların kalkmasına rağmen yeni sorunlar ortaya çıkmıştır. Özellikle uygulama geliştirme (development) aşamasından önce herhangi bir tasarım, modelleme gibi yazılım geliştirme aşamalarının uygulanmadığı projelerde iş mantığının tamamı veya bir kısmı Java kodu olarak jsp sayfalarına gömülmektedir. Üstelik aynı işi yapan ama farklı sonuç gösteren jsp sayfalarında ise Java kodları kopyalanmaktadır. Böylece kod tekrarları oluşmakta, jsp sayfalarının yönetimi zorlaşmakta, kod güvenliği ortadan kalkmaktadır.
Web tabanlı projelerde karşılaşılan bu tür sorunları ortadan kaldırmak için MVC (Model View Controller) tasarım kalıbına uyularak bir çok sistem yaratılmıştır : Barracuda, Expresso, Maverick v.b. Struts projesinde MVC-2 tasarım kalıbı kullanılmıştır. Yani istemci tarafından gelen istekler ilk olarak Yönetici Servlet (Controller Servlet) tarafından karşılanmakta ve Java Bean'e, JSP sayfasına yada Servlet'e yönlendirilmektedir.
2. Struts'ı Neden Kullanmalıyım
Struts ile;
JSP sayfalarında bulunan Java kodları en aza inmekte
Kullanıcı arayüzünde (JSP) iş mantığını barındıran kodların bulunması engellenmekte
Arayüz tasarımcısının tasarıma yoğunlaşması sağlanmakta
Web tabanlı uygulamanın olay akışının tek bir XML dosyası (struts-config.xml) üzerinden kontrolü sağlanmakta
Yaygın olarak kullanılan form kontrolleri (e-posta adresi, boşluk, sayı, karakter kontrolleri v.b. ) tanımlanmış olarak gelmekte
Form kontrolleri sunucu (Java) veya istemci (JavaScript) tarafında kullanılabilmekte
Birden fazla dili destekleyen uygulamalarda kullanıcı arayüzünde gösterilen mesaj ve etiketlerin yönetimi properties dosyalarından yapılmakta (id8n)
UTF - 8 kodlamasına (Internalization) destek verilmektedir
3. Tomcat ve Struts Kurulumu
Struts kurulumunu Tomcat sunucusu üzerinde yapacağız. Bunun için sistemimizde Tomcat sunucusunu kurup çalışır hale getirmemiz gerekir. Tomcat sunucusunu ve Struts paketini http://jakarta.apache.org adresinden indirebilirsiniz.
Genel olarak web uygulamalarımızı Tomcat kurulum dizini altındaki webapps klasöründe oluştururuz. Yine bu dizin altında struts_ornek_1 adında yeni bir dizin oluşturalım. Yapacağımız ilk struts uygulamasını struts_ornek_1 klasörü altında oluşturacağız (bkz Şekil-3)
Şekil 3 - Örnek web uygulaması dizin yapısı
Struts paketi içinde lib dizini altındaki jar uzantılı dosyaları struts_ornek_1\WEB-INF\lib dizini altına kopyalayalım. Bu dizin struts_ornek_1 uygulaması tarafından kullanılacak paketleri içerir. (bkz Şekil-4)
Yine Struts paketi içindeki lib dizininde bulunan tld ve xml uzantılı dosyaları struts_ornek_1\WEB-INF dizini altına koplayalım (bkz Şekil-4). tld uzantılı dosyalar Özel Etiketlerin (Costum Tag) tanımlamalarını içerir. Kopyaladığımız tld dosyaları jsp sayfalarında kullanacağımız Struts Özel Etiketlerinin tanımlamalarını içerir.
Şekil 4 - Gerekli paketler ve dosyalar
Validator-rules.xml dosyasında genel olarak kullanılan form kontrollerinin JavaScript tanımlamaları bulunmaktadır.
Gerekli dosyaları kopyaladıktan sonra web.xml ve struts-config.xml konfigurasyon dosyalarını WEB-INF dizini altında oluşturalım. web.xml dosyası uygulamaya ait Tomcat ayarlarını, struts-config.xml ise Struts ayarlarını içerecektir.
4. web.xml Dosyasının Oluşturulması
<?xml version = '1.0' encoding = 'windows-1254'?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<description>Empty web.xml file for Web Application</description>
<servlet>
1. <servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
2. <param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
3. <servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
4. <servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
5.
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
</web-app>
1. bölümde uygulamada hangi Servlet sınıfının sistem tarafından kullanılacağı belirtiliyor. Tanımlanan Servlet sınıfı Yönetici Servlet (Controller Servlet) olarak kullanılacaktır. web.xml dosyası tanımlanmamış normal bir web uygulaması için Tomcat_Kurulum_Dizini\conf\web.xml dosyası içindeki Servlet tanımları kullanılır.
2. bölümde Servlet sınıfı için gerekli olan konfigurasyon dosyası tanımlanıyor. Yönetici Servlet oluşturulurken bu dosya içindeki bilgiler de yüklenmektedir.
3. ve 4. bölümlerde *.do ve /servlet/* uzantılı URL lerden gelen isteklerin 1. bölümde tanımlanan Servlet sınıfına yönlendirilmesini sağlayan tanımlar yapılmaktadır.
5. bölümde ise uygulama içinde kullanılacak özel etiketlerin tanımları için kısa yollar tanımlanmaktadır.
Aslında Struts sisteminin kurulumu için yapılması gerekenler bu kadar diyebiliriz. Bundan sonraki aşamalarda artık projeye yönelik yapılması gerekenler olacak. Bu aşamalar:
struts-config.xml dosyasının oluşturulması
Action ve ActionForm sınıflarının oluşturulması
JSP sayfalarının yazılması
Oluşturulan sınıflar ve JSP sayfaları arasındaki ilişkilerin struts-config.xml dosyasında tanımlanması