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.JSF 2.0 Tomcat Maven

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.

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.

End of Line