1 .BÖLÜM
Servlet Java teknolojisinin CGI programlamaya verdiği cevaptır. Web sunucu üzerinde çalışan ve web sayfası üreten programlardır. Çalışırken web sayfası üretmek çok yararlıdır ve pek çok sebebi vardır.
Servletlerin geleneksel CGI’ ya göre avantajlarını inceleyelim:
Java servletler daha etkili,kullanımı kolay,güçlü,genişletilmeye açık ve geleneksel CGI’ ya göre daha ucuzdur.
1.1 Etkin
Klasik CGI’ da her http isteği için yeni bir process başlatır. Servlet de ise Java Sanal Makinası (Java Virtual Machine) herbir http isteğini bekler ve bunları normal bir process olarak değil,düşük öncelikli bir Java çoğullaması (thread) olarak ele alınır. Eğer klasik CGI’da bir CGI programına aynı anda N tane istek geldiğinde CGI program kodu belleğe N defa yüklenir. Servlet’de ise N tane çoğullama (thread) olsada belleğe sadece bir tek servlet class yüklenir.
1.2 ElVerişli,Uygun
HTML formlarda verilerin çözümlenmesi ve gönderilmesi, http başlıklarının okunması ve ayarlanması cookilerin kullanılması, oturum(session) takip edilmesi için servletlerin geniş bir alt yapısı vardır.Verilecek birkaç basit komut yardımıyla tüm bu işler halledilebilir.CGI ‘da ki parametreleri tek tek ayırıp değişkenlere atma işleminden kurtulmuş oluyoruz.
1.3 Güçlü,Etkili
Klasik CGI ile yapılması çok zor veya imkansız işler servletler sayesinde kolaylıkla yapılması sağlanmıştır. Servletler Web sunucusu ile direk haberleşebilir (Klasik CGI programları direk haberleşemez.)
Servletler ayrıca büyük boyutta verileri kendi aralarında paylaştırabilir, kolay kullanılabilecek şekilde veritabanı bağlantı havuzu (Database Connection Pool) oluşturmak gibi pek çok işi de yapabilir.
Sunucu – istemci arasındaki bilgi akışını düzenler, session(oturum) ve önceki işlemlerin takibini basitleştirir.
1.4 Taşınabilir
Servletler Java’da yazılır ve standartlaşmış bir API’ye de uyarlar. Servletler değiştirilmeden Apache,Microsoft IIS veya WebStar gibi web sunuculerı üzerinde kullanılabilir. Gelişmiş pekçok web sunucu için direk veya plug-in (ekleme) olarak servlet desteği vardır.
1.5 Ucuz
Kişisel veya küçük çapta web sayfaları için kullanılan ücretsiz veya çok ucuz web sunusu vardır.Apache dışında ticari-kaliteli web sunucular oldukça pahalıdır.
Biz projemizde servletlerimizi çalıştırması için Tomcat programını kullandık. Tomcat, Servlet barındırıcı(container) ve Java Server Page(Java sunucu sayfası) uygulama programıdır. Tomcat tek başına kullanılacağı gibi,pek çok popüler web sunucularla entegre olarak da çalışabilir.
1.6.1.Stand-Alone servlet container:
Bunlar web sunucuların önemli bir kısmını oluştururlar.Tek bir program vardır ve gelen tüm istekleri karşılar. Servlet barındırıcı(container) tek başına da kullanılabilir ama statik sayfalardaki performansı asla popüler web sunucular kadar iyi olamaz.
1.6.2.Inprocess Servlet container:
Java barındırıcı(container) uygulaması ve web sunucu eklentileri (plug-in) birleşimi olan servlet barındırıcılardır.Web sunucu eklentisi,web sunucunun adres uzayında bir Java Sanal Makinesi açar ve Java Barındırıcının çalışmasını sağlar. Bir in-process barındırıcı çoklu-çoğullama (multi-thread) tek işlemcili sunucular için uygundur ve çok iyi performans sağlamaktadır fakat sağlamlık konusunda sınırlamalar vardır.
Tomcat yukarıdaki iki moddada çalışabilir.2. seçenek için web sunucu ile haberleşebilmesini sağlayacak bir adaptör yazılama ihtiyaç vardır. Biz Tomcat ‘i 1. seçenekteki gibi kullandık.
Apache web sunucusu için : http://localhost
Tomcat servlet barındırıcı için http://localhost:8080
Adreslerini kullanarak ilgili sayfalara ulaşabiliyoruz.
2 .BÖLÜM
KURULUM
2.1 Java Kurulumu
Java, platform bağımsız ve yüksek performanslı uygulamaların geliştirilmesine olanak sağlayan basit,nesne tabanlı bir programlama dilidir. Java kullanılarak yazılan bir programın işletim sisteminden bağımsız olarak her bilgisayarda çalışabiliyor olması diğer hiçbir yazılım programında olmayan bir özelliktir.
Java ile program geliştirebilmek için önce Java geliştirme sistemini (JAVA DEVELOPMENT KIT = JDK ) Sun Microsystem’in internet adresinden indirmemiz gerekiyor. JDK ücretsiz bir yazılımdır.
adresinden JDK’nın 1.3 versiyonu indirip (jdk1-3.bin) linuxda
/usr
dizini içine kopyalayalım. Sonra konsolda
./jdk1-3.bin
komutunu yazalım.
Böylece /usr/jdk1.3 dizini içine tüm dosyalar açılmış olacaktır.Java’da yazdığımız programları derlemek için javac ‘ye, çalıştırmak içinde Java’ya ihtiyacımız var.Bunlara komut satırından direk erişmek için PATH değişkenine javac ve java dosyalarının tam yerini kaydetmemiz gerekir.
Bu işlemi her seferinde elimizle yazmak yerine /etc/profile dosyasının içine eklemeliyiz.
Export PATH=/usr/jk1.3/bin:$PATH
Komutu ile PATH dosyamıza /usr/jdk1.3/bin klasörünü eklemiş olduk.Artık javac ve java komutunu herhangi bir klasördeyken verebiliriz.
Ayrıca ileride kuracağımız programlarında javayı kullanacağını göz önüne alarak
Export JAVA_HOME=/usr/jdk1.3
Satırını da /etc/profile dosyasına ilave edelim.Böylece javayı kurma işlemini tamamlamış olduk.
Öncelikle Tomcat kurlumu için gerekli dosyalar :
Tomcat dosyalarının belli bir klasör içinde olması gerek.
/usr/tomcat
dizini kullanalım.
2.2.1 JAXP kurulumu :
JAXP java kodu içinden XML dosyası yönetimini sağlamaktadır. JAXP ile XML dosyası oluşturulabilir,okunabilir,düzenlenebilir. Bu tomcat kurulumu için gereklidir.
Jaxp-1_0_1.zip dosyasını açalım.
Jar xvf jaxp-1_0_1.zip komutu ile /usr/tomcat/ dizini içinde jaxp-1_0_1 dizini oluşturulur ve dosyalar bu dizin içine açılır. Bu klasör içindeki parser.jar ve jaxp.jar dosyalarını CLASSPATH e eklememiz gerekir.
Export CLASSPATH=$CLASSPATH:/usr/tomcat/jaxp-1_0_1/parser.jar: /usr/tomcat/jaxp-1_0_1/jaxp.jar
$CLASSPATH komutu ile daha önce CLASSPATH de bulunan değerler çağrılıyor ve sonuna parser.jar ve jaxp.jar dosyaları ekleniyor.
2.2.2 JSSE KURULUMU :
JSSE, SSL(Secure Sockets Layer – Güvenli Soket Katmanı ) ve TLS ( Transport Layer Security – Taşıma katmanı güvenliği) protokollerinin javada yazılmış versiyonudur. JSSE sayesinde güvenli iletişim sağlanabilir. JSSE sayesinde istemci/sunucu arasında bilgi alış-verişinde gönderilen bilgilerin şifrelenerek gönderilmesi amaçlanmıştır. Tomcat kurulumu için gereklidir.
Yine Sun Microsystems sayfasından indirebileceğimiz “jsse-1_0_2-gl.zip” dosyasını /usr/tomcat dizini içine açalım.
jsse-1_0_2-gl adlı bir dizinin içine gerekli dosyaları açmış olacaktır. Kolaylık olması için jsse-1_0_2-gl klasör ismini jsse olarak değiştirelim.
2.2.3 JAKARTA-SERVLETAPI
JSP VE Java Servlet için gerekli kütüphaneleri(class) içerir. Biz kaynak kodunu internetten alıp derleyelim ve tomcat’in kullanimi için gerekli klasöre koyalım.
adresinden “jakarta-servletapi-3.2.tar.gz” dosyasını /usr/tomcat içine açalım.
/usr/tomcat/jakarta-servletapi-3.2 klasöründe bulunan build.sh dosyasını çalıştırarak kodları derleyelim.
./build.sh
eğer tüm ayarlar doğru ise /usr/tomcat/build/servletapi klasörüne gerekli dosyalar hazırlanıp konacaktır.
Artık tomcat kurulumuna geçebiliriz. “jakarta-tomcat-3.2.1-src.tar.gz” /usr/tomcat dizini, içine açalım.
“jakarta-tomcat-3.2.1-src” klasörünü jakarta-tomcat olarak değiştirelim.
./build.sh
komutu ile derleyerek /usr/tomcat/build/tomcat dizini içine gerekli dosyaları kopyalayabiliriz ama önce jakarta-tomcat dizininde bulunun build.xml dosyasını gözden geçirmemiz gerekir.
<!-- ==================== Initialization properties ===================== -->
<property name="ant.home" value="../jakarta-ant"/>
<property name="build.compiler" value="classic"/>
<property name="debug" value="on"/>
<property name="j2ee.home" value="../../j2ee/build/unix"/>
<property name="jaxp" value="../jaxp-1.0.1" />
<property name="optimize" value="true" />
<property name="servlet.jar" value="../jakarta-servletapi/lib/servlet.jar"/>
<property name="tomcat.build" value="../build/tomcat"/>
<property name="tomcat.dist" value="../dist/tomcat"/>
burada herbir programın bulunduğu klasör belirtilmiş. J2ee.home dizinini değiştirmemiz gerekir. Bu satırı
<property name="j2ee.home" value="../j2ee/"/>
ile değiştirelim.
Şimdi ./build.sh komutunu çalıştıralım.
Browserda http://localhost:8080 yazarak tomcat’ e ulaşabiliriz.
Eğer tüm ayarlar doğru ise /usr/tomcat/build/tomcat dizini içine tomcat kurulmuş olacaktır.
Şimdi Tomcat klasör yapısını inceleyelim :
Klasör İsmi |
Açıklama |
bin |
Başlama/bitiş.. script’leri içerir |
conf |
Konfigürasyon dosyalarını içerir. Server.xml(Tomcat’in ana konfigürasyon dosyası) ve pek çok web uyguları için varsayılan ayarları ayarlamaya yarar |
doc |
Tomcat ile ilgili dokümanları içerir. |
lib |
Tomcat tarafından kullandığı çeşitli jar dosyalarını içerir. UNIX’de bu klasördeki her dosya Tomcat’in CLASSPATH’ine ilave edilir. |
logs |
Tomcat’in log dosyalarının bulunduğu klasördür. |
src |
Servlet API’sinin kaynak dosyaları. |
webapps |
Örnek web uygulamaları.. |
/usr/tomcat/build/tomcat/webapps/examples/WEB-INF
dizini içine koymamız gerekir.
http://localhost:8080/examples/servlet/Hello
adresi ile ulaşabiliriz.
JDK 1.1 'den bu yana JDBC, Java 'nın temel taşı olarak
standart paketle beraber geliyor. Anlamı ise Java Database Connectivity. Mevcut
veritabanlarına kolay erişim için bir mekanizma sağlıyor. Java programları ile
veritabanları arasında sürücüler (drivers) köprü oluşturmaktadır. Aynı kaynak
kod ile birçok veritabanına ulaşabilirsiniz. Tabii ki bağlantı kurmak istediğiniz
veritabanına ait sürücümüz mevcut olduğu sürece bu geçerlidir.
Veritabanları uzun yıllardır mevcut ve değişik alanlarda kullanılmaktadır. Veritabanlarının
sorgulanmasında ve işlenmesinde SQL (Structured Query Language) standart bir
dil olarak kabul görmüştür.
Windows dünyasında kabul görmüş olan ODBC (Open Database Connectivity), Java
içinde temel alınmış. C'ye uygun olarak tasarlanmış olan ODBC, Java'nın nesneye
yönelimli dizaynına uyarlanmıştır.
Basit olarak veritabanına bağlantı adımları :
JDBC kütüphanesinin yanında, kullanılacak veritabanına ait sürücünün bulunması
gerekiyor. Sürücüler JDBC ile değişik veritabanları arasındaki köprüyü oluşturuyorlar.
Genelde veritabanı geliştiricisi, uygun sürücüyü veritabanı ile birlikte sunuyor.
Kullanabileceğiniz mevcut JDBC sürücülerinin listesini aşağıdaki adresten bulabilirsiniz
http://java.sun.com/products/jdbc/jdbc.drivers/
3.2 JDBC-ODBC Köprüsü
JDBC ilk duyurulduğunda her veritabanı için değişik JDBC sürücüsünün gerekmesi,
destek açısından problemlerle karşılaşılacağını düşündürmüştür. SUN bu durumu
görerek, problemleri ortadan kaldırmak için JDBC komutlarını ODBC komutlarına
çeviren bir sürücü geliştirdi. Çoğu veritabanı için ODBC sürücüleri mevcut olduğu
için, hemen hemen tüm veritabanları ile bağlantı kurmak mümkün olmuştur.
3.3 Sürücünün Yüklenmesi
Javada herşeyin sınıflarla olduğunu biliyoruz. Sürücünün yüklenmesinde de sürücü-sınıfının
aktif edilmesinden başka işlem gerekmiyor. Bunu şu komutla yapıyoruz:
Class.forName("jdbc.odbc.JdbcOdbcDriver");
Java sınıf yükleyicisi sürücüyü yükler ve Sürücü-Yöneticisi (Driver-Manager)
'nde kendini register eder.
Sürücü bulunamaz ise java.lang.ClassNotFoundException
hatası oluşur. Bu hatayı yakalamak ve kontrol etmek için
try{}
catch{}
bloğu kullanılır.
3.4 Sürücü Yöneticisi (Driver Manager)
Bir programın değişik veritabanları ile bağlantı kurması gerektiği durumlarda
değişik sürücüler yüklemek gerekir. Bu sürücüleri organize etmek için java Sürücü-Yöneticisini
kullanır.
Veritabanına kurulmak istenen bağlantıların tümü sürücü-yöneticisinin üzerinden
geçer. Tüm yüklü sürücülerin listesi sürücü-yöneticisinde tutulur
Sürücü yüklendikten ve sürücü yöneticisinde register edildikten sonra sıra
veritabanı ile kurulacak bağlantıya geliyor. Bunun için Sürücü yöneticisi-Sınıfının
getConection() metodunu kullanıyoruz.
Connection connection =
DriverManager.getConnection ("jdbc:odbc:adresler", "K.Adi",
"Şifre");
Veritabanına erişim için iki parametre gönderilmesi gerekiyor Bunlardan birincisi
kullanıcı adı (K.Adi), diğeri ise şifredir. Ayrıca veritabanının yerini belirten
bir string gönderiliyor. Bu string JDBC-url si oluyor.
Bu metodun döndürdüğü değer Connection nesnesidir. Bu nesne üzerinden veritabanı
ile ilgili işlemler yapılır.
3.6 JDBC - URL
JDBC - Url ile kullanılacak veritabanının tam yeri ve bu veritabanı için kullanılacak
sürücü belirleniyor. Kullanımı şu şekildedir :
jdbc:<sürücü>:<veritabanı>
İki nokta üst üste ye kadar olan ilk kısım, internet url lerinde olduğu gibi
kullanılacak protokolü belirliyor. "http:" veya "ftp:" gibi.
Bizim durumumuzda her zaman "jdbc:" olması gerekiyor.
<sürücü> kullanılcak sürücünün ismidir. Ya da değişik sürücüler tarafından
kullanılabilen köprünün ismi olabilir. Örneğin SUN 'ın geliştirdiği ODBC-Köprüsü.
<veritabanı> kullanılacak veritabanıdır. Buraya yazılacak olan şey tam
olarak kullanılacak sürücüye bağlıdır. Çoğu zaman veritabanının adıdır.
3.7 Sürücülerin Register Edilmesi
Sürücüler farklı şirketler tarafından geliştirildiği ve değişik fonksiyonları
yerine getirebildiği için değişik protokoller ortaya çıkıyor. Sürücünün kullanımı
isim ile olduğu için, sürücüyü geliştiren ( veya özel bir protokol ) şirketin
bunu SUN tarafından register edilmesini sağlamak durumundadır.
Veritabanı ile bağlantı kurulduktan sonra, bu bağlantı sayesinde veritabanına
SQL komutları yollanabilir. JDBC gönderilen komutların doğruluğunu kontrol etmez.
Programcı göndereceği komutların doğruluğundan ve kullandığı veritabanının bu
komutu desteklediğinden emin olması gerekir. Veritabanının gönderilen komutu
tanımaması halinde hata oluşur.
JDBC uyumlu logoyu kullanabilmesi için bir veritabanının ve bu veritabanına
ait sürücünün ANSI-SQL 2 komutlarını desteklemesi gerekiyor. Standart komutları
kullanan bir programcının endişelenmesine mahal kalmıyor.
Prensipte JDBC üç tip SQL komutunu destekliyor. Bunlar Statement (Basit SQL
komutları ), PreparedStatement (Komplike SQL komutları) ve CallableStatement
(Bir prosedürün çağrılması) dır.
Her tip komut ayrı bir nesne kullanır. Basit bir SQL komutu için örnek :
Statement komut = connection.createStatement();
ResultSet donen = statement.executeQuery
("SELECT Adi, Adres, TelNo FROM Adresle");
İlk satırda Connection nesnesinin createStatement() metodu
kullanılarak basit bir SQL komutu için nesne oluşturuluyor.
İkinci satırda executeQuery metodu parametre olarak aldığı SQL komutunu veritabanına
gönderiyor. Dönen değer ise ResultSet tipindeki donen nesnesine aktarılıyor.
Veritabanına gönderilen SQL komutunun sonucu, sorgulama
kriterine bağlı satırlardan oluşur. Değişik get()
metodları ile sonuç satırlarının farklı kolonlarını elde etmek mümkündür.
next() metodu ile sonuç satırlarının bir sonrakine atlanabilinir.
Son satırda next() metodu kullanılırsa false
değeri döner.
while (donen.next())
{ String Adi = donen.getString("Adi");
String Adres = donen.getString("Adres");
int TelNo = donen.getInt("TelNo");
System.out.println(Adi + ", " + Adres + ", " + TelNo);
}
Daha öncede bahsedildiği gibi değişik get metodları mevcuttur. Alınacak değerin
tipine uygun get metodu kullanılır. Örneğin getByte(),
getDouble(), getInt(), getString()
İstenen veri, java tiplerinden biri olan streams ile de alınabilir. Yalnız bu
yol büyük veri bloklarında kullanılır. Örneğin bir sonuç satırını 4 KB ^'lık
veri bloğu şeklinde almak için kullanmanız gereken kod aşağıdadır.
byte buffer = new byte[4096];
while(donen.next())
{
Java.io.InputStream fin = donen.getAsciiStream(1);
while(true)
{
int size = fin.read(buffer);
if(size == -1)
break;
output.write(buffer, 0, size);
}
}
Mysql ‘e bağlanabilmek için öncelikle mysql driver(sürücü)’larınu internetten indirmeliyiz.
http://www.worldserver.com/mm.mysql/
adresinden Mark Matthews' MySQL JDBC Driver Version 1.1b sürüclerini indirerek /usr/tomcat dizini içine açalım.Dosyaları açtıktan sonra mysql.jar dosyasını CLASSPATH’e eklememiz gerekir.
Artık JDBC bağlantısı ile mysql server’a bağlanıp SELECT,INSERT,UPDATE,DELETE gibi işlemleri gerçekleştirebiliriz.Bu sürücünün en güzel özelliği veritabanı bağlantısı koparsa tekrar bağlanamaya çalışmasıdır.
Bağlanmak için kullanacağımız JAVA kodu aşağıdaki gibi olabilir :
import java.sql.*;
public class LoadDriver
{
public static void main(String[] Args)
{
try {
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
}
catch (Exception E) {
System.err.println("Unable to load driver.");
E.printStackTrace();
}
.....
Class.forName satırısı ile mysql driver’ını tanıtmış oluyoruz.Şimdi bu driver ile mysql ‘e belli kullanıcı ve şifre ile bir bağlantı (connection) açalım.
Connection C = DriverManager.getConnection(
"jdbc:mysql://localhost/altug?user=root&password=");
Bu bağlantı ile istediğimiz bir sorgulamayı yapabiliriz :
Statement stmt = con.createStatement();
stmt.executeQuery("select * from sekreter”);
Bu sorgulama sonunda dönen kayıtları bir ResultSet ‘te saklamamız gerek.
ResultSet rs = stmt.executeQuery("select * from sekreter”);
while (rs.next())
{
System.out.println(RS.getString(1));
}
şimdi bağlantı için kullanabileceğimiz parametreleri inceleyelim :
Name |
Use |
Default Value |
User |
Kullanıcı adı belirtilir |
Yok |
password |
Şifre |
Yok |
autoReconnect |
Veritabanı bağlantısı koptuğunda tekrar bağlantı kurmak için (true / false ) |
False |
maxReconnects |
Eğer autoconnect “enable” ise en fazla kaç kere bağlanması gerektiğini belirtir |
3 |
initialTimeout |
Eğer autoconnect “enable” ise bağlantı denemeleri arasındaki süreyi belirtir (saniye) |
2 |
maxRows |
En fazla kaç sütunun geri döneceğini belirtir.(0 hepsinin döneceği (return) anlamındadır ) |
0 |
useUnicode |
should the driver use Unicode character encodings when handling strings? (true/false) |
False |
CharacterEncoding |
if useUnicode is true, what character encoding should the driver use when dealing with strings? |
None |
4.BÖLÜM
Bilindiği gibi bilgisayar dünyasında kullanılan bir çok veritabanı programı ve
sunucusu mevcuttur. Bunların çoğu kullanışlı olmasına rağmen çok pahalı paket
programlarıdır. MySQL in en büyük özelliği bedava olmasıdır fakat ticari amaçla
kullanabilmek için küçük bir ücret ödenmesi gerekir. MySQL'in diğer en büyük özelliği ise veritabanı pazarındaki en büyük rakipleri kadar iyi, hızlı ve kullanışlı olmasıdır. MySQL halen daha geliştirilmekte olmasına rağmen mevcut haliyle zengin ve çok kullanılan
fonksiyonlar sunmaktadır.
MySQL'in belli başlı özellikleri :
Servlet geliştirme aşamasında mysql veritabanı ile yapacağımız işlemleri KDE ortamında grafiksel arabirim ile yapabileceğimiz iki program vardır : kmysql , kmysqladmin.
4.1 KMYSQL
Kmysql grafiksel bir arabirim ile mysql veritabanındaki verileri göstermeye yarayan bir programdır. Programda ayrıca yeni veritabanı ve tablo oluşturulabilir.Veriler üzerinde değişikliklerde yapılabilir. Ama kmysqladmin kadar yetenekli değildir. Verilerin kolayca görülmesi için oldukça kullanışlı bir programdır
4.2 KMYSQLADMIN
Kmysqladmin programı ile mysql grafiksel bir arabirim yardımı ile yönetilebilir. Program çalıştırılıp connect düğmesine basılarak veritabanı bağlatısı sağlanır.
Kullanıcı adı ve şifresi girilerek veritabanı bağlantısı sağlanır.
Şimdi yeni bir tablo veya yeni bir veritabanı oluşturulabilir. Bunlar için alanlar tanımlanabilir.Varolan veritabanı,tablo,alanlar üzerinde değişiklikler yapılabilir. Kayıtlar üzerinden değişiklikler yapılabilir.