17 Mayıs 2015 Pazar

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:

Hiç yorum yok:

Yorum Gönder