ServletContext

ServletContext

* Merhaba arkadaslar , bugün ki yazımız ServletContext üzerine olucaktır.

ServletContext

  •  Hatırlayacağınız üzere ServletConfig konusuna değinmiştik. O yazıya buradan ulaşabilirsiniz.
  •  ServletContext , ServletConfig objesine benzerdir. ServletConfig tek Servlet’e özgü iken ServletContext application kapsamlıdır.
  • Bir wep app için tek ServletContext objesi , her Servlet için ise ayrı ServletConfig objesi bulunur.
  •  ServletContext parametreleri tüm Servlet ve Jsp sayfaları tarafından erişilebilir ve kullanılabilirdir.
  •  ServletContext objesi Contaıner tarafından proje deploy edildiğinde oluşturulur.servletcontext
  •  Configürasyon ayarlarını projemizin deployment desciriptor dosyası olan web.xml‘den alır.
  •  Bir web applicaton için sadece bir ServletContext objesi vardır.
  •  Bir config ayarı tüm Servlet’ler ve Jsp sayfları ile paylaşılması isteniyorsa bunun en kolay ve uygun yolu web.xml’de bu ayarın yapılmasıdır.
  •  ServletContext için config ayarı web.xmlde <context-param> etiketleri ile yapılır.

ServletContext objesi ile neler yapılabilir?

  1. ServletContext objesi , Servlet ve Contaıner’ın haberleşmesini sağlar.
  2. ServletContext objesi , web.xml’den configurasyon ayarlarını okuyabilir.
  3. ServletContext objesi , application üzerindeki attributeleri okuyabilir, değiştirebilir , silebilir.


  4. ServletContext objesi , appliaction’lar arasında iletişim kurmayı sağlar.

ServletContext interface’sinin methodları

  1. public String getInitParameter(String name): Parametre de verilen değişkenle eşleşen config Stringini döner.Eşleşen değer yoksa null döner.
  2. public Enumeration getInitParameterNames(): ServletContext’de bulunan tüm configleri Enumeration olarak döner.
  3. public void setAttribute(String name,Object object): Applicaton scope’da bir attribute’nin değerini set eder.
  4. public Object getAttribute(String name): Verilen parametre ile eşleşen attribute’yi döner. Return type objectir.
  5. public void removeAttribute(String name): Verilen parametre ile eşleşen attribute’yi siler.

 

ServletContext objesi nasıl elde edilir ?

ServletContext objemizi 2 şekilde elde edebliriz;

  1. ServletContext context = getServletContext();
  2. ServletConfig üzerinden ; ServletContext context = getServletConfig().getServletConfig();

context-param ile init-param arasındaki farklar?

  • context-param tüm app tarafından ulaşılabilirdir. init-param ise sadece tanımlı olduğu Servlet tarafından ulaşılabilirdir.
  • context-param  <web-app> etiketi içerisinde <servlet> tagı dışında tanımlanır. init-param ise <servlet> tagı içerisinde tanımlanır.

web.xml’e context-param nasıl eklenir?

 

how-to-initialize-context-using-deployment-descriptor

web.xml dosyamız içerisinde name-value olarak tutabiliriz.

 

Bir örnek üzerinden gidelim;

* web.xml içinde yazacağımız context-param etketi ile farklı servletler tarafından bunlara nasıl ulaşırız , ona bakalım;

web.xml

 

* web.xml’de tüm app tarafından erisilebilir olan 3 tane context-param ekledik. Bunlar ; driver ,username ,passoword.

* MyServlet1 icin ek olarak servlet adı olarak init-param ekledik ve MyServlet2 tarafından buna erismeye çalışıcaz.( Erişeyemeyeceğiz )

MyServlet1.java

* Önce ServletConfig objemiz üzerinden MyServlet1’e özgü olan “ServletName” parametresi ile init-paramı aldık.

* Daha sonra ServletContext objemizi ServletConfig objemiz üzerinden aldık. Sonra parametreleri okuduk. PrintWriter objemiz ile de taracıyımıza yazdık.

* Sonuc ;

context1

 

 

 

 

 

 

 

 

 

MyServlet2.java

* MyServlet2 servletimiz MyServlet1’e oldukca benzer. MyServlet2 servletimizde ServletContext objesini direk aldık.

* Servletimizde MyServlet1’e ait olan param’ı almaya çalıştıgımızda herhangi bir eşleşme olmadıgı icin bize null dönecektir. MyServlet1 sınıfından driver,username,password context-param’lara ulasabildigimiz gibi MyServlet2 tarafından da ulaşabilidik.

* Sonuc ;

context2

 

 

 

 

 

 

 

 

* ServletContext objesinin Contaıner tarafından oluşturulmasını dinleyebiliriz. Bunun için bir ServletListener tanımlamamız gerekir web.xml’de.

* Bir Sınıf olusturalım ve ServletContextListener arabirimini implement edelim ve şu iki methodu yazalım;

* contextInitialized  methodu app deploy oldugunda çağrılır. Uygulamamız ayağa kalktıgında database bilgilerini web.xml’den alıp database bağlantısını yapabiliriz, loglama işlemleri için kaynakları başlatabiliriz, properties dosyalarıyla işlem vs yapabiliriz.

* Listener’ımızı web.xml’de belirtmeliyiz , şöyle ki ;

 

* Ek olarak Servlet 3.0 ile ilgili sınıfımızın başına WebListener() annotation olarak da listener ekleyebiliriz.

* Uygulamamız ayağa kalktıgında İntellij konsolda şunu görebiliriz;

context3

 

 

 

 

 

 

* Ornek proje : ServletContextDemo

* Yazımızın sonuna geldik

* Mutlu kalın , kod’la kalın ve bol bol Çay için

* İyi günler dilerim . ~ Alican Akkus

 

1806 Total Views 2 Views Today