Servlet & JSP – 14 – Session – 01

Merhaba Arkadaslar,
Bu bolumde Session , Session ID kavramlarindan bahsedecegim ve basit bir uygulama yapacagiz.

Session

Bir Java Web uygulamasi normal sartlarda bir cok istemci/client ile iletisim halinde olacaktir. Surekli bir istek/cevap(request/response) durumu olacaktir. Bu Web uygulamamiz, her kullanicinin transaction(islem) gecmisini bilmek isteyecektir.

Hatirlayacagimiz gibi HTTP stateless/durumsuz bir protokoldur. Yani browser/istemci server/sunucu ile baglanti kurar, istekte bulunur(request) cevabi alir(response) ve browser ile server arasinda baglanti kapanir. Yani her baglanti bir request/response icindir.

Baglanti kalici (persistent) degildir. Servlet Container, istegi gonderen client/istemciyi tanimaz daha once ayni client istekte bulunmusmu diye ilgilenmez.

Session, ayni client/istemcinin birden fazla istek/request icin devamliligi saglar. Bunun icin HttpSession objemizi kullanacagiz. Bu session objemiz yardimiyla uygulamamizi, stateful Web Applicaton haline getirebiliriz.

Peki Servlet Container’in , client/istemciyi tanimasini nasil saglayabiliriz ?

Session ID

Client/istemci bir istekte(request) bulundugunda , Container unique/essiz bir Session ID olusturur ve bu Session ID bilgisini cevaba(response) ekler. Daha sonrasinda istemci sonrasindaki isteklerde(request) bu Session ID bilgisini de gonderir.

Peki istemci/sunucu arasinda session id bilgisi nasil tasinmaktadir ?
Cookie uzerinden bu bilgi tasinir !

  • HttpSession objesini olusturma
  • Unique Session ID olusturma
  • Cookie objesi olusturma
  • Session ID ile Cookie objesini iliskilendirme
  • Cookie’yi , cevaba(response) ekleme gorevlerinden Servlet Container sorumludur.

Kisacasi Servlet Container, tum session ve cookie gorevlerini yapmaktadir !

Session ID olusturma mantigi su sekildedir;

  • eger istek/request Session Id , Cookie bilgisine sahipse ilgili eslesen session’i bul ve session id ile iliskilendir.
  • eger istek/request Session Id  ,Cookie bilgisine sahip degilse yeni bir session olustur.Tum bunlar arka planda calisir.

Basit bir uygulama yapalim ve Session Id bilgisinin Cookie uzerinden tasindigini gorelim.

Ornek Uygulama

Yeni bir paket ve sinif olusturalim;

_09_HttpSession
HelloHttpSession

HelloHttpSession.java

package _09_HttpSession;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class HelloHttpSession extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		PrintWriter pw = resp.getWriter();
		HttpSession session = req.getSession();

		if (session.isNew()) {
			pw.print("new session");
		} else {
			pw.print("old session");
		}

	}

}


getSession()
metodu session bilgisini donecektir.

public HttpSession getSession();

isNew() metodu , eger istemci ile bir session id eslesmemisse true donecektir.

public boolean isNew();

web.xml dosyamiza servlet sinifimizin tanimlarini ekleyelim;

	<servlet>
		<servlet-name>HelloHttpSession</servlet-name>
		<servlet-class>_09_HttpSession.HelloHttpSession</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>HelloHttpSession</servlet-name>
		<url-pattern>/hellohttpsession</url-pattern>
	</servlet-mapping>

HelloHttpSession , sinifimizi ilk defa calistirdigimizda , Servlet Container’in bizim icin response’a JSESSIONID adinda bir Cookie objesi ekledigini gorebiliriz. Session tracking icin kullanilan bu cookie’nin adi JSESSIONDID olmalidir. Zaten bu cookie’nin eklenmesinden Servlet Container’lar sorumludur.

“Set-Cookie” , response’a eklenen bir header’dir. “Cookie” de bir request header’dir.

set session id cookie

Ikinci istekten sonra , Session ID bilgimiz yani Cookie objemiz request header alaninda yer alacaktir.

request cookie

getSession metodunun overloaded hali de mevcuttur.

public HttpSession getSession(boolean create);

Bu metoda, false degerini verirsek bunun anlami hali hazirda bir session varsa bu session bilgini don. Aksi takdirde null deger don.

getSession(true) ile getSession() ayni gorevi gormektedir yani eger hali hazirda session varsa bu session bilgisini don , eger hali hazirda session yoksa yeni session olustur.

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6, Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *