4. J2EE MİMARİSİ NEDİR ? J2EE J ava 2 E nterprise E dition’ı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)
6. J2EE WEB UYGULAMALARI NASIL ÇALIŞIR ? Bir uygulama sunucusu ya da servlet container olmalıdır Örnekler Open Source : Tomcat, Jetty, Jboss, Glassfish, Geronimo Ticari : 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,
8. MVC NEDİR NE İŞE YARAR ? Bir tasarım kalıbıdır (design pattern), M VC M odel V iew C ontroller’ın kısaltmasıdır, M odel : Kuralların tanımlandığı, hesaplamaların, veritabanı objelerinin bulunduğu katman. Örneğin Kullanici isimli objemiz. V iew : Verilerin görüntülenmesi ile ilgili işlemleri gerçekleştiren katmandır, JSP, JSTL, Displaytag gibi... C ontroller : Veri akışının nereden nereye gideceğini belirleyen katmandır. Struts için ActionServlet , struts-config.xml
11. 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.
12. 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
13. 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.jar struts-extras-1.3.8.jar struts-taglib-1.3.8.jar commons-beanutils.jar commons-chain-1.1.jar commons-digester-1.8.jar commons-logging.jar KURULUM – Kütüphaleleri yükleme
14. 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ı
19. 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
20. 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
23. 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,
24. 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
25. 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
26. 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
27. AJAXANYWHERE Import : import org.ajaxanywhere.AAUtils; Struts Action tarafında bu zone’un refresh edilmesi için gerekli kod: AAUtils.addZonesToRefresh ( request, "HelloZone") ; KULLANIM
31. 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