İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

Nesne Ufku(Object Scopes) ve Temel Kavramlar

JSP Nesne Ufku

Bir istek sonucunda servis veren JSP sayfasının içerisindeki Java nesnelerinin görünebilirlik kuralları JSP nin anlamını anlamak için önemlidir.Nesneler JSP direktifleri kullanılarak içsel olarak , eylemlerle ve seyrek olarak script kodları kullanılarak dıştan yaratılabilir.Örneklenen nesneler kendilerine referans çıkarılen yerdeki görinebilirlik kurallarına göre bu referansın kaldırılmasına kadar örneklenirler.Yeni oluşturulmuş bir nesne için çeşitli görünebilirlik kuralları aşağıdaki diyagramda verilmiştir.

JSP İç Nesneleri

JSP konteyneri işlevsellik için scriptlet veya tanımlarla kullanılabilecek JSP kodunu oluşturan kişinin oluşturması gerek olmayan iç nesneler sunmaktadır.Bu nesneler Servlet API genişletmek için arka plandaki Java altyapısını çevreleyen tipte nesneler , sınıf tanımları ve ınterface(arayüzlerden) oluşmaktadır.

Bu bağlamda varolan 9 iç nesneler:

Burada dikkat edilmesi gereken nokta bu iç nesnelerin sadece sistem tarafından oluşturulan _jspService() metodu içerisinde görünebilir olmasıdır.Kendi tanımladığınız metodlar içerisinde bu nesnelere erişim bulunmamaktadır.

Senkronizasyon Detayları

Varsayılan durumda JSP sayfalarına gelen isteği karşılayan JSP Servis metodu multithreaded olarak çalışmaktadır.Böylece paylaşılan bir duruma efektif olarak senkronizasyonlu erişimin sağlanmasının sorumluluğu JSP sayfasını yazan kişiye aittir.Servis metodlarının thread bazında güvenli olmasını sağlayan birkaç değişik yol bulunmaktadır.Kolay olan yaklaşım bir JSP sayfa direktifi kullanmaktır.

<%@ page isThreadSafe="true" %>

Bu JSP sayfa implemantasyon sınıfına SingleThreadModel arayüzünün implemente edilmesi gerektiğini belirtir ve böylece servis metodunun senkronizasyonu sağlanmış ve servletin birden fazla örneklemeleri belleğe alınmış olur.Gelen kullanıcı istekleri round-robin servis mimarisi ile bu servlet örneklemelerine paylaştırılır:

Bu yaklaşımın dezavantajı ölçeklenebilir olmamasıdır.Eğer gelen istek sayısına bağlı olarak bekleme sırasının büyümesi söz konusu olursa servlet örneklemelerinin işlem kapasiteleri çökecek ve bu sebepten istemci servis almakta gecikecektir.

Bundan daha uygun olan yaklaşım JSP sayfasındaki paylaşılan nesnelere erişimi scriptletler ile dışarıdan senkronize etmektir.

<%
synchronized (application) {
SharedObject nesne = (SharedObject)
application.getAttribute("sharedObject");
nesne.update(birDeger);
application.setAttribute("sharedObject",nesne);
}
%>

Exception Ele Alımı

JSP , çalışma zamanında doğabilecek exception(beklenmeyen durumlar)lar için oldukça gelişmiş bir mekanizma sunmaktadır.Kendi JSP sayfalarınızda exception ele alımını gerçekleştirebilirsiniz ancak tüm durumları ele almak mümkün olmayabilir.JSP page direktifinde bulunan errorPage özelliği ile yakalanmayan bir exception hata işleyen bir JSP sayfasına iletilebilir.Örneğin,

<%@ page isErrorPage="false" errorPage="hataYakalayici.jsp" %>

JSP motoruna herhangi yakalanmayan bir exception’ın belirtilen sayfaya iletilmesi gerektiğini söyler.Ayrıca hataYakalayici.jsp sayfasının da kendisinin hata işleyici bir sayfa olduğunu kendi page direktifi içerisinde

<%@ page isErrorPage="true" %>

şeklinde belirtmesi gerekmektedir.

Bu exception’I tanımlayan Throwable nesnesinin bir scriptlet tarafından erişime açılmasına olanak tanır.

Oturum Yönetimi

Varsayılan özellikte , tüm JSP sayfaları bir HTTP oturumu içerisinde görev alırlar.HttpSession nesnesine JSP içerisinde session iç nesnesi kullanılarak scriptletler aracılığı ile erişilebilir.Oturumlar kullanıcı tarafından kullanılacak olan , diğer JSP sayfaları ile paylaşılacak olan bean ve nesneleri saklamak için oldukça iyi bir ortamdır.Oturm nesneleri bir oturum ID si ile ayırt edilirler ve tarayıcı içerisinde bir cookie(çerez) şeklinde tutulurlar.Eğer cookie’ler tarayıcı tarafından desteklenmezse, o zmaan otorum ID si URL yeniden yazımı ile elde edilmektedir.URL yeniden yazım desteği JSP spesifikasyonu tarafından yönteilmemekte ve sadece birkaç sunucu tarafından desteklenmektedir.Oturum içerisine ilkel veri tipleri yerleştirememenize rağmen herhangi bir biricik(unique) anahtar ile bir Java nesnesi yerleştirebilirsiniz.Mesela,

<%
Foo foo = new Foo();
session.putValue("foo",foo);
%>

foo nesnesini aynı otoruma ait olan tüm JSP ve Servletler içerisinde erişime açar.Bu nesneye başka bir JSP sayfası içerisinde

<%
Foo myFoo = (Foo) session.getValue("foo");
%>

scripti kullanılarak erişilebilir.

Session.getValue() metoduna yapılan çağrı , jenerik nesne tipine bir referans döndürmektedir.Böylece kullanmadan önce dönen değerler uygun olan veri tipine dönüştürülmelidir.Tüm JSP sayfalarının bir oturum içerisine dahil olmaları şart değildir;otorum dışında kalmak istediklerini kendi page direktiflerinde

<%@ page session="false" %>

şeklinde belirtebilirler.

Oturum içerisinde tutabileceğiniz nesne sayısında herhangi bir kısıtlama bulunmamaktadır.Fakat oturum içerisine büyük nesnelerin yerleştirilmesi performansın düşmesine yol açabilir.Genellikle çoğu sunucu bir oturum nesnesinin zamanını 30 dakika olarak belirlerler fakat her oturum için setMaxInvalildationInterval(int secs) metodu aracılığıyla bu değer ayarlanabilir.Genel olarak oturum yönteimi aşağıdaki diyagram tarafından özetlenebilir.

JSP motoru oturum geçerli olduğu sürece , oturum içerisindeki nesnelere bir referans tutar.Eğer oturum kapatıma uğrar veya geöerlilik süresi dolarsa o zaman nesneler garbage collection(çöp toplama) işlemi için işaretlenir.

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır