Struts 2 MVC yapısını daha iyi anlayabilmek için gerçek bir struts 2 web projesi yapmamız gerekmektedir. Bunun içinde Login Form örneğini yapmaya çalışalım. Daha önceki yazılarımda da belirttiğim üzere eclipse üzerinde geliştirme yapacağız ve eclipse de yeni bir web projesi yaratmak gerçekten çok kolay. İlk olarak eclipse imizi açıyoruz ve File->New->Project işlemlerini gerçekleştiriyoruz karşımıza aşağıdaki wizard seçme ekranı gelecektir. Burdan da Web->Dynamic Web Project seçeneğini seçiyor Next e basıyoruz.

Daha sonra karşımıza çıkacak olan “New Dynamic Web Project” ekranında proje adını yazıyoruz. Ben proje adını LoginForm yaptım siz istediğinizi yazabilirsiniz. Aşağıdaki ekran da da göreceğiniz üzere, bir alt seçenek olan Target Runtime filter ı var. Eğer daha önceden “Target Runtime” belirlenmiş ise, burası default olarak seçili gelir. Daha önceki yazımda da belirttiğim üzere bizim Target Runtime mımız Apache Tomcat 6.0. Evet devam edelim yani Next…
Daha sonra karşımıza Web Module ekranı çıkıyor burda da aşağıdaki ekran da gelen düzenlemeleri yaptıktan sonra projemizi sonlandırmak için Finish diyoruz.
Artık belli bir dizin yapısına sahip yeni bir web projesi oluşturmuş bulunmaktayız. Bir sonraki işimiz, struts 2 yi, oluşturduğumuz web projesine entegre etme işlemidir. Struts 2 İlk Uygulama başlıklı yazımda belirttiğim gibi, Apache Struts 2 sayfasından struts 2 kütüphanesini indiriyoruz.
İndirilen sıkıştırılmış dosyayı açıyoruz ve ilk işlem olarak indirdiğimiz kütüphanenin WEB-INF dizini altındaki lib dizinini kopyalıyoruz ve kendi projemizde yer alan WebContent /WEB-INF dizini altındaki lib dizininin üzerine yapıştırıyoruz. Böylece struts 2 jar dosylarını almış olduk.
Şimdide yine WebContent/WEB-INF dizini altında yer alan web.xml dosyasını kullanarak projemize struts 2 kullanacağımızı söylememiz gerekiyor.
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts Blank</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
Evet artık elimizde struts 2 tanıtılmış bir web projesi bulunmaktadır.
Şimdi struts 2 ile Login Form yapımına başlayabiliriz. İlk olarak kullanıcıdan gelen istekler doğrultusunda trafik polisi görevi gören struts.xml dosyasını oluşturalım. struts.xml dosyamızı web projemizde src dizini altında oluşturmalıyız. İçeriğine gelince;
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="LoginForm" namespace="/" extends="struts-default">
<!--
action tanımlamamızı yapıyoruz. "name" alanındaki Login_* demek, URL den
http://localhost:8080/LoginForm/Login_showLogin.action olarak çağırabiliriz
anlamına gelir. "class" alanına da bizim src dizini altında yer
action class a ait yolu belirtir
-->
<action name="Login_*" method="{1}" class="net.gokhansabir.login.Login">
<!-- URL den gelene git -->
<result name="input">/jsp/login/Login.jsp</result>
<!-- Eğer dönen değer SUCCESS se tekrar login sayfasını göster -->
<result name="SUCCESS">/jsp/login/Login.jsp</result>
<!--Eğer dönen değer LOGGEDIN ise içeri gir -->
<result name="LOGGEDIN">/jsp/success/Success.jsp</result>
<!-- Eğer bilgileri yalnışsa Hata ver -->
<result name="ERROR">/jsp/login/Login.jsp</result>
</action>
</package>
</struts>
Yukarıdaki struts.xml dende anlaşılacağı üzere, WebContent dizini altına jsp dizini açıyoruz ve onlarında altına, login ve success dizinleri açıyoruz. Bu dizinleri açmak zorunda değilsiniz,fakat projenizin düzenli olması açısından dizin yapınızı böyle yapmanız uygun olacaktır. login dizini altına Login.jsp yi oluşturuyoruz, içeriği aşağıdaki gibi olacak;
<%@ page contentType="text/html; charset=UTF-8" %>
<!--
struts taglarını kullanmak istiyorsanız bunu yapmanız gerekmektedir.
pfrefix alanına istediğiniz değeri verebilirsiniz.
Fakat struts ın s si genel kullanım şeklidir.
-->
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Struts 2 Login Form Example</title>
</head>
<body>
<!--
form submit edildiğinde Login action ın showLogin methodu çalışacaktır.
-->
<s:form action="Login_showLogin" >
<!--
Eğer kullanıcı adı veya şifre yalnış ise,
Login classın da yer alan doLogin methodunda
kullandığımız addActionError() fonksiyonu içerisindeki
string ekrana yazılacaktır.
-->
<s:actionerror/>
<table>
<tr>
<td><s:text name="Kullanıcı Adı" /> </td>
<td><s:textfield name="username" /></td>
</tr>
<tr>
<td><s:text name="Şifre" /></td>
<td><s:password name="password"/></td>
</tr>
<tr>
<td colspan="2">
<s:submit key="Gönder" action="Login_doLogin" />
</td>
</tr>
</table>
</s:form>
</body>
</html>
Evet Login.jsp mizde hazırladık. Birde eğer kullanıcı adı ve şifre doğru ise yönleneceği sayfa var onunda dosya ismi Success.jsp çünkü struts.xml de bu şekilde belirledik. Bunuda daha önceden açmış olduğumuz success dizini altına oluşturuyoruz. İçerisine sadece “Girişi Başarılı…” yazın. Success.jsp şimdilik bu kadar olsun.
Artık Login.java yı oluşturabiliriz. Login.java’ yıda, src dizini altında “net” isimli bir dizin açıyoruz bu dizinin de altına, “gokhansabir” diye bir dizin açıyoruz, bununda altına “login” diye bir dizin açıp, bunun içerisine Login.java dosyasını oluşturuyoruz.( src/net/gokhansabir/login/ şeklinde olacak. ) Dizin yapısını böyle yapmanız şart değil, fakat dizini değiştirdiğinizde, struts.xml ide derlemeniz gerekecektir. Çünkü ben struts.xml i bu dizin yapısına göre şekillendirdim.
package net.gokhansabir.login;
import com.opensymphony.xwork2.ActionSupport;
public class Login extends ActionSupport{
public String showLogin() throws Exception {
return net.gokhansabir.util.Constant.SUCCESS;
}
public String showErorr() throws Exception {
return net.gokhansabir.util.Constant.ERROR;
}
public String showEnter() throws Exception {
return net.gokhansabir.util.Constant.LOGGEDIN;
}
public String execute() throws Exception {
return showLogin();
}
public String doLogin(){
if(getUsername().trim().equals("gokhan")
&& getPassword().equals("123456"))
return net.gokhansabir.util.Constant.LOGGEDIN;
else{
addActionError("Usename or password doesn't match!!!");
return net.gokhansabir.util.Constant.ERROR;
}
}
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Yukarıdaki kodda da gördüğünüz üzere belli başlı constant değerlerimiz var bunlarıda ayıralım ve gokhansabir dizini altına “util” isimli yeni bir dizin açalım. Burayada Constant.java sayfasını oluşturalım. İçeriğide;
package net.gokhansabir.util;
public class Constant {
public final static String SUCCESS = "SUCCESS";
public final static String ERROR = "ERROR";
public final static String LOGGEDIN= "LOGGEDIN";
}
Yukarıdaki Constant class ında da canstant değerlerimizi tamamladık. Şimdi son işlemimize gelebiliriz artık, index.html dosyasında, adres çubuğuna http://localhost:8080/LoginForm/ yazıldığı zaman otomatil Login_showLogin.action ın çalışması için, bazı düzenlemeler yapmamız gerekiyor. index.html in içeriği aşağıdaki gibi olmalıdır;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <META HTTP-EQUIV="Refresh" CONTENT="0;URL=/LoginForm/Login_showLogin.action"> </head> <body> <p>Loading ...</p> </body> </html>
Artık LoginForm örneğimizi çalıştırabiliriz. Bildiğiniz üzere url den çağırmadan önce Eclips de Tomcat üzerinde start etmeliyiz. Bu işlem içinde, Struts 2 İlk Uygulama yazımı okuyabilirsiniz.




Nice post u have here
Added to my RSS reader
@RYErnest
thank u…
Teşekkürler gökhan bey.
Anlatımınız için teşekkürler
Mustafa Çelikbilek?
Hani şu kadınhanı myo 2002 mezunu olan mı?
=)
neyse yine de teşekkür edelim..
kardeşim gerçekten yararlı bir çalışma olmuş, internetteki birçok örnek çalışmıyor ve boşuna vakit kaybı, senin çalışmaların ve örneklerin ile struts2 de çok yol katettim teşekkür ederim. başarılar.
gökhan bey birşey soracaktım,
bu login form örneğindeki index.html sayfasındaki satırını kaldırsak bile sistem aynen çalışmaya ve login form görüntülenmeye devam ediyor. Yani bu satırı silmemiz hiçbirşeyi değiştirmiyor. Peki bu nasıl oluyor. index.html karşılama sayfamız, ve bu sayfadan hiçbir action çağırmadığımız halde Login.java nın actionu çağrılmış gibi struts tarafından login.jsp sayfasına yönlendiriliyoruz.
@cem
hangi satırı kaldırıyorsunuz ve url den sayfayı nasıl çağırıyorsunuz?
Merhaba,
Yaziniz icin tesekkur ederim. Cok iyi bir calisma olmus.
Eger vaktiniz varsa search-metodu örnegi verebilir misiniz? Hibernate ile kurulmus bir book database ve search book mesela.
Tesekkur ederim.
@aysen aslında epeydir yazmak istiyordum bu hafta içerisinde yazar sanada mail atarım.
tesekkur ederim:-)
/Aysen