Thursday, September 04, 2008

Compare Java Web Frameworks

I decided to use the best java framework that fits my requirements. And I made a research, the results are below.

Struts 2
  • Built on webwork framework

  • Commonly used. Struts 1 project is not been developed rapidly. And search results mostly gets struts 1 results.

  • Struts 1 is very different from struts 2, so documentation for struts 1 won't work in second version.

  • There has been written so many libraries to integrate.

  • First class AJAX support

  • Lots of XML


Spring

  • Integration with other frameworks is awesome. Allmost all frameworks listed here have spring support.

  • Secure. (Acegi became a subproject of spring framework and named spring security)

  • Lots of XML

  • Big community support

  • Starting and understanding the framework is a little bit painfull.

  • Lots of projects and jars.

  • Design patterns based designed, so it can be used for big scaled projects easily.

  • Spring uses a library named Spring MVC. A Detailed comparison between Spring MVC and wicket can be found below. (Wicket wins ;))


http://ptrthomas.wordpress.com/2007/03/02/wicket-impressions-moving-from-spring-mvc-webflow/



Wicket

  • It is a nice apache project.

  • You write less xml, more java. (Nearly no xml and annotiations)

  • Easy to start developing Wicket apps (short learning curve)

  • Responsible community.

  • Truly component oriented approach(Good for swing users.)

  • Form validation works well

  • AJAX support is nice. (You don't need write javascript, but its javascript library is limited)

  • The documentation is scattered, there are lot’s of small examples here and there, but a was not able to find a single very valuable resource

  • Very flexible and reusable as you use java for almost all things.

  • Clear and less code is written when compared to spring MVC and jsf.

  • HTML templates live next to Java code(HTML and wicket markup language is more clearer when you compare to JSF)

  • Acegi can be used easily for designing more secure web applications.

  • A Detailed comparison between JSF and wicket can be found below. (Wicket wins ;))

http://ptrthomas.wordpress.com/2007/05/14/a-wicket-user-tries-jsf/

  • A Detailed comparison between Tapestry 4 and wicket can be found below. (Wicket wins ;))

http://www.ibm.com/developerworks/java/library/os-tapestrywicket/index.html?ca=drs

  • A Detailed comparison between Tapestry 5 Beta and wicket can be found below. (They look so similar in 5th version. And Tapestry 5 will be backward compatible. Good news for tapestry)

http://joshuajava.wordpress.com/2008/09/11/a-glimpse-of-wicket-14-and-tapestry-5/

  • A Detailed comparison between GWT and wicket can be found below. (I think they are not same type frameworks but if you are curios you can see the post.)

http://ptrthomas.wordpress.com/2008/09/04/wicket-and-gwt-compared-with-code/
  • You can find some slides about migrating from spring mvc to wicket and wicket security on the links below.
http://ptrthomas.files.wordpress.com/2008/05/peter_thomas_migrating_to_apache_wicket.pdf


http://www.slideshare.net/mrmean/wicket-security-presentation/

  • New enhanced security library for wicket(SWARM). You can look at the links below for more information and documentation
http://wicketstuff.org/confluence/display/STUFFWIKI/Wicket-Security

http://wicketstuff.org/confluence/display/STUFFWIKI/Getting+started+with+Swarm

  • More articles about wicket

http://cwiki.apache.org/WICKET/articles-about-wicket.html


Update: There is a post who says why not to use wicket. I found it interesting and nice.

http://tietyt.blogspot.com/2009/03/top-8-reasons-i-dont-use-wicket.html

You can say so what, which framework should I use. My choice will be django and python. After all stuff I think that java sucks. ;)

Tapestry

  • Apache project

  • Documentation doesn’t use real world problems.

  • The versions before 5 was not backward compatible, so it was painfull. Fifth version is redesigned and will be backward compatible. But is in beta version.

  • If you learn once, you will find framework so usefull.

  • XML Based components.(componenets are similar to JSF)


MyFaces

  • Myfaces is commonly used.

  • Lots of XML.

  • Ajax support is old dated when you compare to RichFaces and ICEFaces.

  • Security is a problem too.

  • Lots of apache projects and components, it causes complexity.

  • JSF specification is old dated. (It has a no javascript rule, so all libraries which have ajax support are not supported officialy. It will be changed with 2.0 specification.)


JSF

  • Fast and easy to develop with initially .

  • Lots of component libraries .

  • Doesn't play well with REST or Security.

  • Suns RI JSF(This library has drag and drop support if you use netbeans ide),

  • If You want JSF and AJAX solutions RichFaces(much better) and ICEFaces are mostly used alternatives.


Grails

  • Good for rapid application development.

  • Rapidly growing community.

  • Groovy based.(If you like scripting languages and java, grails will be the best choice. You can use spring and hibernate too.)

Rife

  • Full Framework, you don't need to use other jars or libraries. It does all stuff by itself by one jar
  • Starting an application is easy.
  • Less XML, more java.
  • Own templating library is powerfull.
  • Web continuations is powerfull. You feel you are writing desktop application.
  • Has own ORM solution, you don't need to use hibernate.
  • Documentation and community is so limited.

Google Search Results

Struts 2 Java

1.220.000(Results can be mixed with struts 1 results. I was not expecting such a result.)

Spring Java

567.000

Wicket Java

836.000

Tapestry Java

2.070.000

MyFaces Java

435.000

JSF Java

430.000

Grails Java

1.190.000

Rife Java

273.000


Number of people on IRC channel during a random working hour (09/04/2008 17.41 GMT+2)

Struts: 15

Spring: 39

Wicket : 47

Tapestry : 11

JSF: 31

Rife: 4

I could not fine Grails and myfaces irc may be they are not exist may be I could not found I don't know.(Hope I did not found)



















According to my research I considered to use wicket. I think wicket security system is sufficient but if you are not comfortible with wicket security, you can use acegi with wicket. If you are comfortable with spring and want IOC in your application you can give a try to spring + wicket.

There are some slides prepared by good developers. I zipped them. If you want to look at them you can install using the link below.

http://creasus.eu/comparing java frameworks.tar.gz

6 comments:

jonathan said...

As architect of Wicket, I think security is a top strength of the framework, right behind the ability to make components almost trivially. Eventually, the financial industry will catch on here.

yekmer said...

Most of the java frameworks are so complicated and wrong designed. I was considering to switch python web frameworks before I met wicket. If wicket security is enough to cover my needs, I won't use any frameworks near wicket and will be so happy :)

Gérald said...

IMHO, Stripes is clearly the best "request oriented" web framework. I would hesitate between "component oriented" frameworks...

Eelco Hillenius said...

Welcome to the club, hope you'll enjoy coding with Wicket :-)

You can download two free chapters of Wicket In Action here: http://www.manning.com/dashorst/, particularly the 1st chapter would be a good read to help you understand the design goals of Wicket.

yekmer said...

Stripes was another framework that I should look at, sorry for that. I used RIFE, and liked it before and I get tired of bad documentation and lack of community, that is the reason why I didn't searched anything for stripes framework.(I can be wrong and biassed sorry.)

fsilber said...

We sometimes speak of a web framework being component-oriented if a page is created by a nesting of powerful stateful components. Wicket, Tapestry, ASP.NET, JSF, Echo, and GWT are all like this.

However, in the desktop fat-client world where this way of programming is taken for granted, "component-oriented" has a different connotation. There, it means that large chunks of powerful functionality are assembled not by writing programming language statements, but by dragging and dropping "components" onto a form and configuring them via property editors. Such components are easy to use, but quite laborious to create. Building a program this way tends to result in a mass of ugly code that is difficult to read (unless one views it from within the IDE) and dangerous to refactor (lest the tool choke on it or write over your changes). JSF and ASP.NET are component-oriented also in this latter sense; Tapestry (I think) and Wicket are not.

One might conclude that JSF (if it offered a sufficiently rich set of pre-built components) and ASP.NET would be most productive for unsophisticated programmers building small, simple projects. Experts in object-orientation wishing to apply their skills to make large and complex web projects manageable, in contrast, would do better with Tapestry or Wicket, I think.

Share