Web Server, application server, web container, servlet kavramları

Bu kavramlar genelde anlaşılması, ayırt edilmesi zor bir hale gelebiliyor. Ben de yakın zamana kadar karıştırdığımı ve içeriklerini öğrendiğimde yanlış kullandığımı farkettim.

Bu yazımda bu terimleri, java dili özelinde genelden özele doğru detaylandırmaya çalışacağım.

Web Server: önce bu terimi kavramamız gerekiyor. Temel olarak bilinmesi gereken ana kavram bu aslında. Çünkü istemciden gelen istek ilk olarak buraya gelir.

Eğer istemcinin istediği cevap statik html,css yada bir png dosyası gibi değişmeyen içerikler olsaydı, web server’lar internet alemi için yeterli olacaktı. Web server gelen isteklere statik cevaplar veren bir teknolojidir. Server-side programlar, DB transaction’lar yada dinamik HTML içerikler yoktur.

Java dünyası için en popüler web server şuan Apache, .Net için ise ISS.

Application Server: Peki ya gelen isteği cavaplamak için bir dizi logic işlem yapmamız gerekiyorsa, yani her isteğin cevabı sabit değilse, nasıl bir yöntem izleyeceğiz? Bunun için web server içinde dinamik bir uygulama(application) koşması gerekiyor.

Bu dinamik içerikler bir servlet, JSP yada EJB olabilir. Servlet’leri serve edebilmesi açısından aslında içerisinde bir web container barındırır. Web container’lardan farklı olarak EJB pool’ları, dağıtık sistemleri, mesajlaşma servisleri, güvenlik servisleri vb. daha komple uygulamaları da, içerisinde koşan programdan bağımsız olarak sağlayabilir. Bu yüzden enterprise uygulamalar için application server tercih ediliyor.

Web Container: içerisinde servlet,JSP yada JSF programlarını barındıran server’dır. En çok kullanılan web container Apache Tomcat ve Jetty. Apache Tomcat, eklenilen yeni özellikleriyle giderek bir application server olma yolunda ilerliyor.

Dinamik içeren üreten server’ları burada daha detaylı anlatalım.Örneğin; basit bir toplama işlemi düşünelim. Gelen istekte iki rakam var, biz cevap olarak bu iki sayının toplamını geri yolluyoruz. Basit bir logic.

Web container içinde koşan programlar(servlet’ler) yazılırken hangi istek için çalışacağı belirtilir. Bizim örneğimiz için aşağıdaki servlet’i ele alalım.

/sum url’i(http://localhost:8017/ServletDemo/sum?int1=5&int2=3) çağırıldığı zaman web server bu isteği web container’a, web container’da ilgili servlet’e yönlendirecektir. Servlet bu bu isteğe, gönderilen iki parametreyi toplayarak cevap verecektir.

Bu işlemi şu şekilde şematize edebiliriz

Konuyu dağıtmamak adına web container’ların bu yönlendirmeyi nasıl yaptığını ve yönettiğini başka bir yazıda anlatmaya çalıaşacağım.

Servlet Container: Java özelinde servlet container ve web container aynı şeylerdir.

Servlet: Yukarıda Web container içinde bir programın koşması gerektiğini söylemiştik. İşte bu programlara servlet denir. Servlet aslında JVM üzerinde koşan bir java programıdır ve herhangi bir dinamik içerik, logic, kontrol,DB Connection, vs. olabilir.

Bir web container içinde birden fazla servlet(Dynamic Web Project) bulunabilir.Eğer IDE olarak eclipse ve web container olara Tomcat Server kullanıyorsak, web container içindeki servlet’leri aşağıdaki ekrandan görebiliriz, ekleyip çıkartabiliriz.

JSP: Servlet kullarak büyük çaplı web sayfaları yapmak oldukça zaman gerektirir. HTML ve logic kısmını aynı yerde yazmak zor olur. Bu sıkıntıyı çözmek için JSP(Java Server Pages) geliştirilmiştir.Aslında JSP, servlet’lerin tüm özelliklerini kapsar, hatta çalıştırılırken compile edilerken, JSP translator(Jasper) tarafından servlet haline dönüştürülür.Yazdığınız bir JSP kodunun servlet’e dönüştürülmüş halini web container’ınızın dosya dizininde (WebContainerPath)\work\Catalina\localhost/(projectName) bulabilirsiniz.

java and angular developer, google cloud, reader, traveller

java and angular developer, google cloud, reader, traveller