Bu griş bölümünde, önce
kitabımızın kısa tarihçesi sunulacaktır. Daha sonra kitabın yapısı
tanıtılacak ve kitaptaki konular özetlenecektir. En son olarak kitabın
Internet desteği hakkında bilgi verilecektir.
Halûk Gümüşkayanın Gözüyle Kitabın
Tarihçesi
Bu kitabın ortaya çıkması, 1997
yılının Mayıs ayının sonunda Uludağ Üniversitesi Elektronik Mühendisliği
Bölümünden ayrılıp Gebzedeki TÜBİTAK-Ulusal Elektronik ve Kriptoloji
Araştırma Enstitüsünde (UEKAE) Uzman Araştırmacı olarak göreve
başladığım tarih ile başlamaktadır. Yeni görevimde benden istenen,
Türkiyeyi kapsayan özel bir geniş alan ağında çalışacak bir ağ yazılımı
için bir yazılım grubu oluşturmamdı. PC/Windows ve Sun
Ultra/Solaris-UNIX gibi farklı bilgisayarlar ve platformlarda, grafik
kullanıcı arabirimi ve bilgisayarlar arası haberleşmeyi sağlamamız ilk
isteklerdi. Yazılımların diğer önemli bir temel özelliği, eşzamanlı (concurrent)
çalışacak ve onlar, belki yüzler mertebesinde işi ele alabilecek sunucu
yapılarını içermesiydi. Sistem nesneye yönelik bir mimari ile
tasarlanmalıydı. Yazılım en üst düzeyde güvenlik yapılarına sahip
olacaktı. Yazılımların önemli bir kısmı platform bağımlı olmamalıydı,
yani PClerde geliştirilen ve çalışan programlar Sun Ultra makinelerinde
de çalışabilmeliydi.
Bu temel gereklerle 1997 Haziran
ayında UEKAEde yoğun olarak çalışmalarıma ve araştırmalarıma başladım.
UNIX altında o zamanki yaygın olan C/C++ dilleri, geliştirme ortamları
ve mevcut insan gücümüz ile bu işin ne kadar zor olduğunu biliyordum.
Yeni teknoloji arayışlarına başladım. Dünyada 1995te duyurulan bir Java
rüzgarı esmeye başlamıştı. Java konusunda yaptığım araştırmalarımla ve
yazdığım basit soket tabanlı ağ programları sayesinde Java ile bu büyük
projenin altından kalkabileceğimize çok güçlü olarak inandım. Sun
firmasının tanımına göre Java basit, nesne-yönelimli, sağlam, güvenli,
mimari-bağımsız ve taşınabilir, yüksek-performanslı, yorumlanan,
çok-threadli ve dinamik bir dildi ve projemizde bir enterprise
ağ yazılımı için istenen bütün en temel gerekleri sağlamaktaydı. Java
basit olduğu için çok uzmanlık da gerektirmiyordu. Programcıdan birçok
ayrıntıyı gizliyordu. Bilgisayar mühendisliği eğitimi almamış elektronik
mühendisleri veya başka dallardaki mühendislerle bile ciddi ağ
yazılımlarını hızlı ve güvenli olarak geliştirmek mümkün idi.
Başladığımızda proje grubumuzda tek bir bilgisayar mühendisi yoktu.
Uludağ Üniversitesi Elektronik Mühendisliğinden yeni mezun kabiliyetli 3
öğrencimle yola çıkmıştık. Daha sonra katılan ilk programcılar da
elektronik temelliydi.
1997 yılının Temmuz ayında
Javayı projemizde kullanmaya karar vermiştim. Her yeniliğe ilk önceleri
gelen tepki UEKAEde Javaya da geldi. Java için geliştirme ortamı yok,
Java yavaş, Java
deniliyordu. Ama başta ben ve o zaman bana ve Javaya
inanan, ileriyi gören çok az sayıdaki programcı arkadaş, Java
kararımızda ısrar ederek, Javaya yapmış olduğumuz yatırımlara devam
ettik. Çünkü o tarihte, yukarıda sayılan Javanın temel özelliklerinden
dolayı Javanın parlak geleceğini görmüştük
UEKAEdeki son yılıma doğru
UEKAE çalışanlarına dışarıdan getirilen bir eğitimciyle özel Java
dersleri verildi ve onlarca programcı bu eğitime katıldı
Ben 2002
Temmuzunda ayrılırken UEKAEde birçok projede, özellikle ağ
projelerinde, Java artık tartışmasız ve alternatifsiz tek seçim olarak
kullanılıyordu
UEKAEdeki projelerimizde Javanın yeni olması ve
gelişmesinden dolayı sıkıntılar yaşamıştık ama genel olarak
bakıldığında, büyük ve zor projelerimizi Java kolaylaştırmıştı.
UEKAEdeki projelerimizde Javayı
kullanmaya yönelik çalışmalarımın yanında, 1997 yılının Eylül ayında
Marmara Üniversitesi Bilgisayar Mühendisliği Bölümünde Open Systems
Networking adı altında, dışarıdan öğretim elemanı olarak, bir yüksek
lisans dersi vermeye başladım. Dersi son sınıf öğrencileri de alıyordu
ve derse ilgi çoktu. Dersin resmi olmayan adını Network Programming
with Java olarak koymuştum. Marmarada aynı adla 3 yıl o dersi
verdim. Ayrıca bir dönem (1998, ilkbahar) Distributed Systems
adındaki dersimde de Javayı kullandım. Marmarada yürütmüş olduğum bir
yüksek lisans tezinde ve yaptırmış olduğum çeşitli lisans tezlerinde
Java teknolojilerini kullandırdım. Üniversitedeki derslerim ve
yaptırdığım öğrenci projelerim, UEKAEdeki projelerimin bazı
kısımlarının alt yapılarını hazırladı. UEKAE ile Marmara Bilgisayar
Mühendisliği Bölümü arasında güzel bir bağ oluşmuştu.
Javayı UEKAEdeki projelerimde
ve Marmara Bilgisayar Mühendisliği Bölümünde derslerimin yanında
akademik çalışmalarımda da kullandım ve bu konuda 10 tane ulusal ve
uluslararası konferansta sunulan çalışmamız oldu.
Java konusunda bir kitap yazma
düşüncem 1997 yılında başlamıştı, ama Java özellikle o yıllarda çok
süratli hareket eden bir hedefti (moving target), yani sürekli
değişmekteydi ve büyümekteydi. Java bir dilin dışında bir platform,
enterprise ve mobil cihazların da alt yapısı olduğu için çok değişik
yönlerde gelişmekteydi. Hem bu konuda çok kitap yazılıyordu ve sayısız
Internet kaynağı vardı. Bununla beraber kitaplar ve Internet kaynakları
kısa sürede eskiyordu. Türkçe bir kitap yazmak, bir çok açıdan anlamlı
ve cazip değildi ve ayrıca çok zorlukları da vardı. Bütün bunlara rağmen
yaklaşık son 6 yılımda yaşadığım tecrübemi kitaplaştırmak ve bunları
paylaşmak istiyordum. Java ile ağ programcılığı uzayına bir pusula
mahiyetinde bir çalışma ile UEKAEdeki geçmişime ait önemli bir hatırayı
vücuda getirmek istiyordum.
Bu isteğimin gerçekleşmesindeki
ortağım, kitabın diğer yazarı Ömer Boyacı ile daha liseden başlayan
irtibatım, biz farkında olmadan kitabın alt yapısını hazırlıyordu. Ömer,
1999 yılında Bursa Özel Nilüfer Fen Lisesini bitirdikten sonra Bilkent
Bilgisayar Mühendisliğini kazanmıştı. Bilkent ülkemizde Javayı erken
gören üniversitelerdendi ve Ömer daha birinci sınıftan itibaren Javayı
öğrenmeye başladı. Java, ağ programcılığı, bilgisayar ağları ve diğer
konularda bana çeşitli sorular soruyordu. Bu şekilde sürekli e-posta ile
irtibatımız devam ediyordu. Sonunda 2001 Ağustosunda ortak kitap yazma
işine karar verdik. Bu konudaki kitaplar genellikle birçok yazarla, 2,
3, 4 hatta 11 [Darby 2001 (D1.8)] kişilik bir takımla yazılabiliyordu.
Çünkü çok geniş bir konu yelpazesinde (temel Java, bilgisayar ağları ve
TCP/IP, temel Web kavramları, appletler, ağ yazılımları haberleşme
modelleri, threadler, Java I/O, TCP/UDP soket programcılığı, JDBC, RMI,
Servletler/JSP ile Web programcılığı) yazıyorsunuz. Ben ve Ömer 11 kişi
kuvvetinde, büyük bir sinerji ile çalışarak bu eseri ortaya çıkardık.
2002 Ağustos ayında Fatih
Üniversitesi Bilgisayar Mühendisliği Bölümünde Doçent olarak göreve
başladım ve sonbahar döneminde vermiş olduğum CENG 463 Network
Programming ve CENG 217 Object Oriented Programming
derslerinde Javayı kullandım. 2003 bahar dönemindeki CENG 102
Computer Programming II dersinde temel Javayı öğrettim ve CENG
302 Software Engineering dersinde de Java dersin
programlama diliydi. Kitabımızın son çalışmalarını Nisan 2003te
tamamladık.
Özetle kitabımız aşağıda
sıralananlar ile yaklaşık son 6 yılımın bir özeti olmuştur:
1.
TUBİTAK-UEKAEdeki 5 yıllık ağ
projeleri tecrübem
2.
Marmara Üniversitesi Bilgisayar
Mühendisliği Bölümünde 3 yıllık ders verme tecrübem
3.
Java temelli akademik
araştırmalarım ve 10 tane konferans yayınım
4.
Fatih Üniversitesi Bilgisayar
Mühendisliği Bölümündeki tecrübem
Ömer Boyacının
Gözüyle Kitabın Tarihçesi
Öncelikle bu kitabı satın
aldığınız için (eğer almadıysanız okuduğunuz için ;-) ) teşekkür ederim.
Elinizde bulunan kitap çok dikkatli, titiz ve yorucu bir çalışmanın
ürünüdür. Bu kitap projesine başladığımda ne kadar zor bir işe
giriştiğimin farkında değildim. Kitapta bulunacak olan bölümlerin
listesini hazırlamıştık ve bu bölümleri yazmak bana hiç de zor gibi
görünmüyordu. Çünkü, bütün konuları biliyordum, daha doğrusu öyle
zannediyordum. Bölümleri yazmaya başlayınca şunu gördüm, bir konuyu
bilip uygulamak ile o konuyu anlatabilmek tamamen farklı iki olaymış.
JSPyi bilebilir ve JSP ile oldukça gelişmiş uygulamalar yazabilirsiniz
ama JSPyi anlatmaya kalktığınız zaman mesele tamamen değişiyor.
Öncelikle, konuya tam olarak hakim olmanız, en küçük ayrıntıyı bile
bilmeniz gerekiyor. Ayrıca, konuyu anlatırken basit fakat çarpıcı ve
konunun özünü verebilen örnekler bulmanız gerekiyor. Burada şunu açıkça
belirtmek istiyorum, Bilkent Bilgisayar Mühendisliğinden mezun
olabilmem için gereken bitirme projesini 2 günde yaptığım halde, bu
kitaptaki bazı örnekleri bulmak için bir haftadan fazla düşündüm,
araştırdım ve çeşitli denemeler yaptım.
Peki, niçin bu kadar zorluğa
girdim. Bu kadar ciddi çalışmanın arkasında eski acı bir hatıra yatıyor.
Lise birinci sınıfta programcılığa merak saldığım zaman bir Delphi
kitabı almıştım ve heyecanla okumaya başlamıştım. Bilgisayar
programcılığına ilk defa giren birisi için bilgisayara bir şeyler
yaptırmak gerçekten son derece heyecan verici bir duyguydu. Ne var ki,
iki yıl sonra Bilkente geldiğimde Java dilini öğrenmeye başladık ve ben
birçok yabancı kaynak okudum. Bu okuduğum eserlerin ışığında lisede
okuduğum Delphi kitabının ne kadar basit, uluslararası standart ve
kaliteden yoksun, yanlışlarla dolu ve öğreticilikten uzak olduğunu fark
ettim. Eğer benim elime lisede uluslararası kalite ve standartlarda bir
kitap geçmiş olsaydı, yazılım tasarım ve geliştirme konusunda çok daha
hızlı ilerleyebilecektim. Ben bu acı hatırayı hatırladıkça, kitabımızın
kesinlikle ama kesinlikle dünyadaki benzerlerinden çok daha iyi, en
azından onlar kadar kaliteli olması gerektiğine inanıyordum. Kısacası,
bu kitaba çok emek sarf ettik ve ben şunu rahatlılıkla söyleyebilirim
ki, bu kitap ele aldığı konuları doğru ve tam olarak anlatmaktadır.
İnşallah, sizin de işinize yarayacak ve yeni konuları öğrenmenizde bir
vesile olacaktır.
Bu kitabın ortaya çıkmasında
emeğe geçen insanların hepsine teşekkürlerimi sunuyorum. Başta Halûk
Hocama, beni bu tür bir kitap projesine motive ettiği ve bu işi
yapabileceğime yüreklendirdiği için teşekkür ederim. Daha sonra,
kendilerinden ders aldığım Bilkent Üniversitesi öğretim üyelerinden
Sayın Prof. Dr. Halil Altay Güvenir, Dr. Uğur Doğrusöz, Dr. Ali Aydın
Selçuk, Dr. Bedir Tekinerdoğan, Dr. David Davenport, William Sawyer ve
Prof. Dr. Özgür Ulusoy beylere teşekkürlerimi iletirim. Bu kitaptaki
konuların bir kısmını yazarken derslerinden istifade ettiğim Dr. İbrahim
Körpeoğlu beye (Computer Network Programming ve Mobile and Wireless
Networking) ve Dr. Ezhan Karaşan beye (Computer Networks) de
teşekkürlerimi sunarım. Ayrıca, Dr. Hakan Ferhatosmanoğlu beye 2002 yaz
döneminde Ohio State Üniversitesinde veritabanı konusunda araştırmalar
yapmama imkan sağladığı için teşekkür ederim.
Kitabın Yapısı ve Konular
Kitaptaki konular genel olarak 5
kısma ayrılmaktadır. Birinci kısımda (Bölüm 1 ile Bölüm 8 arasındaki 8
bölüm) Java ağ programcılığı için gereken temel konular sunulmaktadır.
Bu konular, Java programlama dili, bilgisayar ağları ve TCP/IP,
appletler, temel Web kavramları ve teknolojileri, ağ yazılımları
haberleşme modelleri, Java threadleri ve çok threadli yazılım tasarımı
ve Java streamleridir.
İkinci kısımda (Bölüm 9 ile Bölüm 12
arasındaki 4 bölüm) Java ağ programlarının temel yapıları verilmektedir.
İkinci kısmın başlangıcı olan Bölüm 9da önce Java ağ paketi (java.net)
ve yüksek seviyeli sınıflar ile ağ programcılığına bir giriş
yapılmaktadır. Daha sonra TCP ve UDP soket programcılığı sunulmaktadır.
TCP veya UPD soketleri bütün ağ programlarının kullandıkları en temel
yapı bloklarıdır. İkinci kısımda son olarak Bölüm 12de multicast
haberleşme modeli ve multicast soketler sunulmaktadır.
Üçüncü kısımda (Bölüm 13 ile
Bölüm 14 arasındaki 2 bölüm) Java ile üst seviyeli ağ programları yazmak
için iki konu sunulmaktadır. Bölüm 13te sunulan JDBC profesyonel
programlarda bir veri tabanına bağlanmak ve işlemler yapmak için
Javanın sunmuş olduğu önemli bir teknolojidir. Soketler ile ağ
programları yazmanın diğer önemli bir alternatifi olan RMI Bölüm 14te
anlatılmaktadır.
Dördüncü kısımda (Bölüm 15 ile
Bölüm 17 arasındaki 3 bölüm) Java Web programcılığında kullanılan
teknolojiler sunulmaktadır. Java ile Web programları geliştirmede
günümüzde çok yaygın olarak kullanılan Servletler ve JSP bu kısımda
anlatılmaktadır.
Beşinci kısım olan Eklerde, önce
Ek Ada kısaca UML hakkında bilgi verilmektedir. Ek Bde kitaptaki
semboller, Ek Cde Türkçe-İngilizce sözlük ve Ek Dde kaynaklar
bulunmaktadır.
Bu kitaptaki ilk 8 bölüm, Java ve ağ
programcılığı için temel giriş konularını içermektedir. Bu bölümlerde
sunulan konular ve kavramlar Java ağ programcılığına başlamadan önce
hakim olunması gerekmektedir. Bu temel konular öğrenildikten sonra Java
ile ağ uygulamaları yazmak kolaylaşmaktadır. Bölüm 9da Java ağ
paketinin (java.net)
tanıtılması ile Java ile TCP/IP protokolünü kullanan ve bir ağ
(Internet, Intranet gibi) üzerinde çalışacak uygulamalar geliştirilmesi
öğretilmeye başlanmaktadır.
Bu ilk bölümlerdeki konulara hakimiyet
oranında daha kolay Java ağ uygulamaları geliştirilir. Bununla beraber
bazı konularda sınırlı bilgi ile bile Java ağ uygulamaları yazmak
mümkündür. Örneğin, sadece bir Web sunucusundaki bir HTTP prosesi ile
iletişim kuracak Java appletleri yazmak istersek, Bölüm 5te kısaca
sunulan ve daha sonra Bölüm 9da ayrıntılı olarak anlatılan üst seviyeli
bağlantı sağlayan
URL
ve
URLConnection
sınıflarını öğrenmek yeterli
olacaktır. Ancak daha alt düzeyde bir iletişim yapmak istersek, Bölüm
10da sunulan soket programcılığına yönelmek gerekecektir. Eğer dağıtık
nesnelerden oluşan bir ağa sahip isek, Bölüm 14te anlatılan RMI
teknolojisini kullanmak daha iyi bir çözüm olacaktır.
Aşağıda kitaptaki bölümler kısaca
özetlenmektedir.
KISIM 1: JAVA AĞ
PROGRAMCILIĞININ TEMELLERİ
n
Bölüm 1, Javaya Girişte,
önce, Sun firmasının tanımına göre basit, nesne-yönelimli, sağlam,
güvenli, mimari-bağımsız ve taşınabilir, yüksek-performanslı, yorumlanan,
çok-threadli ve dinamik bir dil olan Javanın bu özellikleri
açıklanmaktadır. Daha sonra Web ve uygulama programlama dili olarak Java
ele alınmaktadır. Ardından Javaya elektronik cihazlar dili olarak
bakılmaktadır. Son olarak Javada gelişmekte olan yeni özelliklerden
bazıları sunulmaktadır.
n
Bölüm 2, Java Programlama
Dilinde, Java dilinin
temel özellikleri özetlenmektedir. Java programlama dilinin, ağ
programcılığı için gereken konularından önemli bir bölümü kitabımızda
anlatılmaktadır. Bununla beraber okuyucunun, bazı temel Java konularını
başka kaynaklardan çok daha ayrıntılı olarak öğrenmesi gerekebilir. Bu
bölümdeki konular: Derlenen, Yorumlanan Diller ve Java, Java ile
Program Geliştirmeye Giriş, Temel Java Bileşenleri ve Java ile
Nesne-Yönelimli Programcılıktır.
n
Bölüm 3, Bilgisayar
Ağları ve TCP/IPde,
Javanın ağ programcılığı için sunmuş olduğu yapıları kullanmadan önce,
bilgisayar ağları konularına ve TPC/IP modelindeki kavramlara ve
terminolojiye yakın olmakta, özellikle uzman ağ programcılığı açısından
faydalar bulunmaktadır. Bölüm 3, bilgisayar ağları ve TCP/IPnin
temellerini ağ programcılarına kısaca sunmaktadır. Bu bölümdeki konular:
Internet ve Bilgisayar Ağları, Protokol Katmanları ve Açık Sistem
Mimarisi, Ağ Protokol Katmanları, TCP/IP Protokol Katmanları, Internet
Protokol Adresi, Temel TCP/IP Protokolleri, Gelecek: IPv6, RFC
Dokümanları.
n
Bölüm 4, Temel Web
Kavramları ve Teknolojilerinde,
Interneti kullananların büyük bir kısmı çok teknik olmasa da birçok temel
Web kavramlarını ve terminolojisi ile Java appletlerini bilir. Bölüm
4te, URL, Internet sunucuları ve istemcileri, HTTP, MIME, HTML, XML, CGI
ve dinamik sunucu sayfaları gibi temel Web kavramları ve teknolojileri
sunulmaktadır.
n
Bölüm 5, Appletler ile
Ağ Programcılığına Girişte,
Web sayfalarına, bir sunucudan küçük Java programcıkları olan appletlerin
nasıl yüklendiği, Web programcılığında appletlerin yeri gibi Java
appletleri ile Java Web programcılığının ilk temel konusu
anlatılmaktadır. Bölüm 16 ve Bölüm 17de Servletler ve JSP gibi daha yeni
Java Web teknolojileri sunulmaktadır.
n
Bölüm 6, Ağ Yazılımları
Haberleşme Modelleri, kitabın
ileriki bölümlerinde ayrıntılı olarak Java program örnekleri ile
anlatılan, ağ yazılımlarındaki temel haberleşme yapılarını ve yaygın
haberleşme modellerini toplu olarak sunmaktadır. Günümüzde yaygın olarak
kullanılan istemci/sunucu modelline bu bölümde bir giriş yapılmaktadır.
Ayrıca Grup Multicast Haberleşme Modeli, P2P Haberleşme Modeli ve Gezgin
Etmen Haberleşme Modeli gibi diğer modeller de sunulmaktadır. Ağ sistem
geliştiricilerinin istemci/sunucu mimarilerinde yaygın olarak
kullandıkları, iki katmanlı (two-tier) mimari, üç-katmanlı (three-tier)
mimari ve çok-katmanlı (multi-tier) mimari yapılar tanıtılmaktadır.
n
Bölüm 7, Java Threadleri
ve Çok-Threadli Yazılım Tasarımı,
Java Threadlerini ve çok-threadli program geliştirmenin temellerini
sunmaktadır. Günümüzde sunucular gibi birçok ağ uygulaması, eşzamanlı
istekleri karşılayacak şekilde programlanmalıdır. Çünkü birçok istemci bir
tek veya sınırlı protokol portu üzerinden sunucularla haberleşir. Bu
durumda sunucunun bu isteklere cevap verebilmesi için her bağlantı
isteğine bir haberleşme kanalı açması, yani bir thread (veya proses)
ataması gerekir. Bu yüzden dolayı ağ uygulamaları ve aynı zamanda birçok
diğer günümüz uygulaması için, eşzamanlılığı doğru ve etkin olarak
kullanmak çok önemlidir.
n
Bölüm 8, Ağ
Programlarının Yapı Blokları: Java Streamler,
TCP protokolünü kullanan ağ yazılımlarının yapı blokları olan ve
java.io paketinde bulunan, Java
giriş/çıkış streamlerini tanıtmaktadır. Bir ağ yazılımında düşük
seviyeli sınıflar kullanılarak oluşturulan bir ağ bağlantısında, iki
bilgisayar veya thread arasında,
java.io. InputStream,
java.io.OutputStream
veya bu sınıfların diğer alt sınıflarından oluşturulan Java giriş/çıkış
nesneleri, iki uç nokta arasındaki veri iletişiminde kullanılır. Java I/O
streamler Java runtime ortamının sunduğu çok temel ve önemli haberleşme
ve ağ kütüphaneleridir. Streamler, veriyi, istemci ile sunucu makineler,
farklı threadler, dosyalar ve benzeri yapılar arasında iletmek için
kullanılan temel yapılardır.
KISIM 2: JAVA AĞ PROGRAMLARININ TEMEL YAPILARI
n
Bölüm 9, Java Ağ Paketi
ve Yüksek Seviyeli Sınıflar ile Ağ Programcılığına Girişte,
önce
java.net
paketinde bulunan, kitapta ayrıntılı olarak öğretilen bazı önemli sınıflar
toplu olarak kısaca tanıtılmaktadır. Daha sonra Java ağ programlarında çok
sık kullanılan,
java.net
paketindeki en temel sınıflardan biri olan
InetAddress
sunulmaktadır. Bu bölümde ayrıca Java ağ paketindeki üst seviyeli
sınıflardan
URL,
URLConnection
ve
URLEncoder
ve Java Mail API kullanılarak hızlı olarak basit ağ uygulamaları
geliştirilmesi örnek programlarla anlatılmaktadır.
n
Bölüm 10, TCP Soket
Programcılığında, ağ
programcılığının en önemli yapılarından olan TCP soketleri sunulmaktadır.
Javada TCP soketleri
Socket
ve
ServerSocket
sınıflarıyla sağlanmaktadır. Soket programcılığı ağ programcılığında çok
temeldir ve RMI, CORBA, Servletler, JSP gibi diğer üst seviyeli
haberleşme yapıları da aşağı katmanlarında TCP soketlerini kullanır. Soket
programcılığı, bahsedilen yapılardaki programcılığa göre daha zordur ve ağ
programcılığının assembly programcılığı olarak belirtilebilir. Bu
bölümde, istemci/sunucu soketleri, önemli soket metotları ve soket
ayarları, sıralı ve eşzamanlı sunucu yapıları, sıralı ve eşzamanlı
istemci/sunucu uygulamaları gibi konular sunulmaktadır.
n
Bölüm 11, UDP Soket
Programcılığında, önce
DatagramPacket ve
DatagramSocket sınıfları
tanıtılmaktadır. Daha sonra UDP tabanlı istemci/sunucu tasarımı
anlatılmakta ve örnek UDP uygulamaları verilmektedir. Ayrıca UDP uygulama
alanları hakkında bilgi de sunulmaktadır. TCP/IP protokol yığınında
aktarım katmanında bulunan ikinci protokol UDP IP üzerinden verileri
hızlı, fakat güvensiz bir şekilde göndermek için diğer bir alternatiftir.
UDP protokolü, uygulamaların datagram olarak adlandırılan veri
paketlerini birbirlerine gönderdiği, ikinci bir ağ haberleşme yöntemi
sağlar. Java ağ paketi, UDP datagramları kullanan sistem-bağımsız Java
programları yazmayı sağlamak için üç sınıfa sahiptir:
DatagramSocket,
DatagramPacket ve
MulticastSocket. UDP
protokolünü kullanan bir ağ uygulaması, diğer bir ağ uygulamasına
göndermek istediği veri paketlerini içeren
DatagramPacketlerini
bir
DatagramSocket
yoluyla gönderir. Alma durumunda olan ağ uygulaması da yine bir
DatagramSocket kullanarak ağ
verisini bir
DatagramPacket
kullanarak alır.
DatagramPacketler
ayrıca bir
MulticastSocket
dinleyen birçok alıcıya da gönderilebilir.
n
Bölüm 12, Multicast
Haberleşme Modeli ve Programcılığında,
multicasting denilen gönderilen bir mesajın birden çok kişiye
ulaştırılmasını sağlayan haberleşme modeli incelenmektedir. Unicast ile
multicast haberleşme modelleri arasındaki benzer ve farklı yönler ele
alınmakta, multicast haberleşme modelinin hangi tür uygulamalarda
kullanılabileceği sunulmaktadır. Daha sonra MBONE denilen ve birbirlerine
multicast destekli yönlendiriciler ile bağlı olan altyapı hakkında bilgi
verilmektedir. Multicast haberleşme modeli hakkında gereken bilgiyi
verdikten sonra Javanın multicast desteği incelenmekte ve multicast
haberleşme modelini kullanan çeşitli Java uygulamaları sunulmaktadır.
KISIM 3: AĞ VERİSİ VE DAĞITIK NESNELER
n
Bölüm 13, JDBC ile Ağ
Verilerine Erişimde, Javanın
JDBC (Java Database Connectivity) APIsi vasıtasıyla
veritabanlarına erişim ve veritabanları üzerinde yapılan işlemler
anlatılmaktadır. Veritabanı uygulamaları ağ yazılım tasarımlarında önemli
bir konudur. Java ile veritabanlarına erişmek ve veritabanı uygulamaları
geliştirmek oldukça kolaydır. JDBC sayesinde değişik veritabanı yönetim
sistemlerine aynı kodlar ile erişilir. JDBC değişik ürünler için gereken
farklı komutları programcıdan gizlemiştir. Bu sayede Java ile geliştirilen
bir program, her türlü veritabanı yönetim sistemine bağlanabilir. Bu
bölümde, ilk olarak ilişkisel veritabanları hakkında bilgi verilmekte ve
veritabanlarının genel yapıları tanıtılmaktadır. Daha sonra veritabanını
oluşturmak ve sorgulamak için gereken komutlar ve bu komutların bütününü
oluşturan SQL (Structured Query Language) yapısal sorgu dili
anlatılmaktadır. Ardından Java ile veritabanlarına nasıl bağlanıldığı ve
nasıl sorgu yapıldığı sunulmaktadır. Ayrıca Javanın veritabanları ile
ilgili APIsi JDBCnin içinde bulunan sınıf ve ara yüzler tanıtılmaktadır.
Bu sınıf ve ara yüzlerin kullanımı örnek programlarla açıklanmaktadır.
n
Bölüm 14, RMI ile Dağıtık
Uygulamalarda, Java RMI
(Remote Method Invocation) teknolojisi ve örnek uygulamaları
sunulmaktadır. RMI bir ağ üzerindeki bir Java nesnesinin diğer bir Java
nesnesindeki bir metodu çağırması için, çok az bir programcılık ile,
oldukça kolay bir yöntem sağlamaktadır. RMI teknolojisi kullanan dağıtık
uygulamalarda n-katmanlı (n-tier) nesne-tabanlı Java sınıfları, ağ üzerine
dağılır; bu tür programcılık distributed object computing olarak
adlandırılır. RMI, parametreleri almada ve göndermede nesne serileme
(object serialization) yöntemini kullanır. Bir Java istemcisi, sunucu
tarafındaki bir Java nesnesi ile, sunucu bilgisini alarak ve kendi
bilgisini ona geçirerek haberleşebilir. Bu tür haberleşme yapısı P2P
(peer-to-peer) modeli olarak adlandırılır. RMI kavramsal olarak OMG
(Object Management Group) tarafından geliştirilen CORBA/IDL modeline
benzemektedir. RMIin en önemli farklarından biri, RMIın homojen bir
ortamda çalışır olup bütün dağıtık nesnelerin sadece Java dilinde
olmasıdır. CORBA farklı dillerde yazılmış nesnelerin haberleşmelerini
mümkün kılar. Farklı makinelerde bulunan Java nesnelerinin haberleşmesi
için RMI en kolay ve etkin bir yoldur. Bu bölümde önce RMI sistem mimarisi
sunulmaktadır. Daha sonra bir RMI uygulaması geliştirmedeki adımlar basit
bir örnek programla beraber anlatılmaktadır. Ardından RMIın kullanımını
değişik yönlerden sunan üç tane uzun RMI uygulaması verilmektedir.
KISIM 4: JAVA WEB PROGRAMCILIĞI
n
Bölüm 15, Java Web
Programcılığında, önce,
günümüzde yaygın olarak kullanılan Web programcılık teknikleri ve Java Web
teknolojileri kısaca sunulmakta ve karşılaştırılmaktadır. Daha sonra,
özellikle Java Web uygulamalarında teknoloji seçimlerindeki bazı önemli
kriterler sıralanmakta ve bazı tavsiyeler verilmektedir. Son olarak Web
uygulamaları ile dağıtık uygulamalar karşılaştırılmaktadır.
n
Bölüm 16, Servlet'ler ile
Web Programcılığında, Java
Servlet Web teknolojisi ve programcılığı sunulmaktadır. Web
istemcilerinden gelen isteklere servletler sayesinde sunucu tarafında
dinamik sayfaları oluşturulmakta ve istemcilere gönderilmektedir.
Servletler Java-tabanlı Tomcat gibi bir uygulama sunucusunda çalışır.
Uygulama sunucusu, özel bir çeşit Web sunucusudur ve servletler,
enterprise beanler ve Web uygulamaları için istekleri ele alarak bir Web
sunucusunun kabiliyetlerini genişletmektedir. Bu bölümde önce
servletlerin nasıl çalıştığı anlatılmakta ve uygulama sunucusu Tomcat
tanıtılmaktadır. Daha sonra basit servlet örnekleri sunulmakta ve bunlar
Tomcat kullanılarak çalıştırılmaktadır. Ayrıca Servlet APIsindeki bazı
önemli sınıflar, arabirimler ve metotlar, servletler ile bağlantı oturum
takibi ve son olarak servletler ile bir JDBC uygulaması sunulmaktadır.
n
Bölüm 17, JSP ile Web
Programcılığında, Java JSP
Web teknolojisi ve programcılığı sunulmaktadır. JSP sunucu tarafı
programlamada kullanılan oldukça etkili bir yöntemdir. JSP temelde,
Servlet mimarisine dayanmaktadır. Servletlerin yetersiz kaldığı noktalara
çözüm olarak geliştirilmiştir. Bu bölümde ilk olarak JSP sayfasının yapısı
ve JSP sayfasından otomatik servlet üretimi sunularak JSP programcılığına
bir giriş yapılmaktadır. Daha sonra sırayla, dahili JSP nesneleri, JSP
bileşenleri, JSP içinden JavaBeanlerin kullanımı ve JSP ile JDBC
kullanımı ve form işleme konuları örnek programlarla ele alınmaktadır.
KISIM 5: EKLER
n
Ek A, UMLde
kitabın bazı yerlerinde kullanılan UML (Unified Modeling Language)
hakkında kısa bir bilgi sunulmaktadır. UML günümüzde endüstri standardı
olmuş, çok yaygın olarak yazılım geliştirmede ve iş modellemesinde,
görselleştirme, tanımlama, inşa etme ve dokümantasyon amaçları için
kullanılan bir grafik modelleme dilidir.
n
Ek B, Sembollerde
kitapta kullanılan İngilizce sembollerin listesi verilmektedir.
n
Ek C, Türkçe-İngilizce
Sözlükte kitapta kullanılan
Türkçe teknik kelimeler ve bunlara karşılık gelen İngilizce kelimeler
verilmektedir.
n
Ek D, Kaynaklarda,
Java ve Java ağ programcılığı, bilgisayar ağları ve TCP/IP ve UML, nesne
yönelimli analiz ve tasarım konusundaki kitap kaynakları verilmektedir.
Internet kaynakları hakkında tanıtıcı bilgiler bölüm sonlarında
sunulmaktadır.
Internet
Desteği
Bu kitapta yer alan programların kaynak
dosyaları kitabımızın Web adresinden alınabilir (http://www.jap2.com).
Ayrıca, kitabın Web sitesinde sürekli yenilenecek olan diğer sayfalarla,
Java, ağ programcılığı, nesne-yönelimli ağ yazılımları analizi, tasarımı
ve programcılığı konularındaki önemli Internet kaynaklarının adresleri
ve bu kaynakları tanıtıcı bilgiler de sunulmaktadır. Kitabımızda sunulan
konuları destekleyen yeni dokümanlar ve ilerideki bazı güncelleme ve
düzeltme bilgileri de sitemizde bulunacaktır.