Apache Struts
Apache Struts, Java tabanlı web uygulamalarında MVC (Model-View-Controller) mimarisini kullanarak veri akışını yöneten bir framework’tür.
- Model: İş mantığını ve veritabanı işlemlerini içerir. Genellikle JavaBeans veya POJO sınıfları (Plain Old Java Objects) veya Hibernate ya da JPA gibi ORM araçlarıyla veri tabanı erişimi sağlanır.
- View: JSP veya başka UI teknolojileri ile kullanıcıya gösterilecek sayfaları temsil eder. Struts, genellikle JSP (JavaServer Pages), HTML + JavaScript + CSS ya da JSTL (JavaServer Pages Standard Tag Library) ile etkileşimli sayfaları kullanır.
- Controller (Struts Action): Kullanıcıdan gelen HTTP isteklerini yöneten katmandır. Model ile etkileşime girer ve View’a sonucu iletir. Struts’ta Controller görevi Action sınıfları tarafından gerçekleştirilir.
Struts, Action-based (Aksiyon Tabanlı) bir framework olarak, HTTP isteklerini yönetmek, yönlendirmek ve işlemek için güçlü bir altyapı sunar. Struts, özellikle büyük ölçekli kurumsal uygulamalarda tercih edilen bir yapıdır.
Apache Struts’ın Mimarisi
1.İlk İstek ve Filtre Zinciri
- Kullanıcı bir istekte bulunur (örn.
/login.action). - İstek Servlet Container (Tomcat, Jetty, vb.) üzerinden geçer.
- FilterDispatcher çalışır ve isteğin bir Action olup olmadığını belirler.
- ActionContextCleanUp filtresi varsa, SiteMesh gibi eklentilere yardımcı olur.
2.Action Çağrısı
- ActionMapper, isteğin bir Action çağrısı olup olmadığına karar verir.
- Eğer Action çağrılacaksa, FilterDispatcher, kontrolü ActionProxy’ye devreder.
3.ActionProxy ve Konfigürasyon
- ActionProxy,
struts.xmldosyasından ilgili Action ile ilgili bilgileri alır. - ActionInvocation nesnesi oluşturulur.
4.Interceptor’lerin Çalışması (Before Clause)
- Action çağrılmadan önce, Interceptor’ler devreye girer (örneğin, yetkilendirme, loglama, veri doğrulama vb.).
5.Action’ın Çalıştırılması
- İlgili Action sınıfı çağrılır ve iş mantığı çalıştırılır.
6.Sonuç (Result) ve Görüntüleme
struts.xmliçinde tanımlanan dönüş koduna göre, JSP veya FreeMarker gibi bir görünüm motoru çalıştırılır.- Struts 2, JSP’ler için özel etiketler (tags) sunar. Bu etiketler sayesinde, sayfa içeriğini dinamik olarak yönetebilir ve backend verileriyle kolayca entegre edilebilir.
7.Interceptor’lerin Çalışması (After Clause)
- Yanıt döndürülmeden önce, Interceptor’ler tekrar çalıştırılır (örneğin, temizleme işlemleri).
8.Yanıtın Kullanıcıya Ulaştırılması
- Sonuç web.xml’de tanımlanan filtrelerden geçer ve istemciye döndürülür.
Tabii bu yapı Struts 2 frameworkünün temel akışıdır. Struts 2, daha esnek, test edilebilir ve modern bir framework’tür; Spring, Hibernate, Ajax gibi teknolojilerle daha kolay entegre olur. Struts 1, eski ve servlet bağımlı olduğu için günümüzde daha az tercih edilmektedir.
Get Bilana Altay’s stories in your inbox
Join Medium for free to get updates from this writer.
Apache Struts 1 vs Struts 2 Temel Farklar şu şekildedir:
Gelin bir örnek üzerinden Struts 1 yapısını da inceleyelim.
Kullanıcı bir istekte bulunur: URL Yapısı ve Route Yönetimi
Örnek URL: http://localhost:8080/listAction.do?list_id=1064690&time=1742451709193
- listAction.do → Bu, Struts tarafından yönlendirilen bir Action (işlem). .do uzantısı, Struts’un klasik URL yönlendirme formatıdır. Kullanıcı /listAction.do isteğini gönderir. struts-config.xml içinde bu path’e karşılık gelen Action sınıfı çağrılır.
.do Uzantısı Nereden Geliyor?
Web.xml dosyasında aşağıdaki gibi bir Servlet Mapping yapılmış olmalıdır.
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>Yukarıdaki yapı, web.xml dosyasında tüm *.do uzantılı URL'leri Struts’un yönlendirdiğini gösterir. Yani bir kullanıcı listAction.do çağrısı yaptığında, bu istek otomatik olarak Struts Action sınıflarına yönlendirilir. Dolayısıyla /listAction olarak belirtilecek olan path, istemci tarafından /listAction.do şeklinde çağrılmalıdır.
Struts Konfigürasyonu (struts-config.xml)
Bu dosya, Struts framework’ünün nasıl çalışacağını belirleyen ana konfigürasyon dosyasıdır.
<form-bean name="Form üzerinden gelen verileri taşıyan bir Java sınıfı" type="Formun temsil ettiği Java sınıfı"></form-bean>Action Sınıfı (Controller Katmanı)
Action Mapping mekanizması; (<action-mappings>) Struts 1.x mimarisinde yaygın olarak kullanılan bir yapılandırmadır. Her action, bir kullanıcının talebini nasıl yönlendireceğimizi belirler.
<action path="/listAction"
type="com.example.ListAction">
<forward name="success" path="/list.jsp" />
</action>- path=”/listAction” → Kullanıcı, /listAction.do şeklinde bir HTTP isteği gönderdiğinde, Struts framework’ü bu isteği karşılar.
- type=”com.example.ListAction” → ListAction sınıfı çağrılır ve bu sınıf isteği işler. (com.example.ListAction, org.apache.struts.action.Action sınıfından türemelidir.)
<forward name="success" path="/list.jsp" />→ Eğer ListAction başarılı bir işlem gerçekleştirirse, success adlı yönlendirme çalışır ve kullanıcı /list.jsp sayfasına yönlendirilir.
Eğer ListAction başarısız olursa farklı bir sayfaya yönlendirmek için ek <forward> tanımları yapılabilir:
<forward name="error" path="/error.jsp" />Böylece, işlem başarısız olduğunda kullanıcı /error.jsp sayfasına yönlendirilir.
Struts’ta Controller İşlevini Gösteren Action Sınıfı
Action sınıfı, org.apache.struts.action.Action sınıfını genişletir. Örneğin, yukarıdaki /listAction isteğini yöneten sınıf şu şekilde olabilir:
package example.package;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import java.util.List;
public class ListeAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping,
HttpServletRequest request,
HttpServletResponse response) {
// Parametreyi al
String listId = request.getParameter("list_id");
// Parametre boşsa hata sayfasına yönlendir
if (listId == null || listId.isEmpty()) {
return mapping.findForward("error");
}
// İş mantığı (Veritabanı sorgusu vb.)
List<Sirket> sirketler = sirketService.getSirketlerByMusteriId(listId);
// Veriyi request nesnesine ekle
request.setAttribute("sirketListesi", sirketler);
return mapping.findForward("success"); // success => /list.jsp
}
}View (JSP) Katmanı
İlgili JSP dosyası WEB-INF/isletmedefteri/listSirket.jsp olabilir:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
<head>
<title>Şirket Listesi</title>
</head>
<body>
<h2>Şirketler</h2>
<ul>
<c:forEach var="sirket" items="${sirketListesi}">
<li>${sirket.adi} - ${sirket.sektor}</li>
</c:forEach>
</ul>
</body>
</html>Özetle, bu yazıda, Apache Struts’ın genel mimarisini ele aldık ve Struts 1 yapısını örneklendirdik. Struts, Java ile MVC tabanlı web uygulamaları geliştirmek için kullanılan bir framework olup, Controller (Action Sınıfları) gelen istekleri işleyerek ilgili View (JSP) sayfasına yönlendirir. XML tabanlı yönlendirme sayesinde URL’lerin hangi sınıfa gideceği struts-config.xml içinde tanımlanarak modüler bir yapı sağlanır.
Apache Struts, özellikle büyük ölçekli Java projelerinde güçlü bir seçenek olmaya devam ediyor. Eğer modern bir Struts projesi geliştirmek istiyorsanız, Struts 2’nin sunduğu yenilikleri göz önünde bulundurmalısınız. Ayrıca, Spring Boot gibi alternatif framework’lerle karşılaştırarak ihtiyaçlarınıza en uygun çözümü belirleyebilirsiniz.









