Jsp Scripting Element

Merhaba arkadaslar, bu yazımda JSP Scriptlet konusuna değineceğim.

Jsp dinamik web sayfaları oluşturmamızı sağlar diye belirtmiştik daha önce ve Servletin bir tık üstü, gelişmişi veyahut genişletilmesi diyebiliriz. Extra özellikler ile Servlet ile yapacaklarınızı daha kolay yapaliyoruz EL, JSTL gibi.

Jsp page’lerin işleyişine değineceğim daha sonra detaylı olarak. Ama şunu bilelim ki html uzanlıtlı sayfalarımızdan pek farkı yoktur. Bir request geldiğinde Contaıner gelen requesti jsp sayfası ile ilişkilendirip isteği handle edecektir. Burada jsp sayfasının request ile ilişkilendirilmesi, jsp sayfasının load olması, initalize edilmesi ve service methodlarının çağrılması tamamen Contaınerin görev ve sorumluluğundadır.

Jsp dosyalarımız html ve jsp tag’larından oluştuğunu biliyorduk. Bugün bir Jsp tagı olan Scriptlet konusuna değineceğim. Aslında scripting element 3 kısma ayrılır, bugun scriptlet konusuna değineceğim. Bu 3 element;

  • Scriptlet tag
  • Expression tag
  • Declaration tag

Herhangi bir java statementi/java kodunu scriptlet kullanarak jsp dosyamız içerisinde kullanabiliriz. Şöyle ki;

Scriptlet’in xml olarak karşılığı ise şu şekildedir;

Şimdi bir örnek ile bunu daha iyi anlayabiliriz;

Yukarıdaki scriptlet içerisinde bir değişken tanımı yapıp initalize edilmiştir. Java statement olduğu için scriptlet ifadesinin ; ile bitmesi gerekmetedir. Aski halde compile hatası verecektir. Scriptlet içerisinde method tanımı yapamamaktayız. Bunun nedenini birazdan açıklayacağım. Şimdi bu count değişkenini ekrana yazdıralım. Bunu expression tag ile de yapabiliriz ama şuan konumuz scriptlet olduğu için onu kullanarak ekrana yazdırmayı tercih ettim. Şöyle ki;

Jsp sayfası ise şu şekilde(göstermeme gerek yok simdilik ama akılda soru işaretleri kalmaması adına gösterelim);

Not : out objesi implicit JspWriter objesidir. Ve browserda çıktı oluşturmamızı sağlar. Daha sonra detaylıca bu konulara değineceğim. Şimdilik sadece görevine odaklanamım

Not 2 : Scriptlet içerisindeki variable declarasyonun local bir declarayoun oldğunu biliyoruz. Local bir değişken kullanılmadan önce initalize edilmiş olmalıdır. Count değişkenin şu şekilde olduğunu varsayalım;

Bu şekilde çalıştırdığımızda jsp sayfası compile olmayacaktır. Hata olarak da browserda status 500 kodunu görebilirsiniz.

Sayfayı çalıştırdığımızda browserda Count is : 1 çıktısını göreceğiz.

Screenshot from 2015-06-07 23:39:48

Sayfayı refresh ettiğinizde çıktının değişmediğini göreceksiniz. Bunun nedeni scriptlet tagı içerisine yazılan değişkenlerin local değişken olmasıdır! Scriptlet içerisine yazılan kodlar  Contaıner tarafından _jspService methodu içerisine yazılır. Yani method içerisinde local bir değişkendir. Yukarıdaki işlemler aslında şudur;

Tüm scriptlet ve expression kodlar service methodu içerisine yazılır. Bu da demektir ki bu taglar içerisindeki herşey localdir!

Not : Contaıner tarafından oluşturulan bu kodları görmek istiyorsanız şu dizinde bulabilirsiniz;

-> yourTomcatHomeDir/work/Catalina/yourServerName/yourWebAppName/org/apache/jsp

Peki instance variable nasıl oluşturacağız derseniz cevabı declaration tag olucaktır. Sonraki yazıda değineceğim insaAllah

Not : Scriptlet, html tag oluşturmaz. Eğer oluşturmasını istiyorsanız out implicit objesini kullanmanız gerekecektir. Yeni bir örnek yapalım;

Yukarıdaki jsp sayfası sayfa her refesh edildiğinde geçerli zamanı çıktı olarak üretecektir. Scriptletler her jsp sayfası çağrıldığında execute edilir.

Scriplet ile Html ifadelerini bir arada yazabiliriz;

Yukarıdaki jsp sayfasının çıktısı şu olacaktır;

Screenshot from 2015-06-08 00:12:27

Bir örnek daha yapalım mixing için;

Çıktımız şu olacaktır;

Screenshot from 2015-06-08 00:18:52

Scriptlet taglarının açılması ve kapanmasına dikkat ederseniz bir karışıklık söz konusu olmayacaktır.

Jsp Scriptlet tag için şimdilik bu kadar yeter, yazının sonuna geldik arkadaslar.

Kaynak kodlar; JspTutorial

Mutlu kalın, kodla kalın ve bol bol Çay için

~ Alican Akkus

 

953 Total Views 1 Views Today

  • Abdullah Onur Özcan

    Yazıdan çok faydalandım Alican. Teşekkürler

    • Alican Akkus

      Faydalı olduysa ne mutlu yazılar devam edicek insaAllah.