17 Ağustos 2006

JSTL mi, Struts Tag Library mi?

Bildiğiniz gibi

Struts framework'ünü kullanarak MVC (Model-View-Controller) modeline göre web uygulamarı geliştiribiliyorsunuz. Bu modelin view kısmında yani kullanıcı arayüzü kısmında isteğe (request) veya oturuma (session) gömdüğünüz objelerin alanlarını (field) göstermek için, scriplet kullanmak istemiyorsanız, ya Struts etiket kütüphanesini (tag library) kullanıyorsunuz, ya jstl (java standard tag library) ya da kendi yazdığınız etiket kütüphanesini kullanıyorsunuz. Kendi yazdıklarınızı şu an es geçelim. Ben bu iletide JSTL ve Struts etiket kütüphanesinin arasındaki önemli gördüğüm farklılıkları anlatacağım:

  1. En önemli fark bence isteğe ya da oturuma gömdüğünüz bir objeyi JSTL'in bulamaması durumunda bir hata vermemesi, sayfayı çalıştırmaya devam etmesi, Struts'da ise NullPointerException yada başka hatalar üretip sayfayı çalıştırmaması.Bu durumun hem avantajı hem de dezavantajı var. Eğer objenin değeri gerçekten sizin için önemli değilse çalışmaya devam etmesi gerçekten güzel olur; fakat objenin değeri sizin için önemli ise bir sorun olduğunu düşünüp hatalı kısmı gözden geçirmek istersiniz. Bu farklılık size fayda sağlıyor.Devam etmesini düşündüğünüz yerlerde JSTL kullanıp hatalı yerlerde Struts etiket kütüphanesini kullanabilirsiniz. Aslında Struts etiket kütüphanesinde olan herşey JSTL'de mevcut, sadece html tag library'si hariç.

  2. JSTL yazımı Struts etiket kütüphanesinden daha kolay. Derli toplu bir yapısı var, özellikle expression language kullanarak gayet kısa ve güze kodlar yazabiliyorsunuz.Mesela <c:forEach [attributes]>...</c:forEach> etiketi (tag) ile <logic:iterate [attributes]>...</logic:iterate> etiketi aynı işi yapıyor.Fakat bence core etiket kütüphanesi etiketi olan forEach daha derli toplu ve anlaşılır.

  3. Son olarak da JSTL'in JSR (Java Specification Request) olarak geliştirilmesi, Struts etiket kütüphanesinin de Apache tarafından geliştirilmesidir. JSTL ilk önce çıkmıştır. Bu nedenle ilk göz ağrısı unutulmaz:)

Benim tercihim genelde JSTL olmuştur, bir tek form elemanlarını oluşturmak için Struts'ın html tag libray'sini kullanmak zorundasınız.Çünkü bunun karşılığı JSTL'de yok. Neyseki Java alemindeki çeşitlilikten dolayı istediğimiz tag libray kullanabiliriz...

2 yorum:

Adsız dedi ki...

Struts ile benim en hoşuma giden kullanımı logic:iterate tag ı ile ArrayList in içerisindeki bir objenin type ını belirterek, ArrayList içerisindeki objeye direk map eden inputlar yaratabilmek. Bununla ilgili JSTL de karşılık gelebilecek bir konu var mı onu bilemiyorum. Formdaki bi objenin içerisindeki başka bir type ada ulaşabilme şansı veriyor. Bu sayede form yapısında fazla kod tutmadan yarattığımız bean ler le kodların daha düzenli olması sağlanabiliyor.

Serkan Yıldırım dedi ki...

Mesela,session'da cart isminde ShoppingCart tipinde bir objeniz var.Bu cart objesinin items isminde bir ArrayList objesi var ve items içerisinde ShoppingCartItem tipinde objeler barındırıyor ve her bir objenin quantity isminde bir alanı var.Bu quantity alanına aşağıdaki şekilde ulaşabilirsiniz:

<c:forEach var="item" items="${sessionScope.cart.items}">
...
<tr>
<td align="right" bgcolor="#ffffff">
${item.quantity}
</td>
...
</c:forEach>

Acaba aradığınız özellik bu mu?