Bilal Koçoğlu/ Nisan 1, 2018/ Servlet

Servlet Nasıl Çalışır sorusuna cevap bulabilmek için önce bu dersimizde, Servlet interfaceGenericServlet ve HttpServlet sınıfının methodlarını inceledikten sonra servlet yaşam döngüsünden bahsedeceğiz ve basit bir örnekle anlattıklarımızı pekiştirmeye çalışacağız.

Servlet Arayüzü(Interface)

Servlet interface, tüm servletlerdeki ortaş davranışı sağlar. Bir nevi maske olarak düşünebiliriz, java sınıfımız bu maskeyi takar(implement) ve artık bir servlet olarak hareket etmeye başlar. Buradan anlaşılacağı üzere bir Servlet oluşturmak istiyorsak java sınıfımızda Servlet arabirimini uygulamak(implement etmek) gerekir. Servlet interface methodları ve bu methodların işlevi aşağıdaki gibidir;

  • public void init(ServletConfig config) Servleti başlatan methoddur. Servletin yaşam döngüsü sona ermediği(destroy() methodu çağırılmadığı) sürece web kapsayıcısı tarafından sadece bir kez çağırılır.
  • public void service(ServletRequest request, ServletResponse response) Gelen istek(request) için yanıt(response) verir, Web konteynırı tarafından her istekte çağırılır.
  • public void destroy() Yalnızca bir kez çağrılır ve servletin yok edildiğini(yaşam döngüsünün sona erdiğini) gösterir.
  • public ServletConfig getServletConfig() ServletConfig nesnesini dönürür.(ServletConfig nesnesinin ne olduğuna ve ne işe yaradığına sonraki derslerde değinilecektir.)

GenericServlet Class

GenericServlet sınıfı Servlet, ServletConfig ve Serializable arabirimlerini uygular(Bu interface’leri implement eder.). Bu arabirimlerin servis yöntemleri dışındaki tüm yöntemlerinin uygulanmasını sağlar. GenericServlet sınıfı herhangi bir talepte çalışabilir, bu nedenle protokolden bağımsızdır. GenericServlet sınıfını import ederek ve servis yönteminin uygulanmasını sağlar ve genel bir servlet oluşturabiliriz. Bu sınıfın bize sağladığı methodlar ise aşağıdaki gibidir;

  • public void init(ServletConfig servletConfig) Servleti başlatır, yukarıda belirttiğimiz methodla aynı görevdedir.
  • public abstract void service(ServletRequest request, ServletResponse response) Gelen talep için servis sağlar. Her servlet isteğinde çağırılır.
  • public ServletConfig getServletConfig() ServletConfig nesnesini döndürür.
  • public void destroy() Bir kez çağrılır ve servletin bittiğini gösterir.
  • public String getServletInfo() Yazar, telif hakkı, sürüm vb. gibi servlet hakkında bilgi döndürür.
  • public void init() ServletConfig nesnesine gerek kalmadan servletin başlatılmasını sağlar.
  • public ServletContext getServletContext() ServletContext nesnesini döndürür.
  • public String getInitParameter(String name) Verilen parametre adı için parametre değerini döndürür.
  • public Enumeration getInitParameterNames() xml dosyasında tanımlanan bütün parametreleri döndürür.
  • public String getServletName() Servlet nesnesinin ismini döndürür.
  • public void log(String msg) Verilen mesajı servlet dosyasına yazar.
  • public void log(String msg, Throwable t) Açıklayıcı mesajı servlet günlük dosyasında ve yığın(stack) izinde yazar.

HttpServlet Class

HttpServlet sınıfı, GenericServlet sınıfını extends eder ve Serializable arabirimini implement eder. Yukarıda belirttiğimiz class ve interface’i uyguladığı için servletlerimizi genelde bu sınıfı extends ederek oluşturacağız. doGet(), doPost(), doHead(), doTrace() vb. Gibi HTTP’ye özel yöntemler sağlar. Şimdi bu methodlara birlikte göz atalım.

  • public void service(ServletRequest req, ServletResponse res) Request ve response nesnesini HTTP türüne dönüştürerek korumalı hizmet yöntemine talebi gönderir.
  • protected void service(HttpServletRequest req, HttpServletResponse res) Hizmet yönteminden isteği alır ve gelen HTTP istek türüne bağlı olarak isteği doXXX () methoduna gönderir.
  • protected void doGet(HttpServletRequest req, HttpServletResponse res) Get isteğini işler, web kontainerı tarafından çağırılır. İstek tipini belirtmediğimiz sürece varsayılan olarak istekler get isteği olarak service methoduna iletilir ve bu methoda yönlendirilir.
  • protected void doPost(HttpServletRequest req, HttpServletResponse res) Post isteğini işler, web kontainerı tarafından çağırılır. Post istekleri genelde veritabanına veri eklemek gibi işlemler için gönderilir.
  • protected void doHead(HttpServletRequest req, HttpServletResponse res) Head isteğini işler, web kontainerı tarafından çağırılır.
  • protected void doOptions(HttpServletRequest req, HttpServletResponse res) Options isteğini işler, web kontainerı tarafından çağırılır.
  • protected void doPut(HttpServletRequest req, HttpServletResponse res) Put isteğini işler, web kontainerı tarafından çağırılır. Veri güncellemek için gönderdiğimiz istektir.
  • protected void doTrace(HttpServletRequest req, HttpServletResponse res) Trace isteğini işler, web kontainerı tarafından çağırılır.
  • protected void doDelete(HttpServletRequest req, HttpServletResponse res) Delete isteğini işler, web kontainerı tarafından çağırılır. Adından da anlaşılacağı üzere veritabanından veri silmek gibi işlemlerde tercih edilen bir istek türüdür.
  • protected long getLastModified(HttpServletRequest req) Requestin son değiştirilme tarihini dönürür.

Servlet Yaşam Döngüsü(life cycle)

  1. Servlet sınıfları yüklenir ⇒Sınıf yükleyici, servlet sınıfını yüklemekle yükümlüdür. Servlet sınıfı, servlet için ilk istek web konteyneri tarafından alındığında yüklenir.
  2. Servlet örneği oluşturulur ⇒Sınıf yüklendikten sonra yalnızca bir kez Servlet örneği oluşturulur.
  3. init() methodu çağırılır ⇒Böylece servlet başlatılmış olur.
  4. service() methodu çağırılır ⇒Servlet yapmasını istediğimiz işlemleri gerçekleştirir.
  5. destroy() methodu çağırılır ⇒Servlet görevini sona erdirir ve yaşam döngüsünden çıkar.

Servlet Nasıl Çalışır ?

Sunucu, servlet ilk defa talep edilip edilmediğini denetler. Eğer ilk defa talep edilmişse;

  • Servlet sınıflarını yükler.
  • Servlet sınfılarını başlatır.
  • ServletConfig nesnesini ileten init() methodunu çağırır.

İlk defa talep edilmemişse;

  • Servis talebi ve cevap nesnelerini ileten servis çağırılır.

Web kapsayıcısı, sunucu durdurulurken veya projenin dağıtımının kaldırılması gibi servleti kaldırması gerektiğinde destroy() methodunu çağırır.

Şimdi bir örnekle servlet yaşam döngüsünü daha iyi anlayalım, daha önceden oluşturduğumuz maven projesi üzerinden devam ediyoruz. Aramıza yeni katılan arkadaşlar buradan maven projesinin nasıl oluşturulduğunu öğrenebilirler.

Dosya Yapısı

Servlet Nasıl Çalışır ?

Servlet Nasıl Çalışır ?

pom.xml

ServletExample.java

index.jsp

Not : Çalıştırıp açılan sayfada deneme linkine tıklıyoruz. Tıkladıktan sonra karşımıza 404 sayfası gelecektir. Bu normaldir, sebebi ise servlet’e gelen isteğe bir cevap oluşturup yönlendirmemiş olmamızdır. Bu aşamadan sonra serverı durduruyoruz(destroy() methodunun çalışmasını görmek için durdurmamız gerektiğini belirtiyorum.) sonra output toolunu incelediğimizde aşağıda göründüğü üzere çalışma sıralarını ve önceliklerini inceleyebiliriz.

Servlet Nasıl Çalışır ?

Bir sonraki dersimizde web kapsayıcısını biraz daha detaylı inceleyip farklı Servlet tanımlama yöntemlerinden ve web.xml sayfasındaki bazı etiketlerden söz edeceğiz. Umarız Servlet nasıl çalışır ? sorusunu aklınızdan silebilmişizdir 🙂

Aldığınız hataları, sorularınızı ve önerilerinizi gönderi altına yorum yaparak veya info@webgunlugum.com adresine mail atarak bize ulaştırabilirsiniz. Herkese iyi çalışmalar.

Bir Yorum Yapın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*
*