Java EE Struts

2,402
-1

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,402
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
127
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Java EE Struts

  1. 1. J2EE Mimarileri (Struts, Hibernate, Ajax) ile Uygulama Geliştirmek Muharrem TAÇ Martı Bilişim www.martisoft.com
  2. 2. KONU BAŞLIKLARI 1-J2EE mimarisi nedir? 2-MVC tasarım deseni (design patterns) ne işe yarar? 3-Struts Framework 4-Hibernate ORM 5-Ajax anywhere 6-Displaytag
  3. 3. J2EE
  4. 4. J2EE MİMARİSİ NEDİR ? <ul><li>J2EE J ava 2 E nterprise E dition’ın kısaltmasıdır, yeni adı Java EE olarak değişmiştir, </li></ul><ul><li>Bu mimari çok katmanlı kurumsal uygulamalar oluşturmak için API’ler sunar, </li></ul><ul><ul><li>JSP, Servlets, (Web tabanlı sunum katmanı) </li></ul></ul><ul><ul><li>JDBC, (Java veritabanı bağlanırlığı) </li></ul></ul><ul><ul><li>JMS,(Java Mesajlaşma Servisi) </li></ul></ul><ul><ul><li>RMI, (Uzaktan method çağırma) </li></ul></ul><ul><ul><li>JNDI,(Java isimlendirme ve dizinleme servisi) </li></ul></ul><ul><ul><li>Java Mail,(E-posta gönderme ve alma) </li></ul></ul><ul><ul><li>EJB (Enterprise Java Beans) gibi.. </li></ul></ul><ul><li>Çok katmanlı mimaride genelde 3 katman bulunur, </li></ul><ul><ul><li>Sunum katmanı (presentation layer) </li></ul></ul><ul><ul><li>İş katmanı (business layer) </li></ul></ul><ul><ul><li>Uygulama katmanı (application layer) </li></ul></ul>
  5. 5. J2EE MİMARİSİ
  6. 6. J2EE WEB UYGULAMALARI NASIL ÇALIŞIR ? <ul><li>Bir uygulama sunucusu ya da servlet container olmalıdır </li></ul><ul><li>Örnekler </li></ul><ul><li>Open Source : Tomcat, Jetty, Jboss, Glassfish, Geronimo </li></ul><ul><li>Ticari : BEA Weblogic, Oracle Application Server, IBM Websphere, Sun Application Server </li></ul><ul><li>Sunucuya deploy edilmiş web uygulamasında WEB-INF dizini olmalıdır, </li></ul><ul><li>WEB-INF dizini altında web.xml olmalıdır, web uygulamalarının temel konfigürasyon dosyası web.xml’dir, </li></ul><ul><li>Derlenmiş java kodları class uzantıları ile WEB-INF/classes dizinde bulunur, </li></ul><ul><li>Kullanılan teknolojilerin kütüphaneleri .jar dosyaları halinde WEB-INF/lib dizini altında bulunur, </li></ul>
  7. 7. MVC
  8. 8. MVC NEDİR NE İŞE YARAR ? <ul><li>Bir tasarım kalıbıdır (design pattern), </li></ul><ul><li>M VC M odel V iew C ontroller’ın kısaltmasıdır, </li></ul><ul><ul><li>M odel : Kuralların tanımlandığı, hesaplamaların, veritabanı objelerinin bulunduğu katman. Örneğin Kullanici isimli objemiz. </li></ul></ul><ul><ul><li>V iew : Verilerin görüntülenmesi ile ilgili işlemleri gerçekleştiren katmandır, JSP, JSTL, Displaytag gibi... </li></ul></ul><ul><ul><li>C ontroller : Veri akışının nereden nereye gideceğini belirleyen katmandır. Struts için ActionServlet , struts-config.xml </li></ul></ul>
  9. 9. STRUTS MVC Controller View Model
  10. 10. STRUTS
  11. 11. STRUTS FRAMEWORK <ul><li>Struts, en eski ve en popüler J2EE framewoküdür diyebiliriz, </li></ul><ul><li>Apache Yazılım Vakfı’nın kurumsal web uygulamalarına yönelik ürünüdür, </li></ul><ul><li>Temel konfigürasyon dosyası struts-config.xml ’dir, </li></ul><ul><li>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, </li></ul><ul><li>Çoklu dil desteği için ApplicationResources.properties dosyaları kullanılır, </li></ul><ul><ul><li>Türkçe lokalizasyon için ApplicationResources_tr.properties , İngilizce için ApplicationResources_en.properties gibi... </li></ul></ul><ul><li>Struts’a özgü struts-bean , struts-html , struts-logic taglarına sahiptir. </li></ul>
  12. 12. STRUTS FRAMEWORK <ul><li>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: </li></ul><ul><li><servlet> </li></ul><ul><li><servlet-name> ActionServlet </servlet-name> </li></ul><ul><li><servlet-class> org.apache.struts.action.ActionServlet </servlet-class> </li></ul><ul><li><init-param> </li></ul><ul><li><param-name> config </param-name> </li></ul><ul><li><param-value> /WEB-INF/struts-config.xml </param-value> </li></ul><ul><li></init-param> </li></ul><ul><li><load-on-startup> 1 </load-on-startup> </li></ul><ul><li></servlet> </li></ul><ul><li><servlet-mapping> </li></ul><ul><li><servlet-name> ActionServlet </servlet-name> </li></ul><ul><li><url-pattern> *.do </url-pattern> </li></ul><ul><li></servlet-mapping> </li></ul>KURULUM – Servlet tanımlama
  13. 13. STRUTS FRAMEWORK <ul><li>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 </li></ul><ul><li>Deneme projemizde kullandığımız struts versiyonu için ihtiyaç duyulan jar’lar aşağıdakilerdir: </li></ul><ul><ul><li>struts-core-1.3.8.jar </li></ul></ul><ul><ul><li>struts-extras-1.3.8.jar </li></ul></ul><ul><ul><li>struts-taglib-1.3.8.jar </li></ul></ul><ul><ul><li>commons-beanutils.jar </li></ul></ul><ul><ul><li>commons-chain-1.1.jar </li></ul></ul><ul><ul><li>commons-digester-1.8.jar </li></ul></ul><ul><ul><li>commons-logging.jar </li></ul></ul>KURULUM – Kütüphaleleri yükleme
  14. 14. STRUTS FRAMEWORK <ul><li>HTML forma karşılık gelen ActionForm sınıfı örneği: </li></ul><ul><li>import org.apache.struts.action.ActionForm; </li></ul><ul><li>public class KullaniciForm extends ActionForm { </li></ul><ul><ul><li>private String isim ; </li></ul></ul><ul><ul><li>private String soyIsim ; </li></ul></ul><ul><ul><li>private String eposta ; </li></ul></ul><ul><ul><li>private String parola ; </li></ul></ul><ul><ul><li>getters and setters </li></ul></ul><ul><li>} </li></ul>KURULUM – ActionForm sınıfı
  15. 15. STRUTS FRAMEWORK <ul><li>Formumuzun struts-config.xml’de tanımlanması: </li></ul><ul><li><form-beans> </li></ul><ul><ul><li><form-bean name= &quot;kullaniciFrom&quot; type= &quot;org.gp.form.KullaniciForm&quot; > </li></ul></ul><ul><ul><ul><li><form-property name= &quot;isim&quot; type= &quot;java.lang.String&quot; ></form-property> </li></ul></ul></ul><ul><ul><ul><li><form-property name= &quot;soyIsim&quot; type= &quot;java.lang.String&quot; ></form-property> </li></ul></ul></ul><ul><ul><ul><li><form-property name= &quot;eposta&quot; type= &quot;java.lang.String&quot; ></form-property> </li></ul></ul></ul><ul><ul><ul><li><form-property name= &quot;parola&quot; type= &quot;java.lang.String&quot; ></form-property> </li></ul></ul></ul><ul><ul><li></form-bean> </li></ul></ul><ul><li></form-beans> </li></ul>KURULUM – ActionForm tanımlama
  16. 16. STRUTS FRAMEWORK <ul><li>Struts’ın ActionForm ile göndereceği verileri alacak Action sınıfımız aşağıdaki şekilde. </li></ul><ul><li>import org.apache.struts.action.Action; </li></ul><ul><li>import org.apache.struts.action.ActionForm; </li></ul><ul><li>import org.apache.struts.action.ActionForward; </li></ul><ul><li>import org.apache.struts.action.ActionMapping; </li></ul><ul><li>import org.gp.form.KullaniciForm; </li></ul><ul><li>import javax.servlet.http.HttpServletRequest; </li></ul><ul><li>import javax.servlet.http.HttpServletResponse; </li></ul><ul><li>public class KullaniciAction extends Action { </li></ul><ul><ul><li>public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception{ </li></ul></ul><ul><ul><li>KullaniciForm kullaniciForm = (KullaniciForm)form; </li></ul></ul><ul><ul><li>String isim = kullaniciForm.getIsim(); </li></ul></ul><ul><ul><li>String soyIsim = kullaniciForm.getSoyIsim(); </li></ul></ul><ul><ul><li>String eposta = kullaniciForm.getEposta(); </li></ul></ul><ul><ul><li>String parola = kullaniciForm.getParola(); </li></ul></ul><ul><ul><li>return mapping.findForward( &quot;success&quot; ); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>} </li></ul>KURULUM – Action sınıfı
  17. 17. STRUTS FRAMEWORK <ul><li>Action’ın struts-config.xml’de tanımlanması: </li></ul><ul><li><action-mappings> </li></ul><ul><li><action path= &quot;/kullaniciAction&quot; </li></ul><ul><li> name= &quot;kullaniciFrom&quot; </li></ul><ul><li> type= &quot;org.gp.action.KullaniciAction&quot; > </li></ul><ul><li><forward name= &quot;success&quot; path= &quot;/index.jsp&quot; /> </li></ul><ul><li></action> </li></ul><ul><li></action-mappings> </li></ul>KURULUM – Action tanımlama
  18. 18. HIBERNATE
  19. 19. HIBERNATE <ul><li>ORM (Object Relational Mapping) aracıdır, ilişkisel veritabanlarını objeler olarak tanımlar, </li></ul><ul><li>Veritabanını nesnesel olarak modelleyen bir teknolojidir, </li></ul><ul><li>JDBC ile iletişim kurulabilen neredeyse tüm veritabanlarını destekler, </li></ul><ul><li>Kendine özgü HQL (Hibernate Query Language) dili ile SQL’den çok daha verimli veritabanı sorguları üretir, </li></ul><ul><li>Temel konfigürasyon dosyası hibernate.cfg.xml ’dir, </li></ul><ul><li>Her bir POJO nesnesi için bir config dosyası üretilmelidir. </li></ul><ul><li>Örnek : Kullanici.hbm.xml </li></ul>
  20. 20. HIBERNATE <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC &quot;-//Hibernate/Hibernate Configuration DTD 3.0//EN&quot; &quot;http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd&quot;> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name=&quot;connection.driver_class&quot;>com.mysql.jdbc.Driver</property> <property name=&quot;connection.url&quot;>jdbc:mysql://localhost:3306/gp</property> <property name=&quot;connection.username&quot;>gp</property> <property name=&quot;connection.password&quot;>1</property> <!-- JDBC connection pool (use the built-in) --> <property name=&quot;connection.pool_size&quot;>1</property> <!-- SQL dialect --> <property name=&quot;dialect&quot;>org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management --> <property name=&quot;current_session_context_class&quot;>thread</property> <!-- Disable the second-level cache --> <property name=&quot;cache.provider_class&quot;>org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name=&quot;show_sql&quot;>true</property> <!-- Drop and re-create the database schema on startup --> <property name=&quot;hbm2ddl.auto&quot;>update</property> <mapping resource=&quot;org/gp/model/Kullanici.hbm.xml&quot;/> </session-factory> </hibernate-configuration> KURULUM – hibernate.cfg.xml
  21. 21. HIBERNATE <ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> </li></ul><ul><li><!DOCTYPE hibernate-mapping PUBLIC </li></ul><ul><li>&quot;-//Hibernate/Hibernate Mapping DTD 3.0//EN&quot; </li></ul><ul><li>&quot;http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&quot;> </li></ul><ul><li><hibernate-mapping> </li></ul><ul><li><class name=&quot;org.gp.model.Kullanici&quot; table=&quot;kullanici&quot;> </li></ul><ul><li><id name=&quot;id&quot; column=&quot;id&quot;> </li></ul><ul><li><generator class=&quot;identity&quot;/> </li></ul><ul><li></id> </li></ul><ul><ul><li><property name=&quot;isim&quot; column=&quot;isim&quot; length=&quot;255&quot; type=&quot;string&quot;/> </li></ul></ul><ul><ul><li><property name=&quot;soyIsim&quot; column=&quot;soyisim&quot; length=&quot;255&quot; type=&quot;string&quot;/> </li></ul></ul><ul><ul><li><property name=&quot;eposta&quot; column=&quot;eposta&quot; length=&quot;255&quot; type=&quot;string&quot;/> </li></ul></ul><ul><ul><li><property name=&quot;parola&quot; column=&quot;parola&quot; length=&quot;255&quot; type=&quot;string&quot;/> </li></ul></ul><ul><li></class> </li></ul><ul><li></hibernate-mapping> </li></ul>KURULUM – Kullanici.hbm.xml
  22. 22. AJAXANYWHERE
  23. 23. AJAXANYWHERE <ul><li>Ajaxanywhere, J2EE dünyasında Ajax kullanımını kolaylaştırmıştır, </li></ul><ul><li>Kendine özgü tag kütüphanesiyle istenen bölgeye (zone) ajax çağrıları yapılmasını sağlamaktadır, </li></ul>
  24. 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. 25. AJAXANYWHERE <ul><li>Örneğimizdeki versiyon için WEB-INF/lib içerisine </li></ul><ul><li>ajaxanywhere-1.2.1.jar eklenir, </li></ul><ul><li>AjaxAnywhere’in istemci taraflı çağrıları için gereken aa.js JSP sayfalarına aşağıdaki şekilde eklenir: </li></ul><ul><li><script language=“javascript” type=“text/javascript” src=“aa.js”> </li></ul><ul><li>AjaxAnywhere’in tag tanımlaması olan ajaxanywhere.tld kurulum dizinine eklenir ve JSP sayfalarında aşağıdaki şekilde tanımlanır: </li></ul><ul><li><%@ taglib uri=“/WEB-INF/tld/ajaxanywhere.tld” prefix=“ajax”%> </li></ul>KURULUM – AjaxAnywhere Kütüphanesi ve aa.js
  26. 26. AJAXANYWHERE <ul><li>Ajax çağrısı sonunda yenilenecek alan <ajax:zone> içerisine alınır: </li></ul><ul><li><ajax:zone name=“HelloZone”> </li></ul><ul><li><div> </li></ul><ul><li>Yenilenecek kısım </li></ul><ul><li></div> </li></ul><ul><li></ajax:zone> </li></ul><ul><li>JavaScript eventi tetiklendiğinde AjaxAnywhere’in çalışması için JSP’de script tanımlanır: </li></ul><ul><li><script> </li></ul><ul><li>function ajaxGonder() </li></ul><ul><li>{ </li></ul><ul><li>ajaxAnywhere.submitAJAX(); </li></ul><ul><li>return false; </li></ul><ul><li>} </li></ul><ul><li></script> </li></ul>KULLANIM
  27. 27. AJAXANYWHERE <ul><li>Import : </li></ul><ul><li>import org.ajaxanywhere.AAUtils; </li></ul><ul><li>Struts Action tarafında bu zone’un refresh edilmesi için gerekli kod: </li></ul><ul><li>AAUtils.addZonesToRefresh ( request, &quot;HelloZone&quot;) ; </li></ul>KULLANIM
  28. 28. DISPLAYTAG
  29. 29. DISPLAYTAG <ul><li>Verileri biçimli tablolar olarak gösterir, </li></ul><ul><li>İlave efor sarfetmeksizin request’e gönderilen obje listesini (örneğin ArrayList) sıralayabilir, sayfalayabilir, çeşitli formatlarda export edebilir. </li></ul>
  30. 30. DISPLAYTAG
  31. 31. DISPLAYTAG <ul><li>Örnek projemizdeki versiyon için displaytag-1.1.jar ’ı WEB-INF/lib dizinine atıyoruz, (şu an 1.1.1 versiyonu mevcuttur) </li></ul><ul><li>Tag tanımlama dosyası olan displaytag.tld ’yi tld dizinine ve özellik dosyası olan displaytag.properties dosyasını resource’ların arasına ekliyoruz. </li></ul><ul><li>Displaytag’ın tabloları biçimlendirmesi için hazır olarak gelen css’leri kullanmak istersek bize sunduğu alternatiflerden yararlanabiliriz. </li></ul>KURULUM – Displaytag
  32. 32. DISPLAYTAG <ul><li>Tag kütüphanesini JSP’den çağırmak: </li></ul><ul><li><%@ taglib uri=&quot;/WEB-INF/tld/displaytag.tld&quot; prefix=&quot;display&quot;%> </li></ul><ul><li>Displaytag css’ini kullanmak: </li></ul><ul><ul><li><style type=&quot;text/css&quot; media=&quot;all&quot;> </li></ul></ul><ul><ul><li>@import url(&quot;displaytag.css&quot;); </li></ul></ul><ul><ul><li></style> </li></ul></ul><ul><li>Ve nihayet Displaytag tablolarını gösterme: </li></ul><ul><ul><li><display:table name=&quot;kullanciList&quot; id=&quot;kullanici&quot;> </li></ul></ul><ul><ul><ul><ul><li><display:column property=&quot;isim&quot;/> </li></ul></ul></ul></ul><ul><ul><ul><ul><li><display:column property=&quot;soyIsim&quot;/> </li></ul></ul></ul></ul><ul><ul><ul><ul><li><display:column property=&quot;eposta&quot;/> </li></ul></ul></ul></ul><ul><ul><ul><ul><li><display:column property=&quot;parola&quot;/> </li></ul></ul></ul></ul><ul><ul><li></display:table> </li></ul></ul>KULLANIM – Displaytag
  33. 33. KAYNAKÇA http://struts.apache.org http://www.hibernate.org http://displaytag.sourceforge.net/ http://ajaxanywhere.sourceforge.net Google BEA Sun Oracle IBM http://www.bilgidata.com
  34. 34. SORU – CEVAP BÖLÜMÜ
  35. 35. Teşekkürler Muharrem TAÇ Martı Bilişim [email_address]
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×