JSF ile Tomcat Üzerinde ‘Hello World!’
JSF örÄŸenmeye yeni ÅŸirkete geçememle baÅŸladım. ÖrÄŸenme dediysem biri karşısına alıp oturup anlatmadı. Åžirkette temel olarak neler yaptıklarını neler kullandıklarını anlattılar, bense içerinde eksik olduÄŸum kısımları seçip kendimi geliÅŸtirmeÄŸe baÅŸladım. Tabi kide daha önceleri JSF nedir ne deÄŸildir diye bakmıştım. Sonuçta önceki ÅŸirketim genel olarak Wicket kullansa da diÄŸer altarnatiflerin neler olduÄŸunu görmek istiyor insan. Gel gelelim yeni ÅŸirketimde JSF tek başına kullanılmıyor. Seam çatı yapısı ile birlikte kullanılıyor. Fakat ben JSF’i tam olarak bilmediÄŸimden ne Seam ile geliyor ne JSF tarafından saÄŸlanıyor tam emin olamadım. Tamam belli baÅŸlı ÅŸeylerde sorun yok ama iÅŸ ayrıntıları girince karıştırılan noktalar olabiliyor. Conversation Scope‘un yönetimi gibi ÅŸeyler. Üstelik seam bir yandan da RichFaces kullanıyor.
Neyse bu yazımda JSF örÄŸenmeye hevesli insanlara JSF’ uygulamalarını Tomcat üzerinde nasıl çalıştırabileceklerini anlatacağım. Bunu öncelikle Maven kullanarak nasıl yapabileceklerini anlatacağım. Daha sonra ise Maven kullanmadan sadece Eclipse ortamı kullanılarak JSF uygulamalarının nasıl geliÅŸtirilebileceÄŸinden bahsedeceÄŸim.
Temel olarak basit bir ‘HelloWorld’ uygulaması yapacağız. JSF genel anlamda bir JEE uygulması olduÄŸundan, normal ÅŸartlarda bir “Enterprise Application Server” (Apache Geronimo, JBoss AS vs…) üzerinde çalıştırılacak ÅŸekilde ayarlanmıştır. Biz bunu bir “Servlet Container” üzerinde çalıştıracağımızdan ek kütüphanalere ihtiyacımız olacaktır. Eclipse ve Maven için bağımlılıklar aÅŸağıdadır. Her bölümde bağımlılıklara ayrıca yine deÄŸinilecektir.
- el-impl-2.2.jar: EL (Expression Language) genel olarak size ${user.name} ya da #{user.name} gibi ifadeler kullanmanıza olanak saÄŸlayan kütüphanedir. Tomcat bunu desteklemekte (lib altına bakarsanız el.jar göreceksiniz) fakat bu kütüphanenin uygulamasını size bırakmaktadır. Download…
- javax.servlet.jsp.jstl-api-1.2.1.jar ve javax.servlet.jsp.jstl-1.2.1.jar: Bu iki kütüphane normalde Enterprise Application Server içerisinde bulunur. Fakat ne yazık ki tomcat içerisinde bulunmuyor. Hep arayüzüne hem uygulamasına ihtiyacınız olacak. Download…
- JSF API 2.0: Kendi seçeceÄŸiniz bir JSF API kullanabilirsiniz. Ben sun tarafından geliÅŸtirilmiÅŸ olanı tercih edeceÄŸim. Fakat siz isterseniz Apache MyFaces ya da baÅŸka bir jsf uygulmasınıda tercih edebilirsiniz. Download…
Maven Kullanarak
İlk önce maven kullanarak bir JSF 2.0 uygulamasını tomcat üzerine nasıl yükleyeceÄŸimize bakalım. Basit olan maven kullanmak olduÄŸundan önce maven üzerinden anlatıyorum. Öncelikle aÅŸağıdaki özellikleride kullanarak maven-archetype-webapp archetype’ından projemizi yaratalım.
- Group Id: com.bahadirakin
- Artifact Id: JSFMaven
- Package: com.bahadirakin.web
Şimdi ise bağımlılıklarımızı halledelim. Bağımlılıklarımız için aşağıdaki pom.xml dosyasını kullanıyoruz.
pom.xml
<dependencies> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>el-impl</artifactId> <version>2.2</version> <exclusions> <exclusion> <artifactId>el-api</artifactId> <groupId>javax.el</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2-rev-1</version> <exclusions> <exclusion> <artifactId>servlet-api</artifactId> <groupId>javax.servlet</groupId> </exclusion> <exclusion> <artifactId>jsp-api</artifactId> <groupId>javax.servlet.jsp</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.faces</artifactId> <version>2.1.10</version> </dependency> </dependencies>
Burada dikkat etmeniz gereken biri iki kısım var. Öncelikle şunu aklınızdan çıkarmayın biz Tomcat 7 kullanacağız. Bundan dolayı kütüphanelerin bazıları bize tomcat tarafından sunuluyor. Örneğin el-api gibi jsp gibi ya da servlet gibi. Eğer bunlarıda paketinize koymaya çalışırsanız tomcat sapıtacaktır. Sınıflarını nereden yükleyeceğini bilemeyecektir. Bundan dolayı bu tip sınıfları bağımlılıklarımızdan dışarıda bırakıyor.
Eğer başka bir projede bu başınıza gelirse, tomcat kütüphanesini ve kendi bağımlılık haritanızı (DependencyHierarchy) yan yana alın ve fazla olanları bağımlılık haritanızdan çıkartın (exclution).
Åžimdi ise sırada tomcat’a JSF kütüphanelerini hangi servlet içerisinden çalıştırması gerektiÄŸini söylemeliyiz. Bunu yapmak için web.xml dosyamızı aÅŸağıdaki gibi güncelliyoruz.
web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="JSFMaven" version="2.5"> <display-name>JavaServerFaces</display-name> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <welcome-file-list> <welcome-file>faces/welcome.xhtml</welcome-file> </welcome-file-list> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.faces</url-pattern> </servlet-mapping> </web-app>
Şimdi ise sıra bir welcome.xhtml dosyası yaratmaya geldi. Bunun için webapp klasörüne sağ tıklayıp yeni bir HTML dosyası oluşturuyoruz, yanlız HTML dosyasını oluştururken XHTML kalıbı kullandığınızdan emin olunuz.
welcome.xhtml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Welcome Page</title> </head> <body> <h2>Welcome Page</h2> <h3>Hello World!</h3> </body> </html>
Burdan sonra projenizi çalıştırdığınızda, karşınıza “Hello World!” yazısını göreceksiniz. Projenizi çalıştırmak için aÅŸağıdaki linklerden faydalanabilirsiniz.
- http://localhost:8080/JSFMaven/
- http://localhost:8080/JSFMaven/welcome.jsf
- http://localhost:8080/JSFMAven/welcome.faces
- http://localhost:8080/JSFMAven/faces/welcome.xhtml
Eclipse Kullanarak
Eclipse kullanarak yine benzer bir proje yaratalım fakat bu sefer adı, JSFEclipse olsun. Yaratmak için yeni Dynamic Web Project yaratmaya başlayın. Yalnız doğruca standart bir ayarlama değilde JSF ayarlaması kullanacağız. Bunun için yaratma ekranından Modify butonuna tıklıyoruz.
Açılan yeni ekranda, Dynamic Web Module versiyonumuzu 2.5 a çekip, JavaServer Faces seçeneğini işaretleyip versiyon olarakta 2.0 seçiyoruz.
Eğer isterseniz bu ayarları daha sonra Proje menüsünden, Properties-> Project Facets alanından da yapabilirsiniz.
Daha sonra bu ekranı onaylayıp kapatıığınızda, ve next->next dediğinizde size kütüphane yolu soracaktır. Burada eclipse sizin için otomatik olarak JSF 2.0 kütüphanelerini indirebilir. Bunun için açılan ekranda disket şeklindeki yere tıklıyoruz. Aynı zamanda kendi web.xml dosyamız ve ayarlarımız olduğundan bizim için ayarları üretmemesini istiyoruz. Bundan dolayı ilgili kutucuğun seçiminide kaldırıyoruz.
Daha sonra diskete benzer butona tıkladığınızda. Önünüze gelen pencere size hangi JSF uygulamasını indirmek istediğinizi soracaktır. Biz önceki örnekte neyi kullandıysak burada da onu seçiyoruz. Fakat bu kısım zorunlu değildir isterseniz kendi indirdiğiniz kütüphaneleride gösterebilirsiniz.
Burdan sonra JSF bağımlılıklarınız inmiÅŸ olacaktır. Fakat sizin için sadece bunlar yeterli deÄŸildir. BaÅŸta anlattığımız JSTL ve EL bağımlılıklarında da ayrıca ihtiyacınız olacaktır. Bu dosyalarıda yukarıda verdiÄŸim linklerden indirip WEB-INF/lib klasörüne atmanız yeterli olacaktır. Ayrıca JSF bağımlılığınız ÅŸu anda sadece Eclipse altında gözükmektedir. Tomcat üzerine yüklediÄŸinizde yine hata almanız olasıdır. Bunun için ya yukarıda verdiÄŸim linkten indriÄŸiniz dosyayı ya da Eclipse’in sizin için indirdiÄŸi dosyaları tomcat’e ait lib klasörüne atmanız gerekmektedir.
Burdan sonra yapmanız gereken web.xml dosyasının içeriğini maven kısmında anlattığımız gibi yapmanız ve yine o projeden welcome.xhtml dosyasını projenize kopyalamanızdır. Şimdi ise projenizi tomcat üzerinde çalıştırıp aşağıdaki linkten testlerinizi yapabilirsiniz.
- http://localhost:8080/JSFEclipse/
- http://localhost:8080/JSFEclipse/welcome.jsf
- http://localhost:8080/JSFEclipse/welcome.faces
- http://localhost:8080/JSFEclipse/faces/welcome.xhtml
End of Line