22 Mayıs 2015 Cuma

Servlet Yaşam Döngüsü

Web container servlet ' e ait olan yaşam döngüsünü düzenler. Temel olarak bir servlet' in yaşam döngüsü 5 evreden meydana gelmektedir.


  1. Servlet sınıfı yüklenir.
  2. Servlet instance oluşturulur.
  3. init methodu çağırılır.
  4. service methodu çağırılır.
  5. destroy methodu çağırılır.


Şimdi gelin tek tek bu yaşam döngüsüne ait methodları inceleyelim.

init() methodu 

Bu method sadece bir defa çağırılmak üzerine tasarlanmıştır. Servlet ilk defa oluşturulduğunda çağırılır. Herbir client isteğinde tekrar tekrar çağırılmaz. 
Normal şartlar altında bir servlet kendisiyle ilgili olan URL çağırıldığı zaman oluşturulur. Yine de bu durumu kontrol ederek, server ilk çalıştırıldığı anda servlet' in oluşturulması sağlanabilir.

service() methodu

service() methodu asıl işlemin gerçekleştirildği ana method işlevi görür. Web server, client tarafından gelen isteği yakalamak ve buna uygun olarak client' a bir cevap döndürmek için bu methodu kullanır. 

Her bir defasında web ser servlet için bir istek alır ve server bunun için yeni bir thread oluşturur ve service() methodunu çağırır. Bundan sonra service() methodu HTTP istek tipini (GET, POST, PUT, DELETE vb. )kontrol eder ve duruma uygun olarak doGet, doPost, doPut, doDelete methodlarından uygun olanlarını çağırır. 

destroy()
destroy() methodu bir servlet' in hangi yaşam döngüsünün en son evresinde çağırılır. Bu method' un servlet' e database bağlantısının kapatılması, arka plan thread' lerinin durdurulması, cookie listesinin yazılması veya diğer temizleme işlemlerinin yapılmasını sağlar. 




21 Mayıs 2015 Perşembe

Servlet Hello World Örneği

Temel anlamda bir servlet oluşturmak için gerçekleştirmeniz gereken belli adımlar bulunmaktadır. Bu adımlar genel olarak belirlendiğinden dolayı herhangi bir server için geçerlidir. Buna rağmen bir servlet örneği 3 farklı yoldan gerçekleştirilebilir. Bunlar;


  1. Servlet interface' i implement edebilir ve kullanmaya başlayabilirsiniz.
  2. GenericServlet sınıfı extend edebilir ve  kullanmaya başlayabilirsiniz.
  3. HttpServlet sınıfı extend edebilir ve  kullanmaya başlayabilirsiniz.
Tanımlanan bu 3 farklı yöntemden en yaygın olarak kullanılanı HttpServlet sınıfını kullanmaktır. Sebebi ise sizlerin kullanımı için http request' lerine özgü olarak sunulan doGet(), doPost(), doHead() metotlarını sağlamasıdır. 

Proje yapısının oluşturulması



Servlet Oluşturulması

Servlet oluşturmanın 3 farklı yolu bulunmaktadır.  Bu örnekte tanımlanan 3 farklı yöntemden en yaygın olarak kullanılanı HttpServlet sınıfını kullanılmaktadır. Sebebi ise sizlerin kullanımı için http request' lerine özgü olarak sunulan doGet(), doPost(), doHead() metotlarını sağlamasıdır. 

web.xml dosyasının (deployment descriptor)

deployment descriptor dediğimiz şey bir xml dosyasıdır. İçerisinde Web Container' in kullanabileceği servlet hakkında ki bilgilerini barındırır. Web container bu bilgileri doğal olarak bir xml dosyasından parse ederek elde eder. 
Örnek bir tane web.xml dosyası bu şekilde tanımlanabilir.




web.xml dosyası içerisinde pek çok eleman bulunabilir. Bizim yukarıda ki örnekte kullandığımız elemanları kısa olarak anlatmak gerekirse; 

<web-app> uygulamanın tamamını temsil eder. 
<servlet> <web-app> tag' inin alt elemanıdır ve uygulamadaki servlet'i temsil eder. 
<servlet-name> <servlet> tag' inin alt elemanıdır ve uygulamada ki servlet' in adını temsil eder.
<servlet-mapping> <servlet> tag' inin alt elemanıdır ve uygulamada ki servlet' in map edilmesini sağlar.
<url-pattern> <servlet-mapping> tag' inin alt elemanıdır.

web.xml içerisine tanımladığımız bu ayarlamaları yazmış olduğumuz java sınıfı içerisinde de tanımlayabiliriz. 

@WebServlet(name = "DemoServlet", description = "DemoServlet", urlPatterns = "/DemoServlet")



Sanırım temel anlamda bir Servlet tanımlanması için bu yapı uygundur. 





20 Mayıs 2015 Çarşamba

Servlet Nedir?

Java Servlet' leri Web veya Application server üzerinde çalışan ve web tarayıcısından gelen bir istek ile bir başka HTTP istemcisi ve database veya başka bir uygulama arasında duran ara bir katman olarak düşünebilir.

Servlet' leri kullanarak kullanıcılardan form verilerini toplayabilir, database veya başka bir kaynaktan topladığınız verileri düzenleyebilir ve bunları kullanarak dinamik bir web sayfası oluşturabilirsiniz.

Bilindiği gibi Java Servlet' leri temel de Common Gateway Interface (CGI) yapısını uyarlamış öteki program veya yapılarla aynı işlevi görür. Ancak iş doğrudan bu iki yapıyı kıyaslama noktasına gelince görülür ki Servlet' lerin pek çok avantajı bulunmaktadır. 


  • Servlet tarafında performans açısından gözle görülür bir üstünlük söz konusudur. 
  • Servlet' ler için herbir client isteği için ayrı bir process oluşturulması gerekmemektedir. 
  • Servlet' ler Java dili ile yazıldığından dolayı platform bağımsız olarak çalışabilmektedirler. 
  • Java Security Manager server tarafında bulunan kaynakların korunmasına yönelik bir takım kısıtlamaların kullanımına zorladığından dolayı servlet' ler için güvenli bir yapı sağlarlar dememiz sanırım yanlış olmaz. 



Servlet Mimarisi

Servlet yapısı ile neleri yapabiliriz?


  • Client tarafından gönderilen veriyi okuyabilirsiniz. Bu senaryo içerisinde bu data bir içerisinde bir HTML form bulunduran bir web sayfası veya bir applet, ya da bir HTTP programı olabilir. 
  • Client tarafından gönderilen HTTP isteklerini okuyabilirsiniz. Bu senaryo içerisinde bu içerik cookie, media type, tarayıcı tarafından tanınan başka bir sıkıştırılmış başka bir format olabilir. 
  • Kaynak ne olursa olsun, elde edilen data' yı işlebilir ve buradan bir result elde edebilirsiniz. Bu senaryo içerisinde yer alan süreç database' den sorgulama yapma, veya başka bir web service ile iletişime geçme gibi adımları içerebilir. 
  • Client' e veri gönderebilirsiniz. Bu senaryo içerisinde ki bu içerik pek çok formatta bir dosya yapısı olarak karşımıza çıkabilir. Bu dosya yapıları HTML veya XML, binary veriler gibi pek çok farklı yapıda olabilir. 


Servlet package yapısını anlayalım

Java Servlet' ler temel de iki farklı package yapısı kullanılarak oluşturabilir. Bunlar javax.servlet ve javax.servlet.http. Bu package yapıları Java EE dünyasının standart yapılarıdır. 















17 Mayıs 2015 Pazar

Java EE Temel Kavramlar

Kurumsal Java, kısa adıyla JavaEE büyük yazılım projelerinde tercih edilen ve Java teknolojilerini bir araya toplayan teknolojinin ve standardın adıdır. İlgili dökümanlar da J2EE ve JEE kısaltmalarına da denk gelebilirsiniz. Bunlar da kurumsal Java için kullanılmaktadır. J2EE 1.2 Sun tarafından 1999 yılında 10 adet şartname ile yayınlanmış olup, J2EE'nin ilk versiyonudur.

Java EE Bileşenleri

  • Applet : Web tarayıcı üzerinde çalışan GUI uygulamalarıdır.
  • Application : İstemci bilgisayarda çalışan yazılımlardır. GUI uygulaması olabileceği gibi arkaplanda çalışan servislerde olabilir.
  • Web Application : Web konteynerda koşturulan ve HTTP isteklerini karşılayan yapılardır. (Servlets, JSF gibi )
  • EJB : (Enterprise Java Bean ) EJB konteynerin Transaction destekli iş mantığını yöneten bileşenlerdir.
Servlet
Java Servlet, JavaEE’de Java Servlet API’si ile uyumlu çalışan bir sınıftır. Sun Microsystems tarafından 1997 yılında ilk versiyonu geliştirildi. Servlet güncel versiyonu 3.1’dir. Servlet dinamik sayfalar oluşturmak için kullanılıp, Servlet konteynerını destekleyen herhangi bir web sunucuları üzerinde çalıştırılabilir.. Java’da dinamik sayfalar oluşturmak için kullanılan yöntemlerden biridir.
Applet
Java Applet Java dilinin internet üzerinde bir çok uygulamalara grafiksel arayüz oluşturmak için kullanılan bir sınıfıdır. Grafik kullanıcı ara birim programları günümüzde internet üzerinde güvenilir sistemlerde java applet sayesinde oluşturulmaktadır. Java Applet ile kullanıcılar internet üzerinde güvenli bir şekilde bir uygulama için girdi ve çıktı işlemlerini yapabilmektedirler. Ayrıca Java Applet ile girilen verilerin işlenmesi mümkündür. PHP ve ASP gibi diğer script dillerinde veri girişleri HTML formlarından sağlanıp daha sonra işlenmesi için çeşitli metotlarla programların bulunduğu aktif server dosyalarına gönderilmektedir. Bu durumda iki katmanlı ( birinci statik, ikincisi dinamik olan ) bir yapı oluşmaktadır. Java Applet ise bu tür uygulamalarda tek katmanlı bir yapıya sahiptir. Java Appleti ile hem verileri almak hem de bunları işlemek mümkündür.
EJB
Enterprise JavaBeans (EJB) veya Türkçe karşılığı ile işe yönelik yeniden kullanılabilir Java elemanları iş uygulamalarının modüler bir şekilde kurulması için tasarlanmış yönetilebilir sunucu-yanı (server-side) eleman mimarisidir.
EJB Java Enterprise Edition içinde yer alan çok sayıdaki Java API (Java uygulama programlama arayüzü) tanımlamalarından bir tanesidir. EJB sunucu-yanı bir model olup uygulamaların iş mantığını içerir.
EJB tanımlamasının ana amacı, genelde iş uygulamalarında bulunan arka plandaki (back-end) kodun yerine getirilmesi için standart bir yol sağlamaktır. Bu kodlar yazılımda aynı tür problemin sıklıkla meydana geldiği ve programcılar tarafından çözümlerinin tekrarlanarak yerine getirildiği kısımları teşkil eder. Bu sebeple, Enterprise JavaBeans EJB devamlılık, işlemsel bütünlük ve güvenlik gibi yaygın konuları standart yollarla desteklemek ve programcılara belli bir problemı inceleme serbestisi vermek üzere tasarlanmıştır.

Java EE Konteynerler

  • Applet Container : Web tarayıcılarının büyük bir çoğunluğu tarafından desteklenen ve applet uygulamalarını çalıştıran konteyner.
  • ACC : (Application Client Container) Masaüstü uygulaması olabildiği gibi arkaplan uygulaması da olabilir. Web konteynere erişebilir.
  • Web Container: Web bileşenlerini işleten servisleri yönetir. Aynı zamanda Servlet konteyneri olarakta bilinir.
  • EJB Container : Java EE projelerinde iş mantığını uygulayan ve EJB nesnelerinin yönetiminden sorumlu birimdir.

Konteyner Servisleri

  • JTA : Transaction yönetimi ile ilgili kütüphaneleri sunmaktadır.
  • JPA : ORM(Object Relational Mapping) standart kütüphanesini sağlayan ve Java sınıflarıyla veritabanları arasında birleştirme görevini yapan birimdir. Veritabanları üzerindeki verilere ulaşmak için JPQL dilini sunar.
  • JMS : Konteyner bileşenlerinin asekron olarak haberleşmesine imkan verir.
  • JNDI : (Java Naming and Directory Interface) İsimlendirme ve dizin erişimi için Java SE içinde de bulunana standart bir erişim yolu sunmaktadır.
  • JAF : (JavaBeans Activation Framework) JavaMail tarafından kullanılan farklı MIME tiplerini yönetmek üzere oluşturulmuş bir kütüphanedir.
  • JavaMail : Eposta göndermek üzere özelleştirilmiş bir kütüphane servisidir.
  • JCA : Java EE uygulamalarının ihtiyaç duyacağı veri kaynağı erişim sağlayacılarıdır.

Diğer Kavramlar ve Kısaltmaların Açıklamaları

Bu kısımda güncelleme olacak.
Kaynaklar

Java ile Web Uygulaması Geliştirme 101

Web uygulamaları dinamik web siteleri yapmak için kullanılır. Java, Servlet ve JSP gibi yapılar ile web uygulamaları geliştirilmesine destek sağlıyor. Statik sayfaları HTML ile kurabiliriz ama dinamik sayfalar istiyorsak web uygulamaları geliştirmemiz gerekiyor.
Bu yazının amacı Java Web Uygulamaları geliştirmeye nasıl başlayacağımız ve bu süreçte Servlet ve JSP gibi yapıları nasıl kullanacağımıza basit anlamda değinmek ve örnekler ile göstermeye çalışmak.
Web Sunucu ve İstemci (Web Server and Client)
Web sunucusu istemciye gelen istekleri işlemek ve istemciye geri yanıt göndermeyi sağlayan bir yazılımdır. Apache en çok kullanılan web sunucu yazılımlarından biridir. Web sunucusu fiziksel makineler üzerinde çalışıp, belirli bir port üzerinden istemci isteklerini dinler.
Web istemcisi, sunucu ile iletişimi sağlayan bir yazılımdır. En çok kullanılan web istemcilere Chrome, Firefox, Safari örneklerini verebiliriz. URL aracılığıyla sunucudan bir şey talep ettiğimizde, web istemcisi, istek oluşturur ve sunucuya gönderir, sunucudan gelen cevabı işler ve kullanıcıya sunar.
HTML ve HTTP
Web sunucu ve istemcisi iki ayrı yazılım olduğundan dolayı aralarındaki iletişim için ortak bir dil olmalıdır. HTML istemci ve sunucu arasındaki ortak dildir ve açılımı HyperText Markup Language’dir.  (Wikipedia’da Zengin Metin İşaret Dili olarak Türkçe’ye çevrilmiş.)
Web sunucusu ve istemcisi arasındaki ortak iletişim protokolü olan HTTP (HyperText Transfer Protocol), aralarındaki iletişimi sağlamaktadır. HTTP, TCP/IP iletişim protokolü üzerinde çalışır.
Bazı önemli HTTP istekleri aşağıdaki gibidir:
  • HTTP Method
  • URL
  • Form Parameters
Basit HTTP Sorgusu :
GET /FirstServletProject/jsps/hello.jsp HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
Bazı Önemli HTTP yanıtları
  • Status Code (Durum Kodu) – Tam sayılar, isteğin başarılı olup olmadığını gösterir. Başarı 200, Sayfa Bulunamadı 404, Erişim Yasağı 403 gibi.
  • Content Type (İçerik Türü) – html, resim, pdf, metin vb. ayrıca MIME türü olarakta geçer.
  • Content (İçerik) – İstemci tarafından işlenen ve kullanıcıya gösterilen gerçek veri.
Örnek HTTP Yanıtı:

200 OK
Date: Sat, 10 Jan 2015 01:33:26 GMT
Server: Apache-Coyote/1.1
Content-Length: 309
Content-Type: text/html;charset=US-ASCII
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=Date: Sat, 10 Jan 2015 01:35:26 GMT
</h3>
</body>
</html>
Yukarda örneğini verdiğim HTTP yanıtına bakarsanız Content-Type etiketini içermekte. Ayrıca MIME Type olarak adlandırılan bu etiket sunucu, istemci tarafından gönderilen verinin türünü içerir. İstemcinin kullanıcıya sunacağı veriyi işlemesinde yardımcı olur. Çoğunlukla kullanılan MIME türlerinden bazıları text/html, text/xml, application/xml vb.

URL

URL, (Uniform Resource Locator, Birörnek Kaynak Konumlayıcı, Tekdüzen Kaynak Bulucu), İnternet’te bir kaynağa (belge veya resim gibi) rastgelen, standart bir formata uygun bir karakter dizgisidir. Örneğin bu sayfanın Vikipedi’deki URL’si aşağıdaki gibidir:
http://tr.wikipedia.org/wiki/URL.
HTTP URL’leri, daha yaygın tabirle web adresleri, genellikle İnternet tarayıcılarının adres kutusunda gösterilir. http://tr.wikipedia.org/wiki/URL
http://localhost:8080/FirstServletProject/jsps/hello.jsp
http:// – URL’in ilk bölümü olan bu kısım sunucu ile istemci arasında kullanılacak iletişimi protokolünü sağlar.
localhost – Sunucunun özel adresi olup sunucuya özel IP adresine sahip olan sunucuya ulaşmamazı sağlar.(hostname).
8080 – Sunucunun dinlendiği bağlantı noktasıdır.(Port) İsteğe bağlı olarak değiştirilebilir. 0 – 1023 aralığında port numarası belirlenebilir. En çok bilinen ve kullanılan Port numaraları ve kullanım yerlerine örnek verecek olursak HTTP için 80, HTTPs için 443, FTP için 21.
FirstServletProject/jsps/hello.jsp - Sunucu tarafından istenen kaynak dosyaları. Statik bir HTML olabileceği gibi PDF, PHP, JSP, Servlet vs olabilir.

Neden Servlet ve JSP Yapılarına İhtiyacımız Var ?

Web sunucuları statik HTML sayfaları için iyi ama veritabanına veri eklemek gibi işlemleri yapıp dinamik sayfalar oluşturabilmek için farklı bir araca ihtiyaç duyuyoruz. Dinamik içerik üretirken kullanabileceğimiz birçok programlama dili ve kütüphane bulunmakta, bunlardan bazıları PHP, Python, Ruby On Rails, Sinatra, Django, Java Servlet vs JSP vs.
Java Servlet ve JSP, sunucu taraflı teknolojilerdir, sunucuya dinamik cevap ve veri işleme gibi özellikler sağlar.
Java servletJava EE‘de Java Servlet API’siyle uyumlu bir Java (programlama) sınıfı olupHTTPistemlerine cevap vermek için kullanılır. Belirli bir istemci-sunucu protokolüne bağlı olmamasına rağmen genelde bu protokolle kullanılır. Servlet kelimesi genelde HTTP servletyerine bu yüzden kullanılmaktadır.[1] Dolayısıyla bir yazılım uzmanı, Java platformusayesinde servleti bir Web sunucusuna dinamik içerik eklemek için kullanabilir. Üretilen kod genelde HTML olsa da bazen XML de olabilir. Servletler, CGI ya da ASP.NET gibi Java-dışı Web içerik teknolojilerinin Java‘daki karşıt üründür. Servletlerle HTTP çerezleri veya URL yeniden yazımı kullanılarak oturum değişkenlerinin sistem durumunu birçok sunucu hareketleri boyunca koruması sağlanmaktadır. http://tr.wikipedia.org/wiki/Java_Servlet
JSP, Web sayfalarında Java dilini kullanarak dinamik web sayfaları oluşturmamızı sağlayan bir Java teknolojisidir. Jsp (Java Server Page) Html dili içine yazılır ve özel taglar kullanarak ” <% . . . . . . %> ” yazılır. http://blog.burakkutbay.com/jspye-giris-java-server-pages-nedir-ders-1.html/

Servlet ve JSP ile İlk Web Uygulamamız

İlk uygulamamızı “Eclipse IDE for Java EE Developers” üzerinde geliştireceğiz.  Bu linkten işletim sisteminize uygun Eclipse’i indirebilirsiniz. Eclipse’i indirdikten sonra Servlet sunucu taraflı teknoloji olduğundan dolayı bize Servlet teknolojisini destekleyen bir web konteyner gerekecek. Bu nedenle Apache Tomcat sunucusunu kullanacağız. Tomcat 7.0 versiyonunu kullanıyorum onu da bu linkten indirebilirsiniz.
Eclipse ve Tomcat’i indirdikten sonra yapılandırma ayarlarını yapmanız gerekiyor. Eclipse Preference sayfasından Server -> Runtime Environments yolunu izleyerek Server Runtime Environments sayfasında bulunan Add butonuna tıkladıktan sonra Apache Tomcat 7.0 seçerek Next diyoruz ve açılan sayfada Browse butonu ile indirdiğimiz Tomcat klasörünü seçiyoruz. Seçtikten sonra Finish butonu ile işlemimizi bitiriyoruz. Tomcat projelerimiz için hazır durumda.
Ayarlamalarımızı yaptığımıza göre ilk projemiz için aşağıdaki adımları uygulamamız gerekiyor.
File – New -> Project -> Web -> Dynamic Web Project
Burada dikkat etmemiz gerekenler, Target Runtime’da Apache Tomcat 7.0’ı, Dynamic Web Module Versiyon kısmında 3.0’ı seçmemiz.Bunları seçtikten sonra Finish butonuna tıklayarak projemizi oluşturabiliriz.
File -> New -> Servlet yolunu izleyerek ilk Servlet’ımızı oluşturacağız. Servlet oluştururken package ve class name alanlarını dolduruyoruz. Package kısmını com.yusufcakmak.first, Servlet kısmını da FirstServlet şeklinde doldurdum. Finish butonuna tıkladığımızda Servlet iskelet kodu üretilecek, bu yöntem ile pratik bir şekilde üretiyoruz.
doGET() metodumuz içinde yazacağımız kodlarımız ve HTML kodları ile gelecek HTTP GET sorgusu için dinamik veri üreteceğiz. İlk Servletimiz aşağıdaki gibi olacak.
Daha sonra projemize sağ tıklayarak Run As -> Run on Server adımlarını izliyoruz. Çıkan seçeneklerden Tomcat 7.0’ı seçiyoruz ve Finish diyoruz.
Finish dedikten sonra projemiz sunucu tarafından çalıştırılacak ve karşımıza aşağıdaki görseldeki gibi bir html sayfası çıkacak.
FirstServlet
Sayfayı yenilediğimizde dinamik olarak Date alanında bulunan sürenin değiştiğini görebiliriz. Eclipse dışında herhangi bir tarayıcı ile de aynı URL ile bu sayfaya ulaşabilirsiniz.
doGet() metoduna baktığımız zaman PrintWriter objesi ile bir HTML sayfası  ve dinamik bir veri yarattığımızı görebiliriz. Aynı zamanda istemciye cevap gönderdiğimizi görebiliriz. Sonuç olarak Servlet bizim için bir HTML sayfası üretiyor ve istediğimiz cevabı istemciye iletiyor.
Başlangıç için buraya kadar yaptıklarımız yeterli ama istemciye verilecek cevap büyük dinamik veriler içeriyorsa bunları korumak ve okumak zor olacaktır, hatalara neden olabilir. Bu durumda devreye JSP yapısı giriyor.
JSP sunucu taraflı bir teknolojidir ve dinamik verileri istediğimiz yerde kullanmamızı sağlar. JSP yazmak HTML yazmak gibi kolaydır. Yukarıda yaptığımız Servlet gibi ilk JSP örneğimizi aşağıda bulabilirsiniz.
jsps/hello.jsp
JSP dosyamızı WebContent klasörü altında oluşturacağımız jsps klasörü içinde tutuyoruz. Projemizi tekrar Tomcat sunucumuzda çalıştırıp aşağıdaki URL’ye eriştiğimizde görseldeki sayfa karşımıza çıkacak.
http://localhost:8080/FirstServletProject/jsps/hello.jsp
helloJSP
Projemizin Eclipse’teki dosya yapısı da aşağıdaki görseldeki gibi olacaktır.
Project
Örnek Proje dosyalarını bu linkten indirip, deneyebilirsiniz.

Web Konteyner (Web Container)

Tomcat bir Web Konteynerıdır. Web istemcisinden sunucuya bir istek yapıldığında web konteynerı isteği karşılar ve doğru kaynak dosyalarını bulup istemciye iletilecek olan cevabı düzenler ve gerekli dosyaları bu cevap işlemi içerisinde kullanarak web sunucusuna iletir. Web sunucusu da bu cevabı web istemcisine iletir.
Web Konteyner’ı isteği aldığında, gelen istek Servlet içinse HTTPServletRequest ve HTTPServletResponse adında iki nesne oluşturur. Sonrasında doğru servlet bulunur ve istek için bir iş parçacığı(thread) oluşturulur. Bu işlemden sonra  HTTP yöntemi temelli servlet service() metodu çağırılır, service() methodu da doGet() ve doPost() metodlarını çağırır. Servlet dinamik bir sayfa oluşturur ve  bunu gönderilecek cevapta kullanır. Servlet iş parçacığı tamamlandığında konteyner, HTTP yanıtına çevirir ve istemciye geri gönderir.
Web Konteynerları tarafından yapılan İletişim Desteği, JSP Desteği, Yaşam Döngüsü ve Kaynak Yönetimi gibi önemli görevler bulunmaktadır.
Web Uygulaması Dizin Yapısı
Java Web Uygulamaları, Web Arşivi(WAR) olarak paketlenir ve tanımlanmış bir yapıya sahiptir.Dinamik web projelerini WAR formatında çıkarabilir ve sıkıştırılmış dosyayı tekrar açarak dosya yapısına bakabilirsiniz. Görüntü aşağıdaki görsel gibi olacaktır.
web.xml dosyası oturum zaman aşımı ayarları, güvenlik yapılandırmaları, karşılama sayfaları gibi işlemler için haritalama dosyasıdır.
Java ile Web Uygulaması Geliştirme 101 yazımı burada bitiriyorum. Daha sonraki yazılarımda Servlet, JSP konularıyla ilgili daha detaylı bilgiler ve örnekler paylaşacağım. Bunlardan sonra ise Spring ile ilgili yazılar yazmayı düşünüyorum.
Öneri Kaynaklar: