Your SlideShare is downloading. ×
Özcan Acar  Ankara Cankaya Universitesi Wicket Webframework Sunumu
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Özcan Acar Ankara Cankaya Universitesi Wicket Webframework Sunumu

1,343
views

Published on

3 ocak 2009 tarihinde Ankara Çankaya üniversitesinde CETURK tarafından düzenlenen Java teknolojileri seminerine konuşmacı olarak katıldım ve Apache Wicket framework hakkında bir sunum yaptım. Sunum …

3 ocak 2009 tarihinde Ankara Çankaya üniversitesinde CETURK tarafından düzenlenen Java teknolojileri seminerine konuşmacı olarak katıldım ve Apache Wicket framework hakkında bir sunum yaptım. Sunum dosyalarını aşağıdaki linkler üzerinden edinebilirsiniz.

Detayli bilgi:

http://www.kurumsaljava.com/2009/01/12/ozcan-acar-wicket-sunumu/


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,343
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
40
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Kurumsal Java.com Özcan Acar © 2009
  • 2. Web Framework Gökyüzünde Yeni bir Yıldız! Özcan Acar acar@unitedinter.net http://www.ozcanacar.com http://www.kurumsaljava.com Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 3. Wicket‘in Varoluş Nedeni Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 4. Özcan Acar Hakkında public class OezcanAcar { public static void main(String[] args) { Acar oezcan = new Acar(); oezcan.setBirthday(quot;18.07.1974quot;); oezcan.setBirthplace(quot;Izmirquot;); oezcan.setJob(quot;Bilgisayar Mühendisiquot;); oezcan.setPassion(quot;J2EEquot;); } } Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 5. Özcan Acar Hakkında Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 6. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 7. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 8. Sunumun İçeriği API anlatmaya gelmedim! Wicket‘i anlamak için web programcılığında gerekli soyut konseptler üzerine yoğunlaşacağız. Bir tezim var: 2 boyutlu web programcılığı yapıyoruz. Neden? Java ile web programcılığının tarihçesi Wicket tanıtımı Wicket ile Web Komponentleri Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 9. Giriş Kimler daha önce Java teknolojilerini kullanarak web programcılığı yaptı? Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 10. Web Programcılığı Web programcılıgı klasik maasaüstü programcılığından farklıdır. Yazılan kod dinamik olarak web tarayıcısı için gerekli HTML kodunu oluşturur. Web aplikasyonu için yazılan kodun aynı anda birden fazla kullanıcıyı desteklemesi lazım (Multithreading). Web aplikasyonun değişik türdeki bilgisayar, işletim sistemi ve web tarayıcısını desteklemesi gerekir. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 11. Web Aplikasyonu HTTP Request HTML Sayfaları (JSP) HTTP Response Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 12. Java Web Aplikasyonu HTML Sayfaları Java Nesneleri (JSP) Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 13. Tez: 2 boyutlu web yazılımı yapıyoruz! 3. boyut neresi? 2 boyutlu 3 boyutlu web programcılığı web programcılığı Controller, Gerçek Java Model, View, Komponentleri JSTL Komponent Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 14. Beklentilerimiz Web programcılığı da olsa nesneye yönelik programcılığı uygulamak istiyoruz. Sadece Java dilinde yazılım yapmak istiyoruz. JSTL ya da EL gibi web‘e özel bir yazılım tekniğini öğrenmek zorunda kalmak istemiyoruz. Yazılımcı olarak amacımız bakımı kolay ve her yeni müşteri gereksinimi ile kolayca genişletilebilir yazılım sistemleri geliştirmektir. Kullandığımız araçlar bunu desteklemeli. Kodun tekrar kullanılabilmesi (reuse) önemlidir. Web programcılığında, tekrar kullanılabilen Java komponentleri oluşturmak zor bir iş haline gelmemeli. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 15. Time To Change Java ile web programcılığı hakkında bildiklerinizi unutun! Wicket ile web programcılığına 3. boyut geliyor! Wicket web komponentleri Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 16. Konsept İdeal bir web projesi mimarisi nasıl olmalı? MVC Design Pattern Komponent nedir? Web komponent nedir? Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 17. İdeal Bir Web Proje Mimarisi Üç Katmanlı Mimari Presentation Business Persistence JSP Interface DAO Servlet Struts DB JSF InterfaceImpl DAOImpl Wicket Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 18. MVC Design Pattern Gelen İsteği request yönlendirme Front Controller Controller Model Gönderilen response Model Model nesnesini oluşturma HTML çıktısı View Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 19. Komponent Tekrar kullanılabilir kod birimi. İç dünyasını gizler. Tanımlanmış interface Komponent sınıflar üzerinden kullanılır. Örneğin Facade. Jar dosyasında dağıtılabilir. Kullanıldığı ortama göre konfigüre edilebilir. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 20. Web Komponent Web Aplikasyon Bir web aplikasyonda konfigürasyon yapılarak kullanılan modül. Login Register Diğer komponent özelliklerine sahiptir. Jar dosyası olarak Friends Chat aplikasyona dahil edilebilir. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 21. Java İle Web Programcılığın Tarihçesi Servlets JSP JSTL MVC Web Frameworks (Struts, Spring MVC) User Interface Component Model Frameworks (JSF) Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 22. Servlets Web programcılığı yapılabilen ilk Java teknolojisi. Sun tarafından tanımlanmış bir standart (API). İhtiva ettiği interface‘ler Tomcat gibi bir application server tarafından implemente edilir. Servlet web tarayıcısı üzerinden gelen kullanıcı istediğini cevaplayıp, HTML sayfası oluşturan bir Java nesnedir. Aplikasyon serveri (Tomcat, Resin) bünyesinde çalışır. Aplikasyon server HTTP protokolü ile Servlet sınıfı arasındaki köprüdür. ja v a x.se r v l e t .h t t p .Ht t p Se r v le t sın ıfın ı g e n işl e t e n he r sın ıf Se r v le t h a l in e g e l ir . Se r v le t w e b a p lik a sy o n la r ı UR L t a ba n lıd ır ( h t t p :/ / d o m a in .c o m / se r v le t / So m e Se r v l e t ) . w e b.xm l k o n f ig ü r a sy o n d o sy a sın d a h a n g i UR L d e n h a n g i Se r v l e t sın ıfın ın so r u m l u o ld u ğu t a n ım l a n ır . Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 23. Servlet Multithreading public class HelloWorldServlet extends HttpServlet { private int counter = 0; public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { counter ++; response.setContentType(quot;text/htmlquot;); ServletOutputStream output = response.getOutputStream(); output.print(quot;<h1>Sayac: quot; + counter +quot;</h1>quot;); } } Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 24. Servlet Teknolojisinin Dezavantajları HTML kodu Servlet sınıfında oluşturulduğundan, Servlet sınıflarının bakımı ve geliştirilmesi zordur! Geniş kapsamlı Servlet aplikasyonları çok kompleks bir yapıya dönüşebilir. Programcıların, aplikasyonun her bölümünü aynı seviyede anlamaları zorlaşabilir. Her yeni müşteri gereksiniminin getirdiği değişiklikler, bakım ve geliştirme sürecini zora sokabilir. HTML kodu programcılar tarafından geliştirilmek zorundadır. Web design yapan ekibin Java bilgisi olmadan Servlet sınıfları üzerinde modifikasyon yapmaları mümkün değildir. Servlet aplikasyonlarında HTML kodu da üretildiği için kodun bol olduğu sınıflar oluşur. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 25. JSP – Java Server Pages Servletler tarafından template olarak kullanılmak üzere geliştirilmiş web teknolojisi. Bir standart. Application server JSP sayfalarını compile esnasında Servlet sınıflarına dönüştürür. 1. Request 2. Veriyi ekler Servlet 3. Yönlendirir HttpServletRequest 5. Response 4. Veriyi okur (JSP) Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 26. JSP – Java Server Pages <html> <body> <% for(int i=0; i<5; i++) { out.print(“<h1>Merhaba Dünya</h2>); } %> </body> </html> Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 27. JSP Teknolojisinin Dezavantajları JSP Servlet teknolojisi ile beraber kullanıldığında JSP ve Servlet arasında nesnesel bir ilişki yoktur. Oluşturulan HTML kodunda yer alan linkler üzerinden ihtiyaç duyulan Servlet sınıfları adreslenir. Servlet bir JSP nesne referansına erişemediği için HttpServletRequest üzerinden JSP için gerekli verileri oluşturur. Kompleks JSP sayfalarında Java kodunun kullanılması, JSP sayfalarının bakımını güçleştirir. JSP sayfalarnda değişiklik yapmak isteyen web design ekibinin Java biliyor olması gerekir. Web designcıların yaptıkları en ufak bir değişiklik bile web aplikasyonu çalışmaz hale getirebilir. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 28. JSP Teknolojisinin Dezavantajları Java kodu kullanılan JSP sayfalarının HTML editörlerinde gösterim problemi oluşmaktadır. JSP sayfalarında Java kodunu kullanılması hata tespit ve debugging işlemlerini zorlaştırmaktadır. Test güdümlü (Test Driven Development) JSP yazılımı bir application server (Tomcat) kullanmadan mümkün değildir (HttpUnit). Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 29. JSTL – Java Standard Tag Library Yeni bir web komponent modelini ihtiva eder. JSP sayfasında Java kodu yerine, tag olarak bilinen ve server tarafında bir Java sınıfında yer alan koda denk gelen birimler kullanılır. Tagler komponenttir. Web design ekibi Java ögrenmek zorunda kalmadan JSP sayfaları oluşturabilir. Tagler XML syntax benzeri bir notasyon ile kullanırlar. Verilere ulaşmak için EL (Expression Language) kullanılabilir. <c:out value=quot;${username}quot;/> Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 30. JSTL – Java Standard Tag Library <%@ taglib prefix=quot;cquot; uri=quot;http://java.sun.com/jstl/corequot; %> <p><h1>Müsteri Isimleri</h1></p> <c:forEach items=quot;${addresses}quot; var=quot;addressquot;> <c:choose> <c:when test=quot;${not empty address.lastName}quot; > <c:out value=quot;${address.lastName}quot;/><br/> </c:when> <c:otherwise> N/A<br/> </c:otherwise> </c:choose> Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 31. JSTL – Java Standard Tag Library JSTL kullanılmış olsa bile JSP teknolojisi ile geniş kapsamlı web programları oluşturmak kolay değildir. JSP sayfalarında HTML gösterimi yanı sıra navigasyon ve verilerin validasyonu (validation) gibi kompleks işlemlerin yapılması gerekmektedir. Bu işlemlerin JSP sayfalarında yapılması, JSP sayfalarının bakımını ve geliştirilmesini zora sokmaktadır. Navigasyon ve validasyon gibi işlemlerin JSP sayfalarının dışında, başka bir mekanizma kullanılarak yapılması gerekmektedir. Bu ihtiyacı karşılamak amacıyla Struts, Spring MVC ve WebWork gibi web frameworkler doğmuştur. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 32. MVC Frameworks Gelen İsteği request yönlendirme Front Controller Controller Model Gönderilen response Model Model nesnesini oluşturma HTML çıktısı View Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 33. MVC Frameworks Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 34. User Interface Component Model Frameworks JSF (Java Server Faces), Tapestry gibi web frameworkleri komponent modeline sahiptir. HTML arayüzü oluşturmak için Java komponentleri kullanılır. Komponentleri HTML sayfalarında kullanabilmek için JSTL, EL tarzı programlama teknikleri kullanılır. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 35. Tez: İki boyutlu web yazılımı yapıyoruz! 3. boyut neresi? 2 boyutlu 3 boyutlu web programcılığı web programcılığı Controller, Gerçek Java Model, View, Komponentleri JSTL Komponent Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 36. Neden 2. boyutta kalındı? JSP Sayfası Controller Sınıfı <%@ taglib prefix= “c“ public class Controller uri=..../> { } XML Konfigürasyon Model Sınıfı <config> public class Model ... { </config> } Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 37. Neden 2. boyutta kalındı? Mevcut web frameworklerde gerçek anlamda Java komponent oluşturulması ve kullanımı mümkün değil. Bize komponent modeli olarak satılan bir takım JSTL tag kütüphaneleri ve JSF den tanıdığımız user interface komponentleri Tekrar kullanılanabilir web komponentleri oluşturmak mümkün değil. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 38. Kısaca Wicket Açık Kaynaklı (Open Source) web framework Komponent tabanlı (Component Based) HTML Markup kodunu ve Java kodunu ayırır. JSTL ya da EL (Expression Language) gibi bir progragramlama tekniğini gereksiz kılar. Basit Java (POJO – Plain Old Java Object) sınıfları kullanır. Çok az konfigürasyonu gerekli kılar. XML konfigürasyon dosyası yoktur. Java ve HTML‘i bilenler kısa zamanda Wicket‘i ögrenebilir. Spring ile birebir entegre edilebilir. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 39. Kısaca Wicket WicketTester sınıfı ile test güdümlü yazılımı ve akseptans (acceptance – onay/kabul) testlerinin oluşturulmasını destekler. Javascript kodu yazmadan Ajax desteği sağlar. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 40. Wicket Konseptleri Application Page Komponentler Modeller Paneller Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 41. Application Web aplikasyonun başlangıç noktasıdır (Main Entry Point). Giriş sayfasını (Home Page) tanımlar. Spring ile entegrasyonun gerçekleştiği (SpringComponentInjector) yerdir. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 42. Application web.xml konfigürasyonu <filter> <filter-name>wicket</servlet-name> <filter-class> org.apache.wicket.protocol.http.WicketFilter </filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value> com.company.MyApplication </param-value> </init-param> <load-on-startup>1</load-on-startup> </filter> Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 43. Wicket Konseptleri Application Page Komponentler Modeller Paneller Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 44. Page Application HomePage LoginPage RegisterPage BlogPage public abstract class HomePage extends WebPage { public SmartWicketPage() { super(); buildGui(); } public abstract void buildGui(); } Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 45. Wicket Konseptleri Application Page Komponentler Modeller Paneller Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 46. Komponentler Label Image Palette MultiLineLabel Link CheckGroup Button Tree DropDownChoise SubmitLink Panel RadioGroup TextField Loop Select CheckBox Border ImageMap TextArea Fragment ListChoise PageLink RadioChoise ExternalLink Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 47. Komponentler ve Markup HTML sayfalarında Wicket komponentleri wicket:id ile kullanılır. HTML <h1 wicket:id= msg > Komponent tarafından değiştirilir </h1> Java Kodu new Label( msg , “Hello, World!”); Ekran Çıktısı <h1>Hello, World!</h1> Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 48. Komponentler ve Markup Page ve Panel gibi komponentlerin kendi HTML dosyaları vardır. Komponentler ve sahip oldukları HTML sayfaları aynı Java package içinde yer alır. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 49. Merhaba Dünya Örneği Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 50. Wicket Konseptleri Application Page Komponentler Modeller Paneller Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 51. Modeller Wicket komponentleri ile veri taşıyıcı Java sınıfları bir araya getirmek için kullanılırlar. Person Label(“name“,model) (POJO) + name:String PropertyModel new TextField(“namequot;, new PropertyModel(getPerson(), “namequot;)); Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 52. Wicket Konseptleri Application Page Komponentler Modeller Paneller Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 53. Paneller Birden fazla wicket komponentini gruplamak için kullanılır. Kendi HTML dosyası vardır. Paneller kullanılarak tekrar kullanılabilir web komponentleri oluşturulabilir. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 54. Login Web Komponenti Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 55. Login Web Komponenti LoginPage.java LoginPage.html LoginPanel.java LoginPanel.html LoginForm TextField PropertyModel Account Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 56. Login Web Komponenti LoginPage.java import org.apache.wicket.markup.html.WebPage; import smart.web.login.presentation.panel.LoginPanel; public class LoginPage extends WebPage { public LoginPage() { super(); add(new LoginPanel(quot;loginpanelquot;)); } } Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 57. Login Web Komponenti LoginPage.html <html> <head/> <body> <div wicket:id=quot;loginpanelquot;/> </body> </html> Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 58. Login Web Komponenti LoginPanel.java import org.apache.wicket.markup.html.panel.Panel; import smart.web.login.presentation.form.LoginForm; public class LoginPanel extends Panel { public LoginPanel(final String arg0) { super(arg0); add(new LoginForm(quot;loginformquot;)); } } Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 59. Login Web Komponenti LoginPanel.html <wicket:panel> <form wicket:id=quot;loginformquot;> <table width=quot;100%quot; cellspacing=quot;1quot;> <tr> <td width=quot;100%quot; class=quot;text11quot; colspan=quot;3quot;> <div wicket:id=quot;feedbackquot;></div></td> </tr> <tr> <td width=quot;13%quot; > <wicket:messagekey=quot;login.emailquot;>Email</wicket:message>: </td> <td width=quot;82%quot;> <span wicket:id=quot;email.borderquot;> <input size=quot;20quot; maxlength=quot;50„ wicket:id=quot;emailquot; class=quot;inputfieldquot; /> </span> </td> .......... </wicket:panel> Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 60. Login Web Komponenti public class LoginForm extends Form LoginForm.java { public LoginForm(final String pId) { super(pId); add(new TextField(quot;emailquot;, new PropertyModel(getAccount(), quot;emailquot;)). setRequired(true)); add(new PasswordTextField(quot;passwordquot;, new PropertyModel(getAccount(), quot;passwordquot;)). setRequired(true)); } protected final void onSubmit() { LoginResult result = manager.login(getAccount().getEmail(), getAccount().getPassword()); // LOGIN OK if(result.getStatus() == LoginManagerStatusCodes.LOGIN_OK.getValue()) ....... } Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 61. Login Web Komponenti Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 62. Web Komponent Web Aplikasyon Bir web aplikasyonda konfigürasyon yapılarak kullanılan modül. Login Register Diğer komponent özelliklerine sahiptir. Jar dosyası olarak Friends Chat aplikasyona dahil edilebilir. Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 63. Web Komponent Login komponentini bir Jar dosyası haline getirerek, istediğimiz bir projede kullanabiliriz. Login Java add(new LoginPanel(quot;loginpanelquot;)); HTML <div wicket:id=quot;loginpanelquot;/> Kurumsal Java.com Kurumsal Java.com Özcan Acar © 2009 © 2009
  • 64. SON İlginiz için teşekkür ederim. Kurumsal Java.com Özcan Acar © 2009