Halil AĞIN

projelerim‎ > ‎Struts2 Dokumanlar‎ > ‎

Struts2'de Session Scope Örneği



Açıklama

,
Struts 2'de Session Scope uygulaması geliştirmek Request Scope uygulaması geliştirmek kadar kolaydır.

Eğer bir Struts 2 Action sınıfında session scope alanı kullanmak istiyorsanız, Action Sınıfınızın aşağıdaki SessionAware "interface" 'ini uygulaması (implement) etmesi gerekmektedir.

org.apache.struts2.interceptor.SessionAware

Yukarıdaki Interface sınıfını uygulayan Action Sınıfı aşağıdaki metodu da uygulamak zorundadır.


public void setSession(Map<String, Object> arg0) {
        /*   örnek SessionAware metodu     */
    }

Aşağıdaki örnek kod, Session Scope'u kullanan LoginAction sınıfını tarif etmektedir. SessionAware sınıfının implement edildiğine dikkat ediniz.

package tr.com.struts2sample.action.login;

import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport implements SessionAware{

    Map<String, Object> session;
   
    public String execute(){
        return "SUCCESS";
    }

    @Override
    public void setSession(Map<String, Object> arg0) {
        this.ssession = arg0;
    }
}

Yukarıdaki Struts 2 Action sınıfı sahip olduğu session yerel değişkeni sayesinde HTTP Session Scope alanına ulaşabilecektir. session değişkeni, görüldüğü gibi bir java.util.Map türünde bir değişkendir ve Map sınıfının tüm fonksiyonalitesini içerisinde barındırmaktadır. setSession metodu Struts 2 mimarisinde yer alan SessionAware Interceptor'u sayesinde, LoginAction sınıfı yaratıldığında otomatik olarak çalışacak olan bir metoddur. Yani geliştiricinin setSession metodunu herhangi bir zamanda herhangi bir amaç ile çağırmasına gerek yoktur. Bu metod otomatik olarak LoginAction sınıfı yaratıldığında çağırılacağından dolayı bu metod için geliştiricinin yapacağı başka hiç bir işlem yoktur.

setSession metodu, çalıştığında kendisine parametre olarak ulaşan HTTP Session alanını (yani metod parametresindeki arg0 parametresini), yerel değişken olan session  değişkenine atar. Böylelikle, LoginAction'daki herhangi bir metod, session yerel değişkeni sayesinde HTTP Session Scope alanını manipüle edebilir.


Örnek


Aşağıda, küçük bir  Session Scope örneği mevcuttur. LoginAction sınıfındaki execute metodu içersinde session.put yardımı ile HTTP Session Scope alanına bir "hosgeldin" değişkeni konulmaktadır. Bu "hosgeldin" değişkeni, LoginAction execute metodu çağrıldığında HTTP Session Scope alanına yerleştirilmektedir ve ardından execute metodunun çağırdığı JSP sayfasında bu değişken kullanılmaktadır.

LoginAction Sınıfı İçeriği:

package tr.com.struts2sample.action.login;

import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport implements SessionAware{

    Map<String, Object> session;
   
    public String execute(){
        request.put("hosgeldin","Login Ekranına Hoşgeldiniz. Giriş Yapmak için kimlik bilgilerinizi lütfen giriniz.");
        return "SUCCESS";
    }

    @Override
    public void setSession(Map<String, Object> arg0) {
        this.session = arg0;
    }
}



Login.jsp Sayfası İçeriği:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>

<html>
<head>
<title>Struts2 Sample Application</title>
</head>
<body>

<s:form action="Kaydet">
    <table>
<tr>
            <td colspan="2" >  <s:property   value="#session.hosgeldin" />  </td>
       
        </tr>
               
<tr>
            <td>Adı</td>
            <td><s:textfield name="ad" /></td>
        </tr>
        <tr>
            <td>Soyadı</td>
            <td><s:textfield name="soyad" /></td>
        </tr>
        <tr>
            <td colspan="2"><s:submit name="Ekle" /></td>
        </tr>
    </table>
</s:form>
</body>
</html>


Yukarıdaki içşemler yapılıp, http://localhost:8080/SimpleStruts2Application/Login.action adresi çağrıldığında aşağıdaki gibi bir ekran görmelisiniz.

 




Burada dikkatinizi çeken şey jsp sayfasındaki "<s:property/>"  tag'i olabilir. Bu tag, request, session, application scope alanındaki değişkenlere ulaşmanızı sağlar. Bu tag'e ileride tekrar değineceğiz. Ama kullanımı çok kolay, yukarıdaki jsp örneğine bakıp nasıl kulanıldığını anlayabilirsiniz.