t.c. kadİr has Ünİversİtesİ mÜhendİslİk fakÜltesİ ... · staj defterİ Öğrencinin...
TRANSCRIPT
T.C.
KADİR HAS ÜNİVERSİTESİ
MÜHENDİSLİK FAKÜLTESİ
BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ
STAJ DEFTERİ
Öğrencinin Fakülte Numarası :
Öğrencinin Adı ve Soyadı : Emine Begüm Tansal
Öğrencinin,
Adı :Emine Begüm
Soyadı : Tansal
Numarası :
Bölümü :Bilgisayar Mühendisliği
E-posta :
Staj Dönemi :yaz
Staj Başlama Tarihi :12/08/2013
Staj Bitiş Tarihi :06/08/2013
Toplam Çalışılan Gün :25
Stajın Yapıldığı Bölüm :server side programing
İşyeri Stajyer Sorumlusu Firma Onayı Veren Kişi
Adı / Soyadı
Ünvanı
Tel.
E - Posta
Staj Yapılan Firmanın Adı :Simegra LTD.
(İmza, Mühür)
T.C. KADİR HAS ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ
FOTOGRAF
HAFTALIK ÇALIŞMA ÖZETİ
HAFTA TARİH GÜN YAPILAN İŞİN KISA TANIMI
1. 12.08.2013 P.tesi
restoran rezervasyonu amaçlı proje için uygun
framework araştırması yaptım. Spring framework
kullanmaya karar verdim.
1. 13.08.2013 Salı
Spring framework projeleri için gerekli olabilecek
tool’ları araştırdım. Ubuntu OS üzerinde, Maven
project tool kullanımı üzerine çalıştım.
1. 14.08.2013 Çarş.
Netbeans ide ile hazır gelen spring framework
kullanarak tomcat bağlantısı kurup java web
application yarattım ve Bir üye form sayfası
oluşturdum.
1. 15.08.2013 Perş.
Uzak masa üstü bağlantısı kullanarak sunucuya
bağlandım ve windows server 2012 üzerinde
gerekli kurulumları tamamladım.
1. 16.08.2013 Cuma HTML ve javascript kullanarak form sayfasında
düzenlemeler yaptım.
1. 17.08.2013 Ctesi Hibernate hakkında bilgi topladım.Gerekli
methodların kullanımı üzerine çalıştım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
HAFTA TARİH GÜN YAPILAN İŞİN KISA TANIMI
2. 19.08.2013 P.tesi
Hibernate kullanarak model ve controller
paketlerinin ve class ne interface’lerin oluşturdum.
Database oluşturdum.
2. 20.08.2013 Salı
Model sınıfı ile database bağlantısı için gerekli
hibernate dosyalarını oluşturdum.
2. 21.08.2013 Çarş.
Bağlantı için gerekli ayarlamaları
tamamladım.spring servlet sınıfını düzenleyerek
gerekli bean’leri ekledim.
2. 22.08.2013 Perş.
Eksik kalan bazı importları ve beanleri bulamadığı
kurulamayan form-veri tabanı bağlantısını
düzeltmek için projeyde hata aradım.
2. 23.08.2013 Cuma
Eksik kalan jar dosyalarındaki hatayı gidermek
için maven ile oluşturulmuş olarak projeyi yeniden
düzenledim.
2. 24.08.2013 Ctesi
Sql hatası vermesi nedeniyle postgreye
bağlanamayan projeyi mysql server ile denedim ve
çalışır hale getirdim.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
HAFTALIK ÇALIŞMA ÖZETİ
HAFTA TARİH GÜN YAPILAN İŞİN KISA TANIMI
3. 26.08.2013 P.tesi Projeyi postgresql ile düzgün çalışır hale getirdim
ve select insert sorgusu yapabilir hale geldi.
3. 27.08.2013 Salı Web servisi yazmam istendi. JSON kullanarak
web servisi yazma üzerine çalıştım.
3. 28.08.2013 Çarş.
Gerekli maven dependency’leri buldum ve onların
tanımlanabilmesi için gereken repository’i
ekledim.
3. 29.08.2013 Perş. Controller’da eklemem gereken annotation’ları
ekledim
3. 31.08.2013 Ctesi
Hataların nedenini bulmaya çalıştım. Request
body için user nesnesi dönen bir method
oluşturdum.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
HAFTA TARİH GÜN YAPILAN İŞİN KISA TANIMI
4. 02.09.2013 P.tesi
Web servisini tamamladım. Controller sınıfı
içerisinde yazdığım metodlarla json objesi halinde
nesne yada nesne dizini elde ettim.
4. 03.09.2013 Salı
Android ile activity-main.xml üzerinde layout’u
oluşturdum ve formun mobil tarafını basit bir
şekilde tamamladım.
4. 04.09.2013 Çarş. Android client tarafında çalıştım ve RestClient
sınıfı yazdım.
4. 05.09.2013 Perş. Android projesinde giriş ve login sayfalarını
düzenledim ve aralarındaki geçişleri sağladım.
4. 06.09.2013 Cuma Android client tarafında yapılacak işlemleri
gerçekleştirdim.
4. 07.09.2013 Ctesi
Server tarafının android client tarafından
gönderilen kısmını nasıl değerlendirmesi
gerektiğini tanımladım. Web sayfası üzerinde
validation ile ilgili ayrıntıları düzenledim.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
HAFTALIK ÇALIŞMA ÖZETİ
HAFTA TARİH GÜN YAPILAN İŞİN KISA TANIMI
5. 09.09.2013 P.tesi
Bağlantıyı başarılı bir şekilde
gerçekleştiremediğim için farklı yöntemler
deneyerek server ile bağlantı kurmaya çalıştım.
Projenin signup formunu çalışır hale getirdim.
5. 10.09.2013 Salı Signup formu ile yaptığım işlemin benzerini sign in
kısmı için gerçekleştirdim.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
YAPILAN ÇALIŞMANIN AÇIKLANMASI
Hafta
1.
Tarih
12/08/2013
Gün
1
Yapılan İş
restoran rezervasyonu amaçlı proje için uygun
framework araştırması yaptım. Spring framework
kullanmaya karar verdim.
İlk gün yapılan toplantı sonucunda, daha önce çalışmadığım ve öğrenmemin bana faydası
olacağı düşünülerek server tarafı programlama ile ilgili bir görev verildi. Yeni bir proje olacak olan
restoran rezervasyonu amaçlı bir site kurulumu bunun web servisinin yazımı kısmı benim tarafıma
ve sonrasında bu web servisi kullanılarak yapılacak olan mobil programlama ekip çalışmasına
bırakıldı.
Bu proje süresince benim kullanmam istenilen gereçler konuşuldu ve ilk olarak framework
kullanımı ve hangi framework ile çalışmanın daha verimli olacağı konusunda araştırma yapmam,
tavsiye olarak Play Framework ile Spring Framework üzerine yoğunlaşmam ve eğer istersem başka
bir farmework de seçebileceğim söylendi.
Framework amacı ve faydaları:
Çok az ya da sıfır kodla database değiştirerek, database çıkarımı yapar.
Obje ilişkili haritalama, böylece ham datalar yerine objeler kullanılır.
Hazır kalıplar içerir.
Database sorgularını gerçekleştirir.
Daha düzgün URLler bulur ve bunları daha kolay değiştirir.
Çevreyi düzenler.
Debug, zamanlayıcı ve anlamlı hata hata mesajları sağlar.
SQL, XSS ya da CSRF sızmalarına karşı güvenlik sağlar,
Test fonksiyonları bulunur.
Developerlar için dağıtma ve paylaşma imkanı verir.
Bir çok amaç için geniş kütüphaneler içerir.
Bu amaçlar doğrultusunda yapılan araştırma sonucu daha yaygın olarak kullanılan ve daha çok
doküman içeren bir framework olan Spring Framework kullanmaya karar verdim. Sonrasında bu
projede kullanmam gerekebilecek araçları belirledim.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Bu proje için gerekli olcak araçlar:
Java IDE(Netbeans or Eclipse)
Apache Tomcat Server
Spring Framework(Spring Web MVC)
Hibernate
Maven Development Tool
Adt-bundle(eclipse android ide)
Kullanılacak programlama dilleri:
Java
Html
Css
Javascript
Android
PostgreSQL
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
1
Tarih
13/08/2013
Gün
2
Yapılan İş
Spring framework projeleri için gerekli olabilecek
tool’ları araştırdım. Ubuntu OS üzerinde, Maven
project tool kullanımı üzerine çalıştım.
Proje yönetiminde kullanışlı olabilecek olan Maven Development tool hakkında araştırma
yaptım. Bu gereç temel olarak projenizin düzenlenmesinde programcılar için geliştirilmiş bir
yardımcı olarak görüleblir. Maven projede kullanmanız gerekecek jar dosyalarını indirip elle import
etmeye gerek kalmadan pom.xml sayfasına yazacağınız jar dosyalarını intenetten bularak otomatik
olarak projeye yükler.
Linux işletim sistemi üzerinde kurulumu daha kolay olması sebebiyle bu platformda maven
kullanmayı denemeye karar verdim. Openjdk kullanan ubuntu için oracle sun jdk 7 indirdim ve
gerekli kurulumları yaptım.
Maven indirerek kurulumu tamamladım. Spring kullanımı için kolaylık sağlayacağını
düşündüğüm maven kullanımı ile ilgili basit bir örnek indirerek nasıl kullanıldığını anlamaya
çalıştım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Maven ile basit bir hello word uygulaması yazdım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
1.
Tarih
14/08/2013
Gün
3
Yapılan İş
Netbeans ide ile hazır gelen spring framework
kullanarak tomcat bağlantısı kurup java web
application yarattım ve Bir üye form sayfası
oluşturdum.
Ekip olarak window işletim sistemi kullanılması ve Windows server kullanılıyo olması
sebebiyle çalışmaya Windows üzerinde devam etmeye karar verdim. Önce eclipse enterprise
kullanarak dynamic web uyguması geliştirmeye çalıştım. Ancak maven kullanmakta biraz sorun
yaşadım ve eclipse maven desteklediği için, maven kullanmadan sprimg framework’ünü
kullanamadım.
Netbeansde spring framework’ünün maven’a ihtiyaç duymada otomotik olarak geldiğini ve
kullanılabildiğini öğrendim. Bunun üzerine daha önce de kullanmış olduğum ve alışık olduğum için
netbeans kullanmaya karar verdim. Yapacağım uygulamaların web tarafında olması sebebiyle bir
server’a ihtiyacım vardı. Bu sebeple Windows üzerinde Apache Tomcat server kurdum.
Tomcat indirerek arşivi c diskine yerleştirdim. Sonra sistem değişkenlerine JAVA_HOME
ve CATALINA_HOME değişkenlerini koyarak bu değişkenleri path’e ekledim ve tomcat serverı
çalışır hale getirdim.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Netbeans ile birlikte bir spring projesi oluşturarak bu proşeyi tomcat servera bağladım ve ilk
hello world web uygulamasını oluşturdum.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Benden istenilen restoran rezervasyonu projesi ile ilgili ilk adım olarak projeyi oluşturarak
karar verilen ve üye formu olarak değerlendirilecek olan sayfanın basit bir şeklini yaptım.
.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
1.
Tarih
15/08/2013
Gün
4
Yapılan İş
Uzak masa üstü bağlantısı kullanarak sunucuya
bağlandım ve windows server 2012 üzerinde gerekli
kurulumları tamamladım.
Uzak masa üstü bağlantısını kullanarak benim için sunucu üzerinde açılan hesaptan Windows
server 2012’ye bağlandım.
Server üzerinde de gerekli kurulumları yapmam gerekti. Öncelikle jdk 7 yükledim. Daha sonra
netbeans IDE ve tomcat indirdim. CATALINA_HOME ve diğer değişkenleri path’a yerleştirdim ve
kendi bilgisayarımdakilerle aynı kurulumları gerçekleştirdim.
,
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Resroran rezervasyonu için RestaurantRes ismi ile bir proje oluşturarak bu projeyi tomcat server ve
postgreSQL database ile proje için açılmış olan database hesabına bağladım ve projeyi olurtururken
spring web mvc ve hibernate kullanımını işaretledim. Daha önce yapmış olduğum basit üyelik
formu jsp sayfasını bu projenin içine kopyaladım ve üzerinde biraz düzenlemeler yaptım.
HTML kodları kullanarak form düzenlemelerini gerçekleştirdim ve ilk giriş sayfası ile form
linkini bağladım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
1.
Tarih
16/08/2013
Gün
5
Yapılan İş
HTML ve javascript kullanarak form sayfasında
düzenlemeler yaptım.
Üyelik formu üzerinde çalışarak newUser.jsp sayfası üzerinde bazı düzenlemeler yaptım.
Öncelikle css sınıf yapısını kullanatak düzensiz duran formu hizaladım. Daha sonra submit
button’unu aktif hale geçirmek için action kullanarak success isimli bir başka jsp sayfasına
açılmasını sağladım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Ancak forma herhangibir veri girilmemesi durumunda da form submit edilebildiği için
javascript kodları kullanarak formun geçerliliğini kontrol etmem gerekti. Boş olması haricinde
girilen verinin geçerliliğini de kontrol etmem gerekiyordu. Örneğin tarih kutucuğuna geçersiz bir
veri girişi yapıldı ise bu kabul edilmemeli. Form yapısında onsubmit ile java script kodları ile
yazdığım isValidate() fonksiyonunu çağırılıyor ve bu çağırma submit butonu içine yerleştirdiğim
onclick ile submit butonuna basıldığı her defasında fonksiyonu tekrar çağırıyor.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Bunun yanında bazı hata mesajları eklemem ve bu hataların düzelmesi durumunda hata
mesajlarının silinmesi için javascript içerisine birtakım kontrol komutları yerleştirdim ve text
bölmesinin boş bırakılması durumunda ekranda uyarı mesajı verdi.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
1.
Tarih
17/08/2013
Gün
6
Yapılan İş
Hibernate hakkında bilgi topladım.Gerekli
methodların kullanımı üzerine çalıştım.
Daha önce database ile ilişkilendirmem gereken proje için hibernate kullanmaya karar
vermiştim. Hibernate’in ne olduğu ile daha derin bir araştırma yaptım. Yapısını ve nasıl
kullanıldığını öğrenmeye çalıştım ve örnek projeleri araştırdım.
Öğrendiklerim sonucunda hibernate’i kısaca şöyle açıklayabilirim:
Hibernate, java platformunda yazılmış bir ORM (Object/Relational Mapping) aracı. Nesne odaklı
dillerde nesnelerin ilişkisel veri tabanındaki kayıtlara nasıl karşılık geldiğini ifade eden bir araç ve
hibernate ile bir nesneyi veri tabanına kaydetmek, yeni halini güncellemek ve sorgulama yapmak
bildiğimiz SQL komutlarına göre çok daha kolay.
Örneğin;
stmt.executeUpdate( "INSERT INTO KAHVE VALUES ('Colombian', 101, 7.99, 0, 0)");
Burada, "KAHVE" tablosuna bir kayıt eklenmekte. Böyle bir işlemi Hibernate ile yapmak için:
session.saveOrUpdate(kahve);
Sonuç olarak hibernate kullanarak bir veri tabanını kontrol etmek çok daha kolay ve verimli
hale gelir. Hibernate kullandığım takdirde tek yapmam gereken veri tabanında yapılması gereken
değişikliklerde nesneler ve tabloların nasıl eşleştirildiğini(mapping) tanımlamak.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
2.
Tarih
19/08/2013
Gün
7
Yapılan İş
Hibernate kullanarak model ve controller paketlerinin
ve sınıf ne arayüzlerini oluşturdum. Database
oluşturdum.
Html web sayfalarını arayüz olarak oluşturduktan sonra projenin ana bileşeni olan spring
web mvc’ye yönelik olarak oluşturulması gerekli model ve controller bileşenlerini oluşturdum.
Öncelikle iş için gerekli olan tabloyu databasede oluşturdum. Sonra projeyi database ile birleştirip
projedeki objelerin veri tabanındaki nesnelere nasıl karşılık geldiğini ifade etmek için sınıfları ve
arayüzleri geliştirdim. Öncelikle model paketini ve objemin özelliklerini tanımlayan bir “User”
sınıfı yarattım her özelliği bir table kolonu oldoğunu ifade etmek amacıyla Spring framework ile
gelen “@Column” annotation’ının kullandım.
Sonra bu user nesnelerinin veri tabanındaki karşılıkları olarak “dao(data access object)”
paketi oluşturarak Spring framework’ün org.springframework.stereotype.Repository”
kütüphanesinde tanımlı ve “@Component” annotation’ının özel bir bileşeni olan “@Repository”
annotation’ının kullanarak oluşturduğum “UserDao” arayüzü ve ”UserDaoImpl” sınıfı ile bu
nesneye nasıl erişilebilindiğini tanımladım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Daha sonrada hibernate özelliklerini kullanarak ekle,düzenle,sil gibi veri tabanı işlemlerini
nesne haritalama yöntemi kullanarak “service” ve “controller” paketlerinde oluşturduğum sınıf ve
ara yüzlerle tanımladım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
2.
Tarih
20/08/2013
Gün
8
Yapılan İş
Model sınıfı ile database bağlantısı için gerekli
hibernate dosyalarını oluşturdum.
Hibernate bağlantı için bazı xml ve kurulum dosyalarına ihtiyaç duymakta. Öncelikle
database için gerekli kurulumları gerçekleştirdim ve veri tabanı ismi, veri tabanının bulunduğu url,
postgre için gerekli hibernate dialect ve driver class ile kullanıcı adı ve şifresi gibi.
Sonrasında hibernate dosyaları içinde bulunan hibernate mapping files and POJOs from
Database dosyasını veri tabanı üzerindeki user tablosunu işaretleyerek, table modeline uygun bir
model sınıfı oluşturdum ve bu modelin hbm.xml uzantılı dosyasını oluşturdum.Bu xml model
sınıfının veri tabanındaki tabloya nasıl karşılık geldiğini gösteren bir dosya.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Mapping ve pojoları rest isimli bir package içerisine yerleştirdim.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
2.
Tarih
21/08/2013
Gün
9
Yapılan İş
Bağlantı için gerekli ayarlamaları tamamladım.
Spring servlet sınıfını düzenleyerek gerekli bean’leri
ekledim.
Database bağlantısı için lazım olan konfigürasyon dosyalarını düzenledim.Hibernate.cfg.xml
dosyası üzerinde daha önce gerçekleştirdiğim veri tabanı ile ilgili özellikleri değiştirdim ve bağlantı
driver sınıfı ile ilgili olabileceğini düşündüğüm için bazı değişiklikler yaptım.
Haritalamadaki bir eksiklik sebebiyle olduğunu düşündüğüm hatayı bulmaya çalıştım. Bazı beanleri
tekrar gözden geçirdim ve ekledim. DAO sınıfında gerçekleştirdiğim sessionFactory ile açılan ve
kapanan sessionları farklı yollardan ve sınıflardan çağırmayı denedim.
Burada gerçekleştirdiğim bazı işlemler için gerekli beanleri servlet sınıfına yerleştirdim.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
2.
Tarih
22/08/2013
Gün
10
Yapılan İş
Eksik kalan bazı importları ve beanleri bulamadığı
kurulamayan form-veri tabanı bağlantısını düzeltmek
için projeyde hata aradım.
Projede bazı eksik sınıf tanımlamaları ile karşılaştım. Bazı kullanmam gereken metotlara ait
eksiklikler gözlemledim ve bunun birçok dosyada bulunması beni oldukça sıkıntıya soktu. Çünkü
proje düzgün çalışmamakla birlikte koyduğum log aslında bana veri tabanına veri kaydetmesi
gereken metotun içine hiç girmediğini gösterdi.
Bu metot gereğince projenin yapması gereken html sayfasında signup butonuna
tıklandığında metotu çağırması ve veri tabanına kayıt girmesi bekleniyor ancak koyduğum log bana
butona basıldığında metotun içine hiç girmediğini gösterdi ve ekranda beklediğim “burdayim”
yazısını göremedim.
Tahminimce haritalamadan kaynaklanan bir eksiklik sebebiyle karşılaştığım bu sorunu bulmak için
hata aradım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
2.
Tarih
23/08/2013
Gün
11
Yapılan İş
Eksik kalan jar dosyalarındaki hatayı gidermek için
maven ile oluşturulmuş olarak projeyi yeniden
düzenledim.
Projede eksik kalan bazı jar dosyaları sebebiyle hata vermesini engelleyemediğim için
maven tool kullanarak projeyi tekrar oluşturdum.ve gerekli dependencyleri ekledim.
Gerekli modele uygun olacak bir veri tabanı oluşturdum ve kolonları ve türlerini
tanımladım. Tablonun adı ve kolonların modeldeki ile birebir uyması gerekiyor ve veri tipinin de
benzer olması önemli. Bu yüzden tablo ismini modeldeki ile aynı olacak şekilde “user” ve kolon
isimlerini de obje değişkenleri ve değişken tipi ile aynı olacak şekilde tanımladım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Ancak gene bazı sql hataları ile karşılaştım. Forum sayfasında yer alan select sorgusunu
çalıştıramadığı için hibernatin sql hatası verdiğini keşfettim. Ve “UserDAOImpl” sınıfında
bulunan şu kod parçacığını yeniden düzenledim. @Override
@Transactional
public List getAllUser() {
return session.getCurrentSession().createQuery("from user").list();
}
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Burada bulunan hibernate hsql kodu model sınıfının ismini baz alarak select sorgusu
çalıştırdığı için küçük harf olan “user” kısmını “User” olarak değiştirdim. @Override
@Transactional
public List getAllUser() {
return session.getCurrentSession().createQuery("from User").list();
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
2.
Tarih
24/08/2013
Gün
12
Yapılan İş
Sql hatası vermesi nedeniyle postgreye
bağlanamayan projeyi mysql server ile denedim ve
çalışır hale getirdim.
Proje nedenini anlayamadığım bir hibernate sql hatası verdi ve ben de problemin postgre
sqlden kaynaklanıyor olabileceğini düşünerek projeyi mysql ile bağlamaya karar verdim.
“StudentDB” adıyla mysql server ile bilgisayar localinde oluşturduğum, postgre sql üzerinde
yaptığımın aynısı olacak şekilde projedeki model yapıya uygun bir tablo oluşturdum.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Gördüm ki proje mysql üzerinde yapıldığı zaman hiç sorunsuz çalışıyor ve bunun sonucunda
sorunun hibernate ile postgre arasında olabilecek bir syntex bozukluğundan kaynaklanıyor
olabileceği sonucuna vardım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
3.
Tarih
26/08/2013
Gün
13
Yapılan İş
Projeyi postgresql ile düzgün çalışır hale getirdim ve
select insert sorgusu yapabilir hale geldi.
Projeyi mysql ile çalışır hale getirdikten sonra sorunun hinernate ile postgre arasındaki bir
format uyumsuzluğundan meydana geldiğini düşündüm. Bu sorunu çözmek için biraz araştırma
yapıktan sonra annotation kısmında girilen tablo ve kolon isinlerinin postgre tarafından
tanınabilmesi için escape karakter kullanılması gerektiğini öğrendim.
Daha önce @Coumn(name=”firstname”) şeklinde olan uyarı ifadesini escape karakteri
koyarak hinernate ve postgre arasındaki format uyuşmazlığını ortadan kaldırdım. Postgre sql tablo
ve kolon isinlerinin tırnak içerisinde olmasını istiyor ve java’da “ işaretini tanımlamak için escape
karakter kullanmak gerekiyor.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
3.
Tarih
27/08/2013
Gün
14
Yapılan İş
Web servisi yazmam istendi. JSON kullanarak web
servisi yazma üzerine çalıştım.
JSON bağımsız ancak C dili ailesinden olan C, C++, C#, Java, JavaScript, Perl, Python ve daha
başka bir sürü dillerle benzerdir.Bu özelliği JSON’ı ideal bir dil haline getirir.
JSON iki tip data yapısı üzerine kuruludur:
İsim/değer koleksiyonlarıdır. Değişik dillerde, bir obje, kayıt, yapı, sözlük, hash table ,
keyed list yada bir array olarak düşünülebilir.
Bir sıralı değerler listesidir. Bir çok dilde, dizin, vektör, liste yada dizi olarak değerlendirilir.
Bunlar evrensel data yapılarıdır. Öyle yada böyle modern programlama dillerine kadar her bir dil bu
yapıyı destekler.Programlama dilleriyle değişebilen yapılar, anlaşılabileceği gibi bu yapılarda da
bazı değişiklikler gösterebilir.
Aşağıdaki yapı bir JSON objesini ifade etmektedir:
{
"tip": "kitap",
"tur": "roman",
"urunler": [
{"ad": "Ihtiyar Kemanci", "yazar": "Nihat Genc"},
{"ad": "Su Cilgin Turkler", "yazar": "Turgut Ozakman"},
{"ad": "Kavgam", "yazar": "Adolf Hitler"}
]
}
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
3.
Tarih
28/08/2013
Gün
15
Yapılan İş
Gerekli maven dependency’leri buldum ve onların
tanımlanabilmesi için gereken repository’i ekledim.
JSON kütüphanesini projede kullanabilmem için gerekli olan dependencyleri eklemem
gerekti ancak kullanmış olduğum spring framework ile versiyonu yüzünden uyumsuzluk içerisinde
olduğunu fark ettim. Öncelikle Spring Frameworkün versiyonunu üst seviyedeki bir başka sürüm ile
değiştirmem gerekti. Böylece Spring Framework’ü 3.2.2 sürümüne yükselterek spring ve json
arasında gerçekleşen uyumsuzluğu ortadan kaldırmış oldum.
Daha sonra JSON kullanabilir duruma geldim.
JOSN
kütüphanesinin
nasıl kullanıldığı
ile ilgili araştırma
yaptım ve
eklemem gereken bazı benler buldum böylece yazacağım kodlar bir JSON objesine dönüşebilecekti.
Ancak bulduğum kodlar benim istediğim işlevde çalışmadığı için kullanımını öğrenmek üzere
araştırma yapmaya devam ettim.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
3.
Tarih
29/08/2013
Gün
16
Yapılan İş
Controller’da eklemem gereken annotation’ları
ekledim.
Methodların kullanımı ve JSON objesi oluşturma ile ilgili araştırmalarıma devam ettim ve
bana oldukça yardımcı olacak bazı bilgiler edindim. Bir metodun JSON objesine dönüşmesi için
gerekli olan bazı annotationlar ve bunların görevlerini buldum.
İşte Restful bir veb servisinin Sprimg mvc ile kullanımında gerekebilecek ve http message
converterların tanımlamalarından bazıları şöyle anlatılmış:
@Controller @Controller annotation’ı to MVC yapısında HTTP istekleri ile ilgilenmesi gereken sınıf
olduğunu tanımlamak için kullanılır.
@RequestMapping @RequestMapping annotation’ı http mesajı ile ilgilenecek olan metodun URI’sıdır yada
http başlığıdır.Bu annotation SpringRest yapısının anahtar işlemidir. Diğer http metodlarını
değerlendirenilmek için metodun parametreleri değiştirlenilir.
Örneğin:
@RequestMapping(method=RequestMethod.GET, value="/emps",
headers="Accept = application/json")
@PathVariable URI ‘da kullanılan path değişkeni in @PathVariable annotation kullanılarak bir parametre
değişkenine dönüştürülebilir.
Örneğin:
@RequestMapping(method=RequestMethod.GET, value="/emp/{id}")
public ModelAndView getEmployee(@PathVariable String id) { … }
Diğer kullanılabilecek annotationlar şu şekilde: @RequestParam bir URL parametresini metod değişkeni olarak dönüştürmek için
kullanılır.
@RequestHeader HTTP header ‘ını metod içerisie geçirebilmek için kullanışır.
@RequestBody HTTP talep yapısını metod içerine geçirebilmek için kullanılır.
@ResponseBody HTTP yanıtında dönecek olan yapının türünü belirtmek için kullanılır.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Örneğin:
public @ResponseBody Employee getEmployeeBy(@RequestParam("name")
String name, @RequestHeader("Accept") String accept, @RequestBody String body) {…}
public ResponseEntity<String> method(HttpEntity<String> entity) {…}
Ben de kendi kullandığım metod üzerinde annotationları şu şekilde kullandım:
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
3.
Tarih
31/08/2013
Gün
17
Yapılan İş
Hataların nedenini bulmaya çalıştım. Request body
için user nesnesi dönen bir method oluşturdum.
JSON objesi elde edebilmek için gerekli header ve annotationları kullanarak öncekinden
farklı olarak String değil bir User nesnesi dönen Controller sınıfı içerisinde bir metod oluşturdum.
Bu metod ile öğrendiğim bazı JSON annotationları kullanarak yazdım.
Bu method öncekinden farklı olarak bir string değil bir User objesi dönmeliydi.
Ancak metodun dönüş tipini User’a dönüştürmekte başarılı olamadım ve bazı hatalar ile karşılaştım.
JSON converterla ilgili olan bu hatayı gidermek için araştırmaya devam ettim.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
4.
Tarih
02/09/2013
Gün
18
Yapılan İş
Web servisini tamamladım. Controller sınıfı
içerisinde yazdığım metodlarla json objesi halinde
nesne yada nesne dizini elde ettim.
Springin MVC annotationını işler hale getirmek için eklemem gerekiyordu.
Bu annotationın birde bazı tanımlamalarını yapmam gerekti.
ve,
Daha sonra controller içerisinde şu metodu oluşturdum. Bu metod ile kullanıcının user idsini
kullanarak bu kişinin bilgilerini json formatında dönmesi gerekiyordu.
Buradaki @ResponseBody hangi tür yanıt döneceğini ifade etmekte ve burada bu bir User
objesi.
@RequestMapping ile URL içerisindeki {userId} değişkenini olarak kullandığımı ve
@PathVariable ile bu URL içerisindeki userId değişkenini metod içerisinde bir parametre olarak
kullandığımı ifade ediyor.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Ancak url içerisinde metodu çağırmak için .json uzantısı kullanmam gerektiğini keşfettim.
Ancak benim URL mapping’im web.xml dosyası içerisinde şu şekilde tanımı idi.
Ancak .json uzantısını da tanımlamam gerekiyordu.
Bu patetrni fark edip bunu dönüştürebilecek olan bir converter olmadığını ve headerların tek başına
yeterli olmadığını anladım. Böylece servlet içerisine genel bir JSON, XML ve diğer url tiplerini
fark edebilecek bir http url converter ekledim.
Ve sonunda JSON objesini elde etmeyi başardım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
4.
Tarih
03/09/2013
Gün
19
Yapılan İş
Android ile activity-main.xml üzerinde layout’u
oluşturdum ve formun mobil tarafını basit bir şekilde
tamamladım.
Web servisi yazmayı tamamladıktan sonra projenin mobil tarafına yöneldim ve işin en
büyük kısmı olan mobilden web servise veri aktarımını gerçekleştirmek üzere android mobil
programlama dili kullanarak bir üyelik form sayfası oluşturmam ve buradan girilen verilerin web
servisi tarafından alınıp işlenerek veri tabanına aktarılması bekleniyordu.
İşe form sayfasını tasarlamakla başladım.Önce “RestaurantRes” adı ile bir android projesi
oluşturdum ve daha sonra main_activity.xml dosyası üzerinde üyelik formunu tasarladım. Linear
Layout, text View , Edit Text ve Button bileşenlerini kullanarak basit bir form tasarladım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
4.
Tarih
04/09/2013
Gün
20
Yapılan İş
Android client tarafında çalıştım ve RestClient sınıfı
yazdım.
Android mobil uygulama tarafında tasarlanan form üzerinden veri transferi
gerçekleştirmenin yollarını araştırdım. Öncelikle formda bulunan editText bileşenleri üzerinden
elde ettiğim textleri birer string haline getirdim. Ancak bu parametreleri ne şekilde web servisi
tarafına transfer edeceğimi tam olarak bilmiyordum. Bu sebeple transfer şeklinden önce benim için
gerekli olan url ile bağlantı açmam gerekti.
İlk olarak server tarafında yazdığım metodun url’sını kullanarak web servisine
bağlanabileceğim bir sınıf yazdım. Bu sınıf Apache http client kullanarak bağlantı işlemlerini
gerçekleştirebilmemi sağlayacak olan yapıydı. Daha sonra GET ve POST metodlarından hangisini
kullanırsam ona göre ayrı bir işlem yapan execute metodunu yazdım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
4
Tarih
05.09.2013
Gün
21
Yapılan İş
Android projesinde giriş ve login sayfalarını
düzenledim ve aralarındaki geçişleri sağladım.
Layout xml dosyalarını ve Apache http client ile gerçekleştirilecek bağlantı işlerini sağlayan
sınıfı tanımladıktan sonra bu layout dosyalarının içeriğini ve client bağlantısını kullanan activity
sınıflarını oluşturdum. En başta tasarlamış olduğum form sayfası bu mobil uygulamanın bir parçası
olduğu için ilk açılan sayfanın form olmaması gerektiği için önce bir giriş sayfası tasarladım ve
internetten bulduğum bazı görsellerle daha etkileyici hale getirmeye çalıştım.
Bu açılış sayfasını ekranda kısa bir süre tuttuktan sonra asıl uygulama kısmına geçmesini
sağladım. Bu görsel giriş sayfasını 3 saniye ekranda kaldıktan sonra bir sonraki sayfaya geçecek ve
geri dönüşü engellemek için manifest dosyası içerisinde activity kısmına “no-
history=true” komutunu yerleştirerek oluşturdum ve süreyi ayarlamak için de thread kullandım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Giriş sayfasından sonra karşımıza gelen sayfayı login sayfası olarak tasarladım. Bu sayfanın
sadece form kısmına geçecek olan butonunu aktif hale getirdim ve “onClick” metodunu kullanarak
daha önce tasarladığım signup form sayfasını açacak şekilde işlev kazandırdım.
Projenin mobil tarafdaki asıl hedefim mobil ile yazmış olduğum web servisi arasındaki bağlantıyı
kurabilmek olduğu için daha çok bu form sayfası üzerinde yoğunlaştım.
Manifest dosyasını kullanarak bu activity sınıflarının hangisinin luncher olarak ve
hangilerinin default activity olarak gelmesi gerektiğinini tanımladım. Bu safyafal arasındaki
geçişleri saglamak için oluşturduğum activity sınıfları içerisinde intentler ile manifestteki activity
isimlerini kullanrak sağladım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
4
Tarih
06.09.2013
Gün
22
Yapılan İş
Android client tarafında yapılacak işlemleri
gerçekleştirdim.
İlk önce yazmış olduğum apache http client kullanan RestClient sınıfı ile value pair
arraylerini kullanarak parametreleri web servisine aktarmayı düşünmüştüm ancak bikaç denemeden
sonra bunun o kadar basit olmadığını ve web servisinden gelecek cevabın iletimi ile ilgili sıkıntıları
nasıl gidereceğim hakkında bilgi sahibi değildim. Bu nedenle, bende parametreleri url üzerinden
server tarafında pathVariable annotation’ını kullanarak url path’inden çekebileceğime ve bu işlemin
diğer seçeneklere nazaran daha basit olacağına karar verdim.
Önce form sayfasından aldığım değişkenleri path olarak urlye ekledim. Yazmış
olduğum RestClient sınıfını kullanarak bir obje oluşturdum ve server tarafında map edilmiş olan
url’yi kullanarak web servisi ile bağlantı oluşturdum.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
4
Tarih
07.09.2013
Gün
23
Yapılan İş
Server tarafının android client tarafından gönderilen
kısmını nasıl değerlendirmesi gerektiğini tanımladım.
Web sayfası üzerinde validation ile ilgili ayrıntıları
düzenledim.
Client tarafında verileri url üzerinden göndermeye karar vermiştim. Bunun üzerine android
clientta yapmış olduğum http request için server tarafında bir metodun önceden basit bir şekliyle
oluşturmuş ancak tam olarak tanımlamamıştım.
Verileri url ile göndermeye karar verdikten sonra bunu server tarafında nasıl
değerlendirilmesi gerektiğini tanımladım. Yazdığım metoda pathdeki verileri birer parametre olarak
@PathVariable annotation’ı kullanarak kullandım ve metod içerisinde oluşturduğum yeni bir user
nernesine parametreleri atayarak bu user objesini veri tabanına kaydettim.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Daha sonra, önceden de yapmış olduğum jsp sayfası üzerindeki formda gerçekleştirdiğim
validationları javascript kullanarak tekrarladım. Böylece kullanıcı form üzerinde boş alan
bırakamayacak, istenen veriye uygun veri girecek duruma geldi. Ayrıca birthdate bölmesinede bir
datepicker nesnesi korayak daha kullanışlı duruma getirdim.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
5
Tarih
09.09.2013
Gün
24
Yapılan İş
Bağlantıyı başarılı bir şekilde gerçekleştiremediğim
için farklı yöntemler deneyerek server ile bağlantı
kurmaya çalıştım. Projenin signup formunu çalışır
hale getirdim.
Server tarafında da, mobil uygulama tarafında da yapmam gereken bağlantıları tamamlamış
olduğu düşünerek projeyi çalıştırmayı denedim fakat her seferinde bana aynı hatayı verdi ve verdiği
hata main thread içerisinde fazla işlem yapıldığı ve thread’in durdurulduğuyla ilgiliydi, ki bunun ne
anlama geldiğini bulmak için aynı işlemi farklı kod parçalı ile değişik şekillerle gerçekleştirdikten
sonra karşıma çıkan sonuçlara ve araştırmalarıma dayanarak bana gerekli olan şeyin aslında android
mobil uygulamalarda sıkça kullanılan asyntask yöntemi olduğunu öğrendim ve formun activity
sınıfı içerisinde ayrıca şöyle bir sınıf tanımladım:
Daha sonra bu sınıfı kullanmak için man activity de daha önce RestClient sınıfını çağırdığım
yerde bu işlemleri myAsynTask sınıfını yaptırarak sadece bu sınıfı çağırarak thread problemini
çözmüş oldum.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Hafta
5
Tarih
10.09.2013
Gün
25
Yapılan İş
Signup formu ile yaptığım işlemin benzerini sign in
kısmı için gerçekleştirdim.
Sign up formu çalışır hale getirdim ancak tek bir sorun vardı. O da formun boş
gönderilmemesi gerekliliği çünkü formun boş gönderilmesi halinde benim url yoluyla göndermeye
çelıştığım parametreler null oldukları için boş gitmekte ve parametreler arasındaki “/ ” path
ayırmakta kullandığım slash karakteri arka arkaya gelerek sorun çıkartıyordu ve girilen url
bulunamıyordu.
Bu problemi daha sonra gerçekleştirmek için bir kenara bırakarak sign up formu için
gerçekleştirdiğim işlemin benzerini Sign in sayfasındaki üye girişi kısmı için de gerçekleştirdim.
Burada da bir asynTask sınıfı yaratarak bir başka http client çağrısı ile server bağlantısı
gerçekleştirmeye çalıştım. Android mobil uygulama tarafında gerçekleştirdiğim bu işlemin doğru
olduğunu düşünerek server tarafında çalıştım. Ancak mail adresini kullanarak kullanıcı girişi
yapmaya çalıştığım işlemde kullanıcının id üzerinden bulunması gibi bir sorun olduğu için email
kullanarak bu kullanıcının id’sini bulmaya yarayan bir metod yazdım ancak veri tabanında veriyi
çekmekte bazı sorunlar yaşadım.
Öğrencinin Adı, Soyadı, İmzası : ……………………………………….
İşyeri Stajyer Sorumlusunun Onayı (İmza, Mühür) : ……………………………………….
Öğrencinin,
Adı :Emine Begüm
Soyadı :Tansal
Numarası :
Bölümü :Bilgisayar Mühendisliği
(Bu Kısım Staj Komisyonu Tarafından Doldurulacaktır)
Öğrencinin Stajı Hakkında Düşünceler:…………………………………………...................
………………………………………………………………………………………………..
………………………………………………………………………………………………..
………………………………………………………………………………………………..
Yukarıda kimliği belirtilmiş öğrencinin …………………dönemi stajı, RED
KABUL edilmiştir.
Tarih :
Staj Komisyonu:
Üye Üye Başkan
T.C. KADİR HAS ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ
T . C . K AD İ R HAS
Ü N İ V E RSİ T ESİ
Adres:
Kadir Has Üniversitesi, Mühendislik Fakültesi
Cibali Kampüsü Fatih Haraçcı Karamehmet Mah. Hisaralti Cad. 34230 Fatih/İSTANBUL
Tel: (0212) 533 65 32, dahili:1402 Fax: (0212) 533 57 53