1) Web sunucusu (EJB container’i yok)
2) Java Servletleri çalıştıran(execute) eden bir uygulama
3) JSP kütüklerini Java Servletlere dönüştüren bir uygulama
Bu anlatımızda Tomcat’in mimarisi ve dizin yapısına temel düzeyde değineceğiz. Tomcat 6, Java SE 5 üzerinde çalışan, Servlet 2.5 ve JSP 2.1 spesifikasyonlarını uygulayan bir uygulama sunucusudur. Servlet ve JSP standartlarını referans almaktadır. Bu ne anlama gelmektedir? Tomcat bu standartları yakınen takip ederek, Tomcat container’i altında çalışan her Servlet/JSP uygulaması, baska bir uygulama sunucusunda da sorunsuz çalışma imkanı verir. Bu ne işimize yarar diye bir soru sorabilirsiniz. Yazımızın girişinde de değindiğimiz gibi Tomcat web sunucusudur yani tam bir uygulama sunucusu değildir, gerekçe olarakta EJB container’in olmaması gösterilmektedir. Ama çok başarılı bir web sunucusudur. Bunu istatiksel örneklerle göstermek yerine tüm küçük ölçekli web uygulamaları veya büyük ölçekli projelerde Tomcat web sunucusunun kullanılması iyi bir örnek olacaktır. Yazılım şirketleri yaptıkları web tabanlı projelerde, projeyi yaptıkları kuruma ya da şirkete, proje teslim edilirken genelde Oracla ya da Jboss uygulama sunucularını kurarlar (bu müşteri isteğidir, daha doğrusu bunlar en başta yazılım veya donanım gereksinimlerinde yazılır) burda değinmek istediğim nokta Yazılım şirketi müşterinin hangi uygulama sunucusunu kullanacağından bağımsız olarak genelde Tomcat i kullanır, nedenleri ise Tomcat in başarılı, performansı iyi, özellikle developer’ların çalışma zamanında developer’larıda yormayacak bir web sunucusudur. Developer uygulamayı geliştirirken web sunucusunu restart etmesi, büyük bir zaman kaybı. Developer’in uygulamayı geliştirdiği makinede Oracle uygulama sunucusunun olduğunu düşünürsek hem makine için hemde developer için tam bir kabus.:)
Tomcat’in Mimarisi ve server.xml
Tomcat bir seri fonksiyonel iyi tasarlanmış bileşenlerden oluşmaktadır. Bu yapı server.xml kütüğünde tanımlanmış. Bu kütükte conf adlı alt dizinde bulunmaktadır.
Blog malesef tag yapısına izin vermemektedir. Yazıyı server.xml kütüğü ile birlikte incelerseniz daha yararlı olacağı kanısındayım.
Context
Context, Tomcat bileşenlerinin en alt bileşenidir ve Containers olarakta adlandır. Tomcat uygulanızı yüklerken(load) standart bir context oluşturmakta ve bunu konfigure etmektedir. Konfigürasyonun bir parçası da uygulamanızın WEB-INF/web.xml’de çalıştırmaktadır.
Connector
Connector TCP portunu ilişkilendiren bileşendir. Uygulama ile istemci arasındaki iletişimi sağlar. Bu iletişimi Tomcat default olarak HTTP portunu kullanarak sağlamaktadır. Bu da 8080 portudur. Uygulamanın URL’i http://localhost:8080/ diye adlandırılır. Bu portun 8080 olması zorunlu değildir, bunu değiştirebiliriz. Örneğin; port =”8090” yazarak.
connectionTimeout="20000"
redirectPort="8443" /
ConnectionTimeout’a set edilen 20000 değeri, session’nın 5 saat 33 dak 20 sn sonra sonlandırılacak anlamına gelmesidir.
Host
Host container’i sanal bir host sunmaktadır. Aynı sunucuda birden fazla host tanımlanabilir.
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"
/Host
unpackWARs =”true”, eğer WAR kütüğünü appBase dizininden silerseniz, Tomcat otomatik olarak kütüğü normal dizinine bırakır. Eğer bu false olursa uygulama direk olarak WAR kütüğünden çalıştırılacak yani çalışma zamanında daha yavaş çalışacak çünkü çalışma zamanında unzip edecek.
autoDeploy = “true” eğer uygulamayı Tomcat’in çalışma zamanında appBase dizininden silerseniz, tomcat uygulamayı otomatik deploy eder.
Engine
Container’in üst seviyesidir.Birden fazla host içerebilir ama başka bileşenin container’nı içeremez.
Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/
Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"
/Host
/Engine
Default Tomcat konfigürasyonu Cataline engine’ni içermektedir, default host’u ise localhost’tur.
Service
Service bileşenin amacı belirli bir engine bir ya da birden fazla connector ile ilişkilendirmek. Default Tomcat konfigürasyonu, tıpkı Cataline engine gibi, Catalina servisini içermektedir.
Service name="Catalina"
Server
Server tüm bileşenlerin üst bileşenidir. Bu bileşen bir ya da birden fazla servis içerebilir.
Listener
Listener bir Java nesnesidir. org.apache.catalina.LifecycleListener interface’ni implement etmektir. Dört tane listener’imiz var.
Birincisi Apache Portable Runtime kütüphanesini aktifleştirmektedir.
İkincisi JSP engine’i aktifleştirmektedir yani update edilen JSP kütüklerini tekrar derler(recompile).
Üçüncüsü JMX(Java Management Extensions) aktifleştirmektedir yani sistem nesnelerini yönetmeyi, remote monitoring olaylarını mümkün kılmaktadır.
Dördüncüsü global kaynakları aktifleştirmektedir yani JNDI kullanarak MySQL vb. veritabanlarına erişmeyi sağlar.
Listener className="org.apache.catalina.core.JasperListener"
Listener className= "org.apache.catalina.mbeans.ServerLifecycleListener"
Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
Giulio Zambon ile Micheal Sekler, Beginning JSP, JSF and Tomcat Web Development kitabından alıntı yapılmıştır.