ÖN BİLGİ Servlet Dinamik içerik üreten bir Java Web bileşenidir. Web teknolojilerinin temelinde bulunur. JSP ve JSF hala Servlet'i kullanır. Bir Servlet, her yönüyle, herşeyden önce, bir Java nesnesidir. Yazdığınız bir Java Servlet sınıfı, Java derleyicisi tarafından, platformdan bağımsız olan Java bayt koduna çevirilir ve bir Servlet Engine (Motoru) tarafından çalıştırılır. 1. Kullanıcı web tarayıcısından ulaşmak istediği sayfayı belirtir ve bu bilgiyi sunucuya gönderir ya da bir sayfada bulunan web form bilgilerini doldurur ve gönderme tuşuna tıklar. 2. Web sunucusu kullanıcı tarafından gelen bu http yada başka biçimdeki isteği(request) alır. Bu isteğe uygun olan Servlet'i belirler. Bu Servlet'e ait bir nesne bellekte var mı diye kontrol eder. Bu kontrolde var ise istekteki tüm bilgi bu Servlet e gönderilir. Eğer istenilen servlet nesnesi bellekte yok ise yeni bir tane oluşturulur, istek ve bilgi daha sonra bu servlet'e gönderilir. 3. Servlet kendisine gelen istek ve verileri alır ve bunları kullanarak oluşturması gerekli olan sonucu oluşturur. Servlet'in oluşturacağı sonuç bilgisi farklı biçimlerde olabilir. Genel olarak oluşturulan sonuç HTML sayfası şeklindedir. 4. Servlet oluşturduğu sonucu web sunucusuna gönderir. 5. Web sunucusu Servlet'ten gelen sonucu isteği yapan kullanıcıya gönderir. HTML isteklerini anlayarak HTML sonucu üreten ve yaygın olarak kullanılan temel Servlet sınıfı HttpServlet tir. JSP JSP, servlet yapısı üzerine kurulmuş diğer bir web bileşenidir. JSP sayfaları da servletlere çevrilir ama sunucu tarafından. Servletlerden farkı HTML tagları içerisine gömülmüş java kodlarıyla veya oluşturulan beanlerden(klasik java sınıfları) yapılan çağrılarla dinamik içerik üretmesidir. Aynı zamanda JSP den Servlet, Servlet ten JSP çağırılabilir. JSP spesifikasyonu Java Servlet API üzerine kurulmuş bir uzantıdır fakat Servlet ve JSP teknolojileri arasında belirgin farklar bulunmaktadır. İmplementasyonlarında programlama profesyonelliği gerektiren Servletlerin tersine JSP sadece geliştiriciler tarafından kullanılmakla kalmayıp aynı zamanda web dizayncıları tarafından da kullanılabilinmekte ve böylelikle geliştirme yaşam döngüsünde daha direkt bir rol oynamaktadır. Servlet kullanımında dinamik içeriğin oluşturulması servletin kendi içindeki programlama mantığının bir parçasıdır ve kullanıcı arayüzünden sorumlu olan statik gösterim şablonlarına bağlıdır. Bundan dolayı UI üzerinde yapılan çok ufak değişiklikler dahi servletin yeniden derlenmesini gerektirmektedir. Dinamik ve statik içeriklerin birbirlerine bu şekilde bağlı olmaları uygulamaların sabit ve esnek olmamalarına yol açmaktadır. JSP ile dinamik içeriğin oluşturulması için gereken mantık,statik içerikten bu mantığı JavaBean bileşenleri kullanılmak suretiyle ayrılmıştır.bunlar daha sonra JSP sayfasında bazı özel script ve etiketler sayesinde oluşturulup kullanılabilmektedir.bir sayfa dizayncısı sunum şablonu üzerinde herhangi bir değişiklik yaptığında, JSP sayfası otomatik olarak derlenmekte ve JSP motoru tarafından yine otomatik olarak web sunucusu içerisine konmaktadır. Yani JSP sayfasını yöneten, arkada çalışan java sınıflarıdır. Bu sınıflar, java derleyicisi tarafından platformdan bağımsız çalışan java bayt koduna çevrilerek servlet motoru tarafından(servlet Engine) çalıştırılacak hale getirilir
Örnek bir JSP kodu: <html> <body> <% String[] hotissues={"java","beans","xml","xsl","linux"};%> <h1>hot issues in computing :</h1> <ol> <% for(int i=0;i<names.length;,i++) { %> <li><b> <% hotissues[i] %> <% } %> </ol> <body> </html> JSF Arka planda Servlet ve ön yüzde JSP etiketlerini kullanabilen, bileşen temelli bir MVC çatısıdır(framework). Arka plan kodunu, tasarımı ve gösterimi ayrı ayrı yapabilmek için geliştirilmiş bir frameworkdur. Proje view leri JSF component'leri ile oluşturulur.(ör: primefaces, richfaces vb.) JSF daha çok component modele uygundur. Örneğin bir DataTable kullanacaksanız bunu richfaces veya primefaces gibi JSF componentleriyle hazır kullanabilirken, JSP de bunu html(html, javascript, jquery, css) ile yazarsınız. JSF gibi çatıları kullanmanın avantajı, ihtiyaç duyabileceğiniz bazı bileşenlerin daha önceden hazır paketler halinde sunulmasıdır. Örneğin geliştirdiğiniz uygulamada veri doğrulaması(validasyon) yapmak istiyorsanız, bunun için JSF içindeki hazır yapıyı kullanabilirsiniz. JSF, temel olarkak FacesServlet sınıfını kullanır. EJB EJBler server tarafında bütün iş mantıklarını(business logic) çalıştıran java component'leridir. Dependency Injection, Transaction, Messaging, Scheduling, Remote Access, Web Service End Points vb. gibi işlemlerde kullanılır. EJB yi anlamak için http request ve response mantığını, web server'ların gelen çağrılara nasıl cevap verdiğini bilmeniz gerekir. Kısaca siz bir adres yazınca Firefox ta, browser bu adresin bulunduğu server a çağrıyı yönlendirir ve oradaki web server / application server çağrıya cevap verir, ve sonucu browser a yollar, ve web server normalde bu işlemi yaptıktan sonra gelen client çağrısını unutur. İşte server da yapılan işlemleri unutmamak, nerde kaldığını bilmek ve önemli işlemlerde yapılacak kontroller için(ve bir çok is mantığı için) server tarafındaki durumu kontrol etmek için EJBler kullanılır javada.
SUNUCULAR Web Server Web server statik (değişmeyen içerik) html sayfalarını göstermek için kullanılan sunucu türüdür. En iyi örneği Apache Httpd sunucusudur. Application Server Uygulama sunucuları bünyelerinde uygulamanın kendisini barındırır, bu uygulamanın ihtiyaç duyduğu kaynakları yönetir ve uygulamanın hizmetine sunarlar. Uygulama sunucuları bünyesinde JSP, JSF, Spring MVC ya da EJB gibi teknolojilerle hazırlanmışuygulamalar koşturulur. Uygulama sunucusu bünyesindeki uygulamalara güvenlik (security) ve otomatik transaksiyon yönetimi (transaction management) gibi hizmetler sağlar. Uygulama sunucular içerisinde EJB container içerenler JEE uygulama sunucusu diye de ayrılır. Java dünyasında en çok JBoss, Glassfish, Websphere, Weblogic, Tomcat gibi uygulama sunucuları kullanılır. Bunlardan Tomcat, JSP ve JSF projelerini çalıştırabilir ama EJB container barındırmaz. Dolayısıyla, EJB kullanılan projelerde bu seçenek devre dışı kalır. JBoss(RedHat) ve Glassfish(Sun) açık kaynak kodlu ve ücretsiz.(ücretli sürümleri de mevcutmuş) Websphere(IBM) ve Weblogic(Oracle) ise ücretli. Kullanım oranları aşağıdaki gibi: Açık kaynak kodlular arasındaki karşılaştırmalarda, Glassfish in JBoss tan daha çabuk yeniliklere uyum sağlayıp, sürüm çıkardığından ve yönetici ekranlarının kolaylığından bahsediliyor. JBoss un ise oturmuş ve geniş topluluğundan dolayı sorunlara çözüm bulmadaki avantajından bahsediliyor. İki sunucu arasında aşağıdaki gibi bir karşılaştırma testi de yapılmış. JBoss AS 7.0.2 JBoss AS 6.0.0 GlassFish 3.1.1
Empty server startup time 1.9 s 12 s 3.2 s Empty server heap memory 10.5 MB 100 MB 26.5 MB Empty server PermGen memory 36.3 MB 70 MB 28.4 MB MyApp deployment time 5.8 s 47 s 13 s Server + MyApp restart time 8 s 30 s 14.5 s Server + MyApp heap memory 52.8 MB 236 MB 55.3 MB Server + MyApp PermGen memory 80.9 MB 175 MB 84.5 MB MyApp redeployment time 3.5 s 30 s 7 s Diğer tarafta ise Weblogic in uygulama sunucuları dünyasına ilk adım atanlardan olması ve yeniliklere ayak uydurması noktasında Websphere den daha ileride gözüküyor. Ayrıca çabuk yazılım geliştirmek bugünün pazarlarının ilk şartı olduğu için WebLogic, WebGain Studio ve Visual Studio ile sıkı ilişkide. En çok kullanılan Java editörü Borland JBuilder de WebLogic'le direkt çalışmayı sağlıyor. Bu ürünleri kullanarak, geliştiriciler için yazılım geliştirme zamanınızı kısaltılıyor. Zaman alan ve angarya haline gelen birçok küçük görev, bu ürünler sayesinde otomatik oluyor. Websphere ise belli noktalarda geride olmasına rağmen ciddi biçimde çalışarak aradaki farkı kapatmaya çalışıyor. Ticariler ile açık kaynak kodlular arasındaki en büyük fark ise, ücretli sunucuların ağır yükleri kaldırabilmek için clustiring(kümeleme) ve bulut(cloud) teknolojilerini kullanmaları. Ama açık kaynak tarafında da bu duruma, açık kaynak kodlu farklı ürünlerle kombinasyonlar yaparak çözüm bulunabiliyormuş. Örneğin Glassfish+Hazelcast veya Tomcat+Hazelcast kombinasyonlarıyla rahatlıkla kümeleme ve bulut özellikleri kullanılabiliyormuş. Ticariler ile açık kaynaklılar arasındaki ikinci fark ise destek meselesinde ortaya çıkıyor. Ama okuduğum makalelerde millet tabiri caizse bu konuya meşrebine göre bakıyor. Örneğin açık kaynak kodlularla alakalı şöyle bir ifade var: Peki neden açık kaynak kodlu JEE uygulama sunucusunu tercih etmenizi önerdim? Bedava olduğu için mi? Hayır; öncelik destek alabilmektedir. Açık kaynak kodlu ve topluluğu olan ürünleri kullanırsanız, başınız belaya girse bile (-ki kesin girer) topluluktan cevap alma ihtimaliniz diğer ticari ürünlere göre her zaman daha fazladır. (Altuğ B. Altıntaş, JTPD-Java Teknolojileri ve Programcıları Derneği üyesi) Diğer tarafta ise şöyle bir bölüm: Sıradaki konumuz ise destek konusu. Sanırım en kanlı kısım burası olsa gerek. JBoss kullanıcılarının Türkiye de destek alabilecekleri sadece tek bir sağlam merci var : Google. Bu konuyu meslektaşım Oğuz Dağ şuradaki ve buradaki yazılarında çok güzel ifade etmiş : Şanslıysam, daha önce birisi daha JBoss ta aynı problemle karşılaşmıştır. Daha şanlıysam, bu problemini internette forumlarda paylaşmıştır. Daha daha şanslıysam, bu problemi çözmüştür. Hepten şanslıysam, çözümü internette bir yerlere yazmıştır.
Tabi Enterprise versiyona geçilirse telefon ve eposta ile RedHat ten destek alınabilir (uluslararası). Ama yerel bir organizasyonları ne yazık ki yok. ( Arden Agopyan- CV sinden: Akabinde IBM Türk - Yazılım Grubu nda, WebSphere ürün grubundan sorumlu Teknik Satış Danışmanı olarak çalışmaya başladım. )