10

Oca

2015

Java ile Web Uygulaması Geliştirme 101




Web uygulamaları dinamik web siteleri geliştirmek 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ı:

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 servlet, Java EE‘de Java Servlet API’siyle uyumlu bir Java (programlama) sınıfı olupHTTP istemlerine 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:

Java Web Application Tutorial for Beginners http://www.journaldev.com/1854/java-web-application-tutorial-for-beginners

Java Servlets – http://www.tutorialspoint.com/servlets/

Java Servlets – http://tutorials.jenkov.com/java-servlets/

JSP – http://www.tutorialspoint.com/jsp/

JSP – http://www.jsptut.com/

About Author

Yusuf Çakmak

Teknoloji ile ilgilenmeyi seven, herhangi bir teknolojiye kendini ait hissetmeyen, zaman buldukça farklı dilleri, kütüphaneleri, cihazları denemeye çalışan kendi halinde biriyim.

 


6 Responses

  • Guvercin

    Merhaba hocam öncelikle ellerinize sağlık. ben ToDoList programının daha basit halini yapacam. Bunu Netbeans ya da Eclipse de yapmam gerekiyor. Bunu Birçok kişi kullanabilir olması lazım. Şöyle anlatayım: Karşılıklı olacak. Ortak bir havuzda olur. Comment mantığı vardır, ya da thread de denir, yani eklenen maddeler vardır; ekleyeni, saati ve sırası bellidir, diğer kişi buna alt kırılım olarak cevap verir, bir diğeri de bu kırılımın da altında bir kırılım olarak cevap verir. Bir noktada karşılıklı olarak madde kapanır. Yani yukarıdaki yorumlara ayrı ayrı cevap verince her bir yorumun altına alt kırılım oluşması gibi… Böyle bir proje yapmam lazım bunu nasıl yapabilirim soket program mı web servis mi kullanmalıyım? yardımcı olursanız çok memnun olurum.

  • Tayfur

    Çok faydalı bir makale elinize sağlık. Sizce asp.net ile yapılmış bir web uygulamasına rakip olabilir mi java servlet? asp.net’e göre +’ları ve -‘leri nelerdir?

  • Anonim

    Javada bir program hazirladim bunu interner sitesinde yayinlamak istiyorum nasil yapabilirim?

  • Fatime

    Bu işlemleri Netbeans ile yapsaydık hangi farklılıklar olurdu

    • Yusuf Çakmak

      IDE seçimi süreci değiştirmez, projeyi yaratırken farklı adımlar izlemeniz gerekebilir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir