35
J2EE Mimarileri (Struts, Hibernate, Ajax) ile Uygulama Geliştirmek Muharrem TAÇ Martı Bilişim www.martisoft.com

Java EE Struts

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Java EE Struts

J2EE Mimarileri (Struts, Hibernate, Ajax) ile Uygulama Geliştirmek

Muharrem TAÇMartı Bilişim

www.martisoft.com

Page 2: Java EE Struts

KONU BAŞLIKLARI

1-J2EE mimarisi nedir?2-MVC tasarım deseni (design patterns) ne işe yarar?3-Struts Framework4-Hibernate ORM5-Ajax anywhere6-Displaytag

Page 3: Java EE Struts

J2EE

Page 4: Java EE Struts

J2EE MİMARİSİ NEDİR ?J2EE Java 2 Enterprise Edition’ın kısaltmasıdır, yeni adı Java EE olarak değişmiştir,Bu mimari çok katmanlı kurumsal uygulamalar oluşturmak için API’ler sunar,

JSP, Servlets, (Web tabanlı sunum katmanı)JDBC, (Java veritabanı bağlanırlığı)JMS,(Java Mesajlaşma Servisi)RMI, (Uzaktan method çağırma)JNDI,(Java isimlendirme ve dizinleme servisi)Java Mail,(E-posta gönderme ve alma)EJB (Enterprise Java Beans) gibi..

Çok katmanlı mimaride genelde 3 katman bulunur,Sunum katmanı (presentation layer)İş katmanı (business layer)Uygulama katmanı (application layer)

Page 5: Java EE Struts

J2EE MİMARİSİ

Page 6: Java EE Struts

J2EE WEB UYGULAMALARI NASIL ÇALIŞIR ? Bir uygulama sunucusu ya da servlet container olmalıdır

ÖrneklerOpen Source : Tomcat, Jetty, Jboss, Glassfish, GeronimoTicari : BEA Weblogic, Oracle Application Server, IBM Websphere, Sun Application Server

Sunucuya deploy edilmiş web uygulamasında WEB-INF dizini olmalıdır,

WEB-INF dizini altında web.xml olmalıdır, web uygulamalarının temel konfigürasyon dosyası web.xml’dir,

Derlenmiş java kodları class uzantıları ile WEB-INF/classes dizinde bulunur,

Kullanılan teknolojilerin kütüphaneleri .jar dosyaları halinde WEB-INF/lib dizini altında bulunur,

Page 7: Java EE Struts

MVC

Page 8: Java EE Struts

MVC NEDİR NE İŞE YARAR ?Bir tasarım kalıbıdır (design pattern),

MVC Model View Controller’ın kısaltmasıdır,

Model : Kuralların tanımlandığı, hesaplamaların, veritabanı objelerinin bulunduğu katman. Örneğin Kullanici isimli objemiz.

View : Verilerin görüntülenmesi ile ilgili işlemleri gerçekleştiren katmandır, JSP, JSTL, Displaytag gibi...

Controller : Veri akışının nereden nereye gideceğini belirleyen katmandır. Struts için ActionServlet , struts-config.xml

Page 9: Java EE Struts

STRUTS MVC

Controller View Model

Page 10: Java EE Struts

STRUTS

Page 11: Java EE Struts

STRUTS FRAMEWORK

Struts, en eski ve en popüler J2EE framewoküdür diyebiliriz,

Apache Yazılım Vakfı’nın kurumsal web uygulamalarına yönelik ürünüdür,

Temel konfigürasyon dosyası struts-config.xml’dir,

HTML formlarını temsil eden ActionForm , formdan post veya get ile gelen datayı almak ve işlemler yapmak için Action ve işlemler sonunda yönlendirme yapmak için ActionMappings olarak üç temel sınıfı bulunur,

Çoklu dil desteği için ApplicationResources.properties dosyaları kullanılır,

Türkçe lokalizasyon için ApplicationResources_tr.properties , İngilizce için ApplicationResources_en.properties gibi...

Struts’a özgü struts-bean , struts-html , struts-logic taglarına sahiptir.

Page 12: Java EE Struts

STRUTS FRAMEWORK

WEB-INF dizini içerisinde bulunan web.xml ’de aşağıdaki şekilde Struts ActionServlet ve konfigürasyon dosyasının konumu tanımlanır:

<servlet> <servlet-name>ActionServlet</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup></servlet>

<servlet-mapping> <servlet-name>ActionServlet</servlet-name> <url-pattern>*.do</url-pattern></servlet-mapping>

KURULUM – Servlet tanımlama

Page 13: Java EE Struts

STRUTS FRAMEWORK

WEB-INF/lib dizini içerisine Struts sınıflarını bulunduran kütüphaneler ve Apache Commons projesinin gerekli kütüphaleneleri atılır Deneme projemizde kullandığımız struts versiyonu için ihtiyaç duyulan jar’lar aşağıdakilerdir:

struts-core-1.3.8.jarstruts-extras-1.3.8.jarstruts-taglib-1.3.8.jarcommons-beanutils.jarcommons-chain-1.1.jarcommons-digester-1.8.jarcommons-logging.jar

KURULUM – Kütüphaleleri yükleme

Page 14: Java EE Struts

STRUTS FRAMEWORK

HTML forma karşılık gelen ActionForm sınıfı örneği:

import org.apache.struts.action.ActionForm; public class KullaniciForm extends ActionForm {

private String isim; private String soyIsim; private String eposta; private String parola;

getters and setters }

KURULUM – ActionForm sınıfı

Page 15: Java EE Struts

STRUTS FRAMEWORK

Formumuzun struts-config.xml’de tanımlanması:

<form-beans><form-bean name="kullaniciFrom" type="org.gp.form.KullaniciForm">

<form-property name="isim" type="java.lang.String"></form-property><form-property name="soyIsim" type="java.lang.String"></form-property><form-property name="eposta" type="java.lang.String"></form-property><form-property name="parola" type="java.lang.String"></form-property>

</form-bean></form-beans>

KURULUM – ActionForm tanımlama

Page 16: Java EE Struts

STRUTS FRAMEWORK

Struts’ın ActionForm ile göndereceği verileri alacak Action sınıfımız aşağıdaki şekilde.

import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;

import org.gp.form.KullaniciForm;

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

public class KullaniciAction extends Action {

public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception{

KullaniciForm kullaniciForm = (KullaniciForm)form;String isim = kullaniciForm.getIsim();String soyIsim = kullaniciForm.getSoyIsim();String eposta = kullaniciForm.getEposta();String parola = kullaniciForm.getParola();

return mapping.findForward("success");}

}

KURULUM – Action sınıfı

Page 17: Java EE Struts

STRUTS FRAMEWORK

Action’ın struts-config.xml’de tanımlanması:

<action-mappings> <action path="/kullaniciAction"

name="kullaniciFrom" type="org.gp.action.KullaniciAction">

<forward name="success" path="/index.jsp"/> </action></action-mappings>

KURULUM – Action tanımlama

Page 18: Java EE Struts

HIBERNATE

Page 19: Java EE Struts

HIBERNATE

ORM (Object Relational Mapping) aracıdır, ilişkisel veritabanlarını objeler olarak tanımlar,Veritabanını nesnesel olarak modelleyen bir teknolojidir,JDBC ile iletişim kurulabilen neredeyse tüm veritabanlarını destekler,Kendine özgü HQL (Hibernate Query Language) dili ile SQL’den çok daha verimli veritabanı sorguları üretir,Temel konfigürasyon dosyası hibernate.cfg.xml ’dir,Her bir POJO nesnesi için bir config dosyası üretilmelidir. Örnek : Kullanici.hbm.xml

Page 20: Java EE Struts

HIBERNATE

<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/gp</property> <property name="connection.username">gp</property> <property name="connection.password">1</property>

<!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property>

<!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property>

<!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property>

<mapping resource="org/gp/model/Kullanici.hbm.xml"/>

</session-factory>

</hibernate-configuration>

KURULUM – hibernate.cfg.xml

Page 21: Java EE Struts

HIBERNATE

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping> <class name="org.gp.model.Kullanici" table="kullanici"> <id name="id" column="id"> <generator class="identity"/> </id>

<property name="isim" column="isim" length="255" type="string"/><property name="soyIsim" column="soyisim" length="255" type="string"/><property name="eposta" column="eposta" length="255" type="string"/><property name="parola" column="parola" length="255" type="string"/>

</class></hibernate-mapping>

KURULUM – Kullanici.hbm.xml

Page 22: Java EE Struts

AJAXANYWHERE

Page 23: Java EE Struts

AJAXANYWHERE

Ajaxanywhere, J2EE dünyasında Ajax kullanımını kolaylaştırmıştır,

Kendine özgü tag kütüphanesiyle istenen bölgeye (zone) ajax çağrıları yapılmasını sağlamaktadır,

Page 24: Java EE Struts

AJAXANYWHERE

web.xml içerisinde aşağıdaki şekilde filter tanımlanır,

<filter> <filter-name>AjaxAnywhere</filter-name> <filter-class>org.ajaxanywhere.AAFilter</filter-class> </filter>

<filter-mapping> <filter-name>AjaxAnywhere</filter-name> <url-pattern>/*</url-pattern></filter-mapping>

KURULUM – AjaxAnywhere Filter

Page 25: Java EE Struts

AJAXANYWHERE

Örneğimizdeki versiyon için WEB-INF/lib içerisine ajaxanywhere-1.2.1.jar eklenir,

AjaxAnywhere’in istemci taraflı çağrıları için gereken aa.js JSP sayfalarına aşağıdaki şekilde eklenir:

<script language=“javascript” type=“text/javascript” src=“aa.js”>

AjaxAnywhere’in tag tanımlaması olan ajaxanywhere.tld kurulum dizinine eklenir ve JSP sayfalarında aşağıdaki şekilde tanımlanır:

<%@ taglib uri=“/WEB-INF/tld/ajaxanywhere.tld” prefix=“ajax”%>

KURULUM – AjaxAnywhere Kütüphanesi ve aa.js

Page 26: Java EE Struts

AJAXANYWHERE

Ajax çağrısı sonunda yenilenecek alan <ajax:zone> içerisine alınır:

<ajax:zone name=“HelloZone”> <div> Yenilenecek kısım </div></ajax:zone>

JavaScript eventi tetiklendiğinde AjaxAnywhere’in çalışması için JSP’de script tanımlanır:

<script> function ajaxGonder() { ajaxAnywhere.submitAJAX(); return false; }</script>

KULLANIM

Page 27: Java EE Struts

AJAXANYWHERE

Import :

import org.ajaxanywhere.AAUtils;

Struts Action tarafında bu zone’un refresh edilmesi için gerekli kod:

AAUtils.addZonesToRefresh(request, "HelloZone");

KULLANIM

Page 28: Java EE Struts

DISPLAYTAG

Page 29: Java EE Struts

DISPLAYTAG

Verileri biçimli tablolar olarak gösterir,

İlave efor sarfetmeksizin request’e gönderilen obje listesini (örneğin ArrayList) sıralayabilir, sayfalayabilir, çeşitli formatlarda export edebilir.

Page 30: Java EE Struts

DISPLAYTAG

Page 31: Java EE Struts

DISPLAYTAG

Örnek projemizdeki versiyon için displaytag-1.1.jar ’ı WEB-INF/lib dizinine atıyoruz, (şu an 1.1.1 versiyonu mevcuttur)

Tag tanımlama dosyası olan displaytag.tld ’yi tld dizinine ve özellik dosyası olan displaytag.properties dosyasını resource’ların arasına ekliyoruz.

Displaytag’ın tabloları biçimlendirmesi için hazır olarak gelen css’leri kullanmak istersek bize sunduğu alternatiflerden yararlanabiliriz.

KURULUM – Displaytag

Page 32: Java EE Struts

DISPLAYTAG

Tag kütüphanesini JSP’den çağırmak:

<%@ taglib uri="/WEB-INF/tld/displaytag.tld" prefix="display"%>

Displaytag css’ini kullanmak:<style type="text/css" media="all"> @import url("displaytag.css");</style>

Ve nihayet Displaytag tablolarını gösterme:

<display:table name="kullanciList" id="kullanici"> <display:column property="isim"/> <display:column property="soyIsim"/> <display:column property="eposta"/> <display:column property="parola"/>

</display:table>

KULLANIM – Displaytag

Page 33: Java EE Struts

KAYNAKÇA

http://struts.apache.orghttp://www.hibernate.orghttp://displaytag.sourceforge.net/http://ajaxanywhere.sourceforge.net GoogleBEASunOracleIBMhttp://www.bilgidata.com

Page 34: Java EE Struts

SORU – CEVAP BÖLÜMÜ

Page 35: Java EE Struts

Teşekkürler

Muharrem TAÇMartı Bilişim

[email protected]