39
www.sabanciuniv.edu/kcenter Bilişim Teknolojileri Yüksek Lisans Programı Seminerleri Sabancı Üniversitesi Java ile Web Uygulamaları Geliştirme Ahmet Demirelli SCJP 5.0 - SCWCD 1.4

Java Web Uygulama Geliştirme

Embed Size (px)

DESCRIPTION

Sabancı Üniversitesinde ve TBD de vermiş olduğum seminerin slaytları.Java ile Web uygulaması nasıl geliştirilir giriş Seviyesi bilgilendirme

Citation preview

Page 1: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Bilişim TeknolojileriYüksek LisansProgramıSeminerleri

Sabancı Üniversitesi

Java ile Web Uygulamaları GeliştirmeAhmet Demirelli

SCJP 5.0 - SCWCD 1.4

Page 2: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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

Page 3: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Web Sayfaları

GET /downloads/index.html HTTP 1.1Accept : text/htmlAccept-Language: en-usUser-Agent: Mozilla /4.0...........

response

request

Page 4: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Web SiteleriWeb 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.

istemci

Resimler

.js dosalarıhtml

.swf dosyaları

request

response

Page 5: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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.

Page 6: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Web Uygulamaları ( CGI )

CGI Programları*.exe,*.cgi... etc

Page 7: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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{

static void Main(string[] args){

Console.WriteLine("Content-Type:text/html\n");Console.WriteLine("Hello World");

}}

Hello.exe

C# ile yazılmış bir windows programı

Page 8: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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.

* . dll* . class

* . php*. asp•...•.....•...

.NET

J2EE

Page 9: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

J2EE Uygulama Sunucuları

Web container

J2EE Uygulama Sunucusu

WebComponentsServletjspHtml / xml

BusinessComponentsSessionBean,EntityBean,MessageDrivenBean

EJB container

Page 10: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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

Page 11: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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.

Page 12: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Gerekli dosya ve klasörlerBookStore

WEB-INF

classes

web.xml

HTML ve jsp

dosyaları

Uygulama ana klasörü

lib

tlds

Özel klasör (dışarıdan erişime kapalı)

Servlet class larınınn bulunacağı klasör

Projede kullanılan extra kütüphaneler

Tag kütüphaneleri

Uygulama konfigürasyon dosyası

( deployment descriptor )

Uygulamada kullanılan diğer dosyalar

Page 13: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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.

Page 14: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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

Page 15: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Web Tools Platform Ayarları-1• Windows -> Preferences -> Server -> Installed JREs

Page 16: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Web Tools Platform Ayarları-2

Page 17: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Web Tools Platform Ayarları-3

Page 18: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Web Tools Platform Ayarları-4• Servers -> Right Click -> New � Server

Page 19: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Web Tools Platform Ayarları-5

Page 20: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

WTP - Yeni Proje Oluşturma-1• Project Explorer -> Dynamic Web Projects -> New -> Dynamic Web Project

Page 21: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

WTP - Yeni Proje Oluşturma-2

Servlet classlarının kaynak kodları(*.java dosyaları )

Servlet classlarının kaynak kodları(*.java dosyaları )

Web içeriği(web.xml, jsp ve htmldosyaları )

Web içeriği(web.xml, jsp ve htmldosyaları )

Page 22: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Projeyi Sunucuda Çalıştırma-1

Page 23: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Projeyi Sunucuda Çalıştırma-2

Page 24: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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.?

Page 25: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Kullanıcılardan bilgi almak• Sunucu tarafında çalışan uygulamalara

kullanıcılar bilgiyi HTML-Formları ile veya URLile gönderebilirler<html>

<head></head>

<body>

<form action="index.jsp" method="GET">

İsim :<input type="text" name="isim" /><br>

No :<input type="text" name="id" /><br>

<input type="submit" value="Gonder"/>

</form>

</body></html>

<html>

<head></head>

<body>

<form action="index.jsp" method="GET">

İsim :<input type="text" name="isim" /><br>

No :<input type="text" name="id" /><br>

<input type="submit" value="Gonder"/>

</form>

</body></html>

Page 26: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

<html> <head> </head><body> .......

<html> <head> </head><body> .......

HttpRequest & HttpResponse• HttpRequest

– GET

– POST

• HttpResponse

GET /downloads/index.jsp?isim=ahmet&no=447 HTTP 1.1Accept : text/htmlAccept-Language: en-usUser-Agent: Mozilla /4.0

GET /downloads/index.jsp?isim=ahmet&no=447 HTTP 1.1Accept : text/htmlAccept-Language: en-usUser-Agent: Mozilla /4.0

POST /downloads/index.jsp HTTP 1.1Accept : text/htmlAccept-Language: en-usUser-Agent: Mozilla /4.0isim=ahmet&no=447

POST /downloads/index.jsp HTTP 1.1Accept : text/htmlAccept-Language: en-usUser-Agent: Mozilla /4.0isim=ahmet&no=447

HTTP/1.1 200 OKContent-Length: 114Date: Mon, 30 April 2006 11:07:44 GMTContent-Type: text/htmlServer: Apache

HTTP/1.1 200 OKContent-Length: 114Date: Mon, 30 April 2006 11:07:44 GMTContent-Type: text/htmlServer: Apache

HTTP Header

HTTP Body

HTTP Header

HTTP Header

HTTP Body

HTTP Body

Page 27: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Bir Sınıfın Servlet Olabilmesi için import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloWorld extends HttpServlet

{

public void doGet(HttpServletRequest req,HttpServletResponse res)

throws ServletException, IOException

{

PrintWriter out = res.getWriter();

out.println("Hello World");

}

}

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloWorld extends HttpServlet

{

public void doGet(HttpServletRequest req,HttpServletResponse res)

throws ServletException, IOException

{

PrintWriter out = res.getWriter();

out.println("Hello World");

}

}

HttpServlet sınıfının alt sınıfı olmak zorundaHttpServlet sınıfının

alt sınıfı olmak zorunda

GET ve POST isteklerini karşılayacak olan doGet() veya doPost() methodların yazılması gerekir. Methodlar yazılmazsa

gelen istekler cevapsız kalır.

GET ve POST isteklerini karşılayacak olan doGet() veya doPost() methodların yazılması gerekir. Methodlar yazılmazsa

gelen istekler cevapsız kalır.

Page 28: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

doGet() & doPost() methodları

Browser

HttpResponseHttpResponse

Web ContainerHttpRequestHttpRequest GETGET

HttpRequestHttpRequest POSTPOST

doGet ( HttpRequest req , HttpResponse res )

doPost ( HttpRequest req , HttpResponse res )

HelloWorld.class

service ( HttpRequest req , HttpResponse res )

Page 29: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Başlangıçinit()

Başlangıçinit()

Hizmetservice()

doGet()doPost()

Hizmetservice()

doGet()doPost()

Sonlandırmadestroy()

Sonlandırmadestroy()

Servlet Yaşam DöngüsüServlet classının hafızaya ilk defa

yüklendiğinde çalışması gereken kodlar bu method içerisineyazılır

Servlet classının hafızaya ilk defa yüklendiğinde çalışması gereken kodlar

bu method içerisineyazılır

GET isteklerine cevap veren methodGET isteklerine cevap veren method

İstemciden gelen isteğin ilk karşılandığı methoddur. İsteğin türünü belirleyip ilgili

methoda yönlendirir.

İstemciden gelen isteğin ilk karşılandığı methoddur. İsteğin türünü belirleyip ilgili

methoda yönlendirir.

POST isteklerine cevap veren methodPOST isteklerine cevap veren method

Servlet hafızadan kaldırılırken yapılacak işlemleri bu method içerisine yazılır

Servlet hafızadan kaldırılırken yapılacak işlemleri bu method içerisine yazılır

Page 30: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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ı

Page 31: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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

Page 32: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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

Page 33: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

Çö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ı.

Page 34: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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>

Page 35: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

JSP ifadeleri• Expression

– <%= expression %>– out.Println() yazmak yerine

• Scriptlet– <% code %>

• Declaration– <%! code %>– Mevcut jsp sayfasının tamamından ulaşılabilen

değişkenler tanımlamak için kullanılır.

<jsp:expression>code</jsp:expression>

<jsp:scriplet> code</jsp: scriplet>

<jsp:declaration>code</jsp: declaration>

XML Syntax

Page 36: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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

Page 37: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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()

Page 38: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

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.

Page 39: Java Web Uygulama Geliştirme

www.sabanciuniv.edu/kcenter

[email protected]