1. Sabancı Üniversitesi
Bilişim Teknolojileri
Yüksek Lisans
Programı
Seminerleri
Java ile Web Uygulamaları
Geliştirme
Ahmet Demirelli
SCJP 5.0 - SCWCD 1.4
www.sabanciuniv.edu/kcenter
2. Ajanda
• Web uygulaması nedir
• Basit bir CGI örneği
• Uygulama Sunucuları
• Bir Java Web Uygulaması için neler gerekli
• Web Tools Platform
• Servlet
• doGet() ve doPost() methodları
• JSP
• JSP sayfalarında önceden tanımlı nesneler
www.sabanciuniv.edu/kcenter
3. Web Sayfaları
request
response
GET /downloads/index.html HTTP 1.1
Accept : text/html
Accept-Language: en-us
User-Agent: Mozilla /4.0
...........
www.sabanciuniv.edu/kcenter
4. Web Siteleri
Web sitesi ;
– Birbirleri ile ilişkili web sayfaları topluluğudur.
• Eğer web sitesi sadece tanıtım amaçlı ise ;
• Kullanıcı ile etkileşimi yoksa ;
• Sadece html sayfalarından ve o sayfalardaki
text,resim,flash animasyon ve javascript kodları
yeterlidir.
request .js dosaları
html
istemci
response Resimler .swf dosyaları
www.sabanciuniv.edu/kcenter
5. Web Uygulamaları
• Kullanıcı etkileşimi (kullanıcıdan bilgi alma...vb)
• Kullanıcı şifre onaylama (login işlemleri )
• Arama işlemleri
• Oturum açma (alışveriş sepeti ..vb )
• Her kullanıcıya farklı arayüz
• .....vb gibi
gereksinimlerimiz varsa sunucu tarafında
çalışan programlara ihtiyacımız var.
www.sabanciuniv.edu/kcenter
7. Basit CGI örneği
• Herhangi bir exe dosyasını Apache web server
da /cgi-bin/ klasörü altına kopyalayıp.
• Browser adres satırına ;
http://localhost/cgi-bin/hello.exe
yazıp web sunucusundan bu programı
çalıştırmasını istiyoruz.
class Program
Hello.exe {
static void Main(string[] args)
C# ile yazılmış bir windows programı {
Console.WriteLine(quot;Content-Type:text/htmlnquot;);
Console.WriteLine(quot;Hello Worldquot;);
}
}
www.sabanciuniv.edu/kcenter
8. Uygulama Sunucusu
Sunucu tarafında çalışacak uygulamaları
yorumlayıp veya çalıştırıp ortaya çıkan
sonuçları tekrar istemciye göndermekle
görevli olan sunuculardır.
.NET
* . php
*. asp * . dll
•... * . class
•.....
•... J2EE
www.sabanciuniv.edu/kcenter
9. J2EE Uygulama Sunucuları
J2EE Uygulama Sunucusu
EJB container
Web container
WebComponents BusinessComponents
Servlet SessionBean,
jsp EntityBean,
Html / xml MessageDrivenBean
www.sabanciuniv.edu/kcenter
10. J2EE Uygulama Sunucuları
• Tomcat Web Container ****
• JBoss Web + EJB container
• BEA WebLogic Web + EJB container
• IBM WebSphere Web + EJB container
• Oracle 10g Web + EJB container
• Sun ONE Web + EJB container
www.sabanciuniv.edu/kcenter
11. J2EE Web Uygulaması için
• Web Container (Tomcat 5.5)
• http://tomcat.apache.org/
• J2EE Uygulama geliştirme ortamı (Web Tools
Platform)
• http://download.eclipse.org/webtools/
***Uygulamanın J2EE belirtimlerine uygun bir şekilde
dosyalanmış olması gerekir.
www.sabanciuniv.edu/kcenter
12. Gerekli dosya ve klasörler
Uygulama ana klasörü
BookStore
Özel klasör
WEB-INF (dışarıdan erişime kapalı)
classes Servlet class larınınn
bulunacağı klasör
lib Projede kullanılan extra
kütüphaneler
tlds Tag kütüphaneleri
Uygulama konfigürasyon
web.xml
dosyası
( deployment descriptor )
HTML ve Uygulamada kullanılan
jsp diğer dosyalar
dosyaları
www.sabanciuniv.edu/kcenter
13. Web Tools Platform
• Java ile J2EE uygulamaları geliştirmeyi
kolaylaştırmak için yazılmış bir eclipse eklentiler
bütünüdür.
• http://download.eclipse.org/webtools/
..........................Kurulum ve Ayarlar..........................
• Web Tools Platformu indirip herhangi bir klasöre
açıyoruz.
www.sabanciuniv.edu/kcenter
14. Web Tools Platform
• Web Tool Platform da uygulama geliştirmeye
başlamadan önce perspective ayarlarını
değiştirmeniz gerekmektedir.
• Bunun için ;
Windwow Open Perspective Other .. J2EE seçiyoruz
www.sabanciuniv.edu/kcenter
15. Web Tools Platform Ayarları-1
• Windows -> Preferences -> Server -> Installed JREs
www.sabanciuniv.edu/kcenter
20. WTP - Yeni Proje Oluşturma-1
• Project Explorer -> Dynamic Web Projects -> New -> Dynamic Web Project
www.sabanciuniv.edu/kcenter
21. WTP - Yeni Proje Oluşturma-2
Servlet classlarının kaynak kodları
Servlet classlarının kaynak kodları
(*.java dosyaları ) )
(*.java dosyaları
Web içeriği
Web içeriği
(web.xml, jsp ve
(web.xml, jsp ve
htmldosyaları ) )
htmldosyaları
www.sabanciuniv.edu/kcenter
24. Servlet
• Sunucu tarafında çalışan derlenmiş özel java class
ları.
• Görevleri
– Kullanıcıdan gelen açık ( explicit ) bilgileri almak (Form bilgileri)
– Kullanıcıdan gelen kapalı (implicit) bilgileri almak (Request Header)
– Bu bilgilerle işlemler yapmak
– HTML çıktısı üretmek
– Açık bilgileri kullanıcıya göndermek ( HTML )
– Kapalı bilgileri kullanıcıya göndermek (Response header)
Kullanıcılar ile nasıl bilgi alışverişinde bulunacağız.?
www.sabanciuniv.edu/kcenter
25. Kullanıcılardan bilgi almak
• Sunucu tarafında çalışan uygulamalara
kullanıcılar bilgiyi HTML-Formları ile veya URL
ile gönderebilirler
<html>
<html>
<head></head>
<head></head>
<body>
<body>
<form action=quot;index.jspquot; method=quot;GETquot;>
<form action=quot;index.jspquot; method=quot;GETquot;>
sim :<input type=quot;textquot; name=quot;isimquot; /><br>
sim :<input type=quot;textquot; name=quot;isimquot; /><br>
No :<input type=quot;textquot; name=quot;idquot; /><br>
No :<input type=quot;textquot; name=quot;idquot; /><br>
<input type=quot;submitquot; value=quot;Gonderquot;/>
<input type=quot;submitquot; value=quot;Gonderquot;/>
</form>
</form>
</body></html>
</body></html>
www.sabanciuniv.edu/kcenter
26. HttpRequest & HttpResponse
GET /downloads/index.jsp?isim=ahmet&no=447 HTTP 1.1
• HttpRequest GET /downloads/index.jsp?isim=ahmet&no=447 HTTP 1.1
Accept : : text/html
Accept text/html
Accept-Language: en-us
– GET Accept-Language: en-us
User-Agent: Mozilla /4.0 HTTP Header
User-Agent: Mozilla /4.0
– POST
HTTP Body
POST /downloads/index.jsp HTTP 1.1
POST /downloads/index.jsp HTTP 1.1
Accept : text/html
Accept : text/html
Accept-Language: en-us
Accept-Language: en-us
User-Agent: Mozilla /4.0
User-Agent: Mozilla /4.0
isim=ahmet&no=447 HTTP Header
isim=ahmet&no=447
HTTP Body
• HttpResponse HTTP/1.1 200 OK
HTTP/1.1 200 OK
Content-Length: 114
Content-Length: 114
Date: Mon, 30 April 2006 11:07:44 GMT
Date: Mon, 30 April 2006 11:07:44 GMT
Content-Type: text/html
Content-Type: text/html
Server: Apache HTTP Header
Server: Apache
<html>
<html>
HTTP Body
<head> </head><body> .......
<head> </head><body> .......
www.sabanciuniv.edu/kcenter
27. Bir Sınıfın Servlet Olabilmesi için
import java.io.*;
import java.io.*; HttpServlet sınıfının
HttpServlet sınıfının
import javax.servlet.*;
import javax.servlet.*; alt sınıfı olmak zorunda
alt sınıfı olmak zorunda
import javax.servlet.http.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
public class HelloWorld extends HttpServlet
{
{
public void doGet(HttpServletRequest req,HttpServletResponse res)
public void doGet(HttpServletRequest req,HttpServletResponse res)
throws ServletException, IOException
throws ServletException, IOException
{
{
PrintWriter out = res.getWriter();
PrintWriter out = res.getWriter();
out.println(quot;Hello Worldquot;);
out.println(quot;Hello Worldquot;);
}
}
GET ve POST isteklerini karşılayacak
GET ve POST isteklerini karşılayacak
}
}
olan doGet() veya doPost() methodların
olan doGet() veya doPost() methodların
yazılması gerekir. Methodlar yazılmazsa
yazılması gerekir. Methodlar yazılmazsa
gelen istekler cevapsız kalır.
gelen istekler cevapsız kalır.
www.sabanciuniv.edu/kcenter
28. doGet() & doPost() methodları
Web Container
HttpRequest GET
HttpRequest GET
HelloWorld.class
HttpRequest POST
Browser HttpRequest POST
service ( HttpRequest req , HttpResponse res )
doGet ( HttpRequest req , HttpResponse res )
doPost ( HttpRequest req , HttpResponse res )
HttpResponse
HttpResponse
www.sabanciuniv.edu/kcenter
29. Servlet Yaşam Döngüsü
Servlet classının hafızaya ilk defa
Başlangıç Servlet classının hafızaya ilk defa
Başlangıç yüklendiğinde çalışması gereken kodlar
yüklendiğinde çalışması gereken kodlar
init()
init() bu method içerisineyazılır
bu method içerisineyazılır
stemciden gelen isteğin ilk karşılandığı
stemciden gelen isteğin ilk karşılandığı
Hizmet
Hizmet methoddur. steğin türünü belirleyip ilgili
methoddur. steğin türünü belirleyip ilgili
service() methoda yönlendirir.
service() methoda yönlendirir.
doGet()
doGet() GET isteklerine cevap veren method
doPost() GET isteklerine cevap veren method
doPost()
POST isteklerine cevap veren method
POST isteklerine cevap veren method
Sonlandırma Servlet hafızadan kaldırılırken yapılacak
Sonlandırma Servlet hafızadan kaldırılırken yapılacak
işlemleri bu method içerisine yazılır
destroy() işlemleri bu method içerisine yazılır
destroy()
www.sabanciuniv.edu/kcenter
30. DEMO - Servlet Örneği
• Web Tools Platform da oluşturduğmuz yeni
projeye servlet eklemek
• doGet() ve doPost() methodlarını yazmak
• Kullanıcıdan gelen bilgileri request nesnesinden
almak ( request.GetParameter() )
• Kullanıcıya gönderilecek bilgileri response
nesnesine yazmak.
• web.xml dosyası
www.sabanciuniv.edu/kcenter
31. web.xml (Deployment descriptor)
• Uygulamada hangi servletler var, bu servletlere
URL ile nasıl ulaşılabilir.
• Authentication
• User roles
• Filters
• Güvenlik kısıtlamaları
• ....... etc
www.sabanciuniv.edu/kcenter
32. Problemler
• Eğer uygulamamızda yalnız servlet kullanarak
yazarsak;
– Java Programcıları HTML bilmek zorunda
– HTML çıktısı verebilmek için sürekli print() fonksiyonu
kullanılmak zorunda
– Yapılan küçük bir değişiklik için kod tekrar derlenmek
zorunda
– Arayüz ile java kodları iç içe (spaghetti code) bulunmak
zorunda
www.sabanciuniv.edu/kcenter
33. Çözüm
• Servlet Kod + ş Kuralları
– Sadece java kodu bulunmalı, mümkünse hiç HTML
yazdırılmamalı.
– Görevini tamamladıktan sonra bir jsp sayfasına
yönlendirilmeli.
• JSP (Java Server Pages) Arayüz
– Jsp bir HTML dizayn aracı kullanılarak düzenlenebilir
(DreamWeaver,Frontpage..etc)
– Minimum java kodu bulunmalı.
– Sadece servletlerden dönen sonuçları ekrara bastırmak için
kullanılmalı.
– JSTL kullanılmalı.
www.sabanciuniv.edu/kcenter
34. JSP (Java Server Pages)
• çerisinde java kodu yazılabilen html sayfası.
<HTML>
<HEAD><TITLE>Deneme Sayfası</TITLE></HEAD>
<BODY>
<H2>JSP Sayfası </H2><br>
Şu An : <%=new java.util.Date() %>
<table align=“center”>
<tr><td>
<% out.Prinln(“Hello JSP”) %>
</td></tr>
</table>
</BODY></HTML>
www.sabanciuniv.edu/kcenter
35. JSP ifadeleri
• Expression XML Syntax
– <%= expression %> <jsp:expression>code</jsp:expression>
– out.Println() yazmak yerine
• Scriptlet
– <% code %> <jsp:scriplet> code</jsp: scriplet>
• Declaration
– <%! code %> <jsp:declaration>code</jsp: declaration>
– Mevcut jsp sayfasının tamamından ulaşılabilen
değişkenler tanımlamak için kullanılır.
www.sabanciuniv.edu/kcenter
36. JSP Önceden tanımlanmış nesneler
• request ( HttpRequest )
• response ( HttpResponse )
• out ( PrintWriter )
– Response nesnesine birşeyler yazabilmek için kullanılır.
• session ( HttpSession )
– Kullanıcıların oturum işlemleri için kullanılan nesnedir
• application ( ServletContext )
– Tüm genel bilgilerin tutulabileceği nesne
www.sabanciuniv.edu/kcenter
37. JSP- Yaşam Döngüsü
• JSP sayfaları Web container tarafından servlet
koduna dönüştürülür.
• Servlete dönüştürülen JSP compile edilir.
• Oluşan .class dosyası hafızaya yüklenip aşağıdaki
methodlar sırasıyla çalıştırılır.
– jspInit()
– jspService() – JSP sayfsının body bölümü
– jspDestroy()
www.sabanciuniv.edu/kcenter
38. DEMO – (Jsp-Servlet Uygulaması)
• Web Tools Platform da oluşturduğmuz yeni projeye
jsp sayfası eklemek
• Scriplet ,expression ve declaration taglari kullanmak
• Servletten response nesnesine request.setAttribute()
methodu ile eklenen bir değişkeni
request.getAttribute() methodu ile almak.
• JDBC ile MySQL veritabanından bilgi çekmek.
www.sabanciuniv.edu/kcenter