Matt RaibleMatt Raible is a Web Developer and Java Champion. Connect with him on LinkedIn.

The Angular Mini-Book The Angular Mini-Book is a guide to getting started with Angular. You'll learn how to develop a bare-bones application, test it, and deploy it. Then you'll move on to adding Bootstrap, Angular Material, continuous integration, and authentication.

Spring Boot is a popular framework for building REST APIs. You'll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.

For book updates, follow @angular_book on Twitter.

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: Angular, Bootstrap, and Spring Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.

This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.

For book updates, follow @jhipster-book on Twitter.

10+ YEARS


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.

My Comparing JVM Web Frameworks Presentation from Devoxx 2010

This week, I've been having a great time in Antwerp, Belgium at the Devoxx Conference. This morning, I had the pleasure of delivering my Comparing JVM Web Frameworks talk. I thoroughly enjoyed giving this presentation, especially to such a large audience. You can view the presentation below (if you have Flash installed) or download it here.

Unlike previous years, I chose to come up with a spreadsheet matrix that shows why I chose the 5 I did. This spreadsheet and rankings given to each framework are likely to be debated, as I don't know all the frameworks as well as I'd like to. Also, the missing column on this spreadsheet is a "weighting" column where you can prioritize certain criteria like I've done in the past when Comparing Ajax Frameworks. If you believe there are incorrect numbers, please let me know and I'll try to get those fixed before I do this talk again at The Rich Web Experience.

One thing that doesn't come across in this presentation is that I believe anyone can use this matrix, and weightings, to make any of these frameworks come out on top. I also believe web frameworks are like spaghetti sauce in The Ketchup Conundrum. That is, the only way to make more happy spaghetti sauce lovers was to make more types of spaghetti sauce. You can read more about this in my There is no "best" web framework article.

Update: If you disagree with the various ratings I gave to web frameworks in this presentation, please provide your opinions by filling out this survey. Thanks to Sebastien Arbogast for setting this up.

Update: Sebastien has posted his survey results at JVM Web Framework Survey, First Results.

Update 12/6: A video of this presentation is now available on Parleys.com.

P.S. My current gig is ending in mid-December. If you're looking for a UI Architect with a passion for open source frameworks, please let me know.

Posted in Java at Nov 18 2010, 05:23:10 AM MST 39 Comments
Comments:

Matt, your presentation was highly appreciated. Thanks! Jo

Posted by jow on November 18, 2010 at 02:16 PM MST #

The stats are amazing about the various frameworks.

Posted by Sathish on November 18, 2010 at 03:57 PM MST #

I think "Grails in Action" or "The Definitive Guide to Grails" are better (certainly more up-to-date) choices than those you've listed. Programming Groovy 1.0 is horribly out-of-date but 2.0 is due very soon.

Posted by Donal on November 18, 2010 at 09:56 PM MST #

What I would find interesting, is a overview of why you rank the frameworks the way you do. I'm not arguing with you, I think it would be very interesting to get a high level take on what you think about each of the frameworks listed.

Posted by Robert on November 18, 2010 at 11:26 PM MST #

Matt, thanks for presentation.

How could Grails (written in Groovy, with Scala plugin) get 0.0 score in "Multi-language Support (Groovy / Scala)" criteria ?

Posted by Igor E. Poteryaev on November 19, 2010 at 10:39 AM MST #

@Donal - the books listed here are the ones I used to first learn Grails and Groovy. I do believe the first two are still up-to-date, well written and great starts for someone new to Grails. I can certainly change the last one.

@Igor - my logic was that the major components (controllers, services, domain classes) are written in Groovy. If they can be written in Java, Scala or other languages, I can certainly change the number.

Posted by Matt Raible on November 19, 2010 at 01:25 PM MST #

Similarly to Igor - I'm not sure why Spring MVC got 0.5 in language support. I have written Spring MVC apps in Scala. Or you can use Groovy or JRuby as well if you want, and you get dynamic reloading of your controllers, without JRebel (see http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/dynamic-language.html#dynamic-language-scenarios-controllers)

Posted by Eric Pederson on November 19, 2010 at 04:20 PM MST #

Excellent presentation

I think it would be very useful to add to the comparison matrix the following items:

support (email list, twitter, community, etc)
community
source code readability
deployment options

Right now I'm having a look at Play, and I like what I saw so far. I like speciallly the fact that it's really lightweight and that it doesn't feel overbloated at all. I don't know how to reflect that in the matrix (a lightness or un-overbloatedness item?)...

Moreover, I dont quite get why you put 0.50 to Play in templating, validation an rest support...

apart from that, I think it's an excellent resource to choose a web framework...

thanks a lot for sharing

Posted by opensas on November 20, 2010 at 06:39 AM MST #

Great. It will be interestiong to compine JSF and GWT, but no articles about that

Posted by Ara Minosian on November 20, 2010 at 05:44 PM MST #

Hi Matt,

As I told you after your presentation I disagree with grades given to Tapestry. Here is my response:

http://blog.tapestry5.de/index.php/2010/11/21/response-to-matt-raibles-presentation-at-devoxx-2010/

Posted by Igor Drobiazko on November 21, 2010 at 02:13 PM MST #

Thanks for a presentation, i just wanted to note that all theese frameworks don't always compete. For example a lot of people use GWT with Grails. I switched from using Grails + DOJO toolkit to Grails + Vaadin lately.

Yes Vaadin integrates into Grails so i develop Vaadin app in Groovy, have zero turnaround without JRebel, use GORM and Spring dependency injection. Also Vaadin has a number of addons including ones that provide server-side push that can be integrated with Grails as well.

Posted by Demeter on November 22, 2010 at 04:29 PM MST #

I wish you had included JSF 2.0 in the more detailed comparison

Posted by carol on November 22, 2010 at 08:50 PM MST #

Why not keep Rails as first in the top JVM Frameworks :)

Thanks for wonderful comparison.

Posted by Prasad on November 23, 2010 at 02:19 AM MST #

Thank you Matt for the presentation, I just wanted to note that you should have considered more REST support in Struts 2 web framework. It has a great REST support using Struts2 REST plugin.

Thanks!

Posted by Máximo Castillo on November 23, 2010 at 01:15 PM MST #

This is Arun Gupta and I work in the GlassFish team.

Thanks for your presentation, summary, and blog. I've never attended your presentation in person so its hard to understand all the arguments and would like to clarify some data points:

1). I'm not familiar with Spring MVC but comparing Rails and Grails to JSF does not seem like a fair comparison. To me it seems like comparing Rails Action Pack with Java EE 6. IMHO, full stacks such as Rails and Grails should be compared to Java EE 6 (or Web Profile) instead of just one part of the stack such as JSF.

2). The spreadsheet says "Updated automatically every 5 minutes". Can you provide more insight into how this data is generated ? Who contributes to this data, which market segment, is this collective intelligence or based upon your personal experience ?

3). Have you looked at JSF 2.0 ? Templating using Facelets, native Ajax support, solid i18n and l10n support using properties file is all built-in. Also can you explain by what do you mean by REST support in JSF ? If you compare with Java EE 6, JAX-RS provides full range of APIs for RESTful web services and can be used for interacting with them.

For any such comparison matrix, the source and methodology is really important. May be you explained that in your presentation but sharing the spreadsheet without background leaves a lot of questions unanswered.

Posted by Arun Gupta on November 23, 2010 at 11:06 PM MST #

@Arun - Thanks for the feedback!

1) This is a fair point. Would you say it's fair to use Seam in this context instead of simply JSF?

2) The data is not automatically updated, unless I do it manually. Since there's been so many blog posts and tweets on this spreadsheet, I'll likely create a "version 2" at a separate URL rather than updating this one and confusing people. I'll make sure and add something to the original that points to v2. The data is mostly based on my experience and I need to update it based on community feedback after my Devoxx talk.

3) I'm familiar with JSF 2.0, but I definitely need to work with it more. With 1.2, I used Facelets, Ajax4JSF and other add-ons that made it more usable. By REST support, I mean the ability to produce JSON/XML (like Spring MVC easily does, in the same Controllers), as well as consume it with some sort of client (e.g. Spring's RestTemplate). JAX-RS doesn't currently have a client, but apparently it will in 2.0

A lot of folks have asked for a detailed explanation of this spreadsheet. I explained this in my Devoxx talk (which should be available on Parleys.com soon). Since I have to extend this talk by 30 minutes for the Rich Web Experience next week, I'll try to add a number of slides explaining the ratings for each criteria. However, it will be difficult to explain each rating since 20 x 13 = 260. I'm thinking about just explaining a few ratings for each criteria.

In reality, it's likely that the criteria are not equal on every project, so you can further modify the scores by adding a "weight" multiplier column. By doing this, chances are you can make any of the frameworks end up in the top 5.

Posted by Matt Raible on November 24, 2010 at 01:13 AM MST #

Hi,

I have a question, why did you give 0 for vaadin in productivity? Vaadin is one of the most productivity frameworks that I know...

Posted by Marcos Paulo on November 24, 2010 at 04:15 PM MST #

@Marcos - when I gave it that rating, I was under the impression Vaadin required a compile/re-deploy for changes to be seen. I've since been corrected that a save/reload is possible to see changes.

I'll be updating my matrix and presentation this week. I'm presenting it at again at the Rich Web Experience in Fort Lauderdale next week.

If you disagree with any of my other ratings, please let me know.

Posted by Matt Raible on November 24, 2010 at 04:39 PM MST #

Ah... ok...

Another thing, vaadin has a lot of things that i could call "inside-frameworks" to help you built your application with hibernate, better themes, better paginations components and etc that are made by users...

Can't we consider those things like plug-in or add-on?

Posted by Marcos Paulo on November 24, 2010 at 04:42 PM MST #

Hello Matt,

Thanks for your presentation and post.

Maybe you could be interested by our project to build a community to create and share comparisons about everything. I don't know.. We have launched the platform recently, but it could be seen like a wikipedia of comparisons where everyone can join us to maintain open data..

Here is a small example linked to your dev area (php framework list): http://socialcompare.com/en/comparison/php-cms-comparison-content-management-system-gk3v6ma

Actually you can compare what you want, and use some social criteria such as ratings, vote... I hope I have attracted your attention ;)

Regards,
Vanina

Posted by Vanina on November 24, 2010 at 09:47 PM MST #

Matt,

Seam is yet another framework. JSF + CDI + JPA pretty much serves all your need for a Web framework, no EJBs even :-) I think if you are including Rails and Grails, then including Java EE 6 would be more reasonable instead of just point technologies.

The current spreadsheet says "Updated automatically every 5 minutes" and that's what confused me.

With JSF 2.0, Facelets are now integral part and so is Ajax. Even though JAX-RS does not have a client API but Jersey do. And as you mentioned, there is plan to standardizing that in JAX-RS 2.0. There is work to do in JSF 2.0 but it's not "0.0" as in the spreadsheet :-)

I'll be at Rich Web Experience next week as well, lets connect more there. I'll be talking about java EE 6 there and showcasing different tooling capabilities there.

Posted by Arun Gupta on November 25, 2010 at 12:29 AM MST #

Hi Matt,

regarding JSF+CDI+JPA - it's really simple with existing CDI extensions to get rid of EJBs:

http://matthiaswessendorf.wordpress.com/2010/11/20/enterprise-java-without-ejbs-but-with-cdi-and-myfaces-codi/

The Apache MyFaces project has a bunch of CDI related goodies.

Check out the WIKI / Documentation

https://cwiki.apache.org/confluence/display/EXTCDI/Documentation

-Matthias

Posted by Matthias Wessendorf on November 25, 2010 at 07:36 AM MST #

Hi Matt,

Thanks for the comparison. Something like this was sorely needed. I sympathize with some of the anger you've received from zealots not happy with where their favorite fell in the rankings. Seems to me it falls in the category of "no good deed goes unpunished".

As constructive feedback for future work, I think the criteria selection might be refined a bit. Your "Developer Productivity" and "Degree of Risk" criteria are really categories of other criteria you've got listed. I see the following criteria as really describing "Developer Productivity": Learning Curve, Templating, Components, Plug-ins or Add-Ons, Validation, Quality of Documentation/Tutorials, Testing. Likewise, I see the following criteria as really describing "Degree of Risk": Developer Perception, Developer availability, Project Health, Job Trends.

Effectively listing the same criteria multiple times skews the rankings. That said, you've provided the detail, so it's easy enough to message the spreadsheet to address this issue. Feel free to reply if you would like elaboration on my points here.

Thanks and well done.

-Derek C. Ashmore

Posted by Derek C. Ashmore on December 04, 2010 at 02:57 PM MST #

http://click.apache.org/ component framework must be included in comparison!

Posted by Andrew Fink on December 06, 2010 at 09:35 AM MST #

[Trackback] When I re-wrote my Comparing JVM Web Frameworks presentation from scratch, I decided to add a matrix that allows you to rate a framework based on 20 different criteria . The reason I did this was because I'd used this method when choosing an Ajax...

Posted by Raible Designs on December 06, 2010 at 08:36 PM MST #

Have you ever seen Zk ( www.zkoss.org ) ? In my opinion is a very good web framework.

Posted by Luca Visconti on December 09, 2010 at 11:38 AM MST #

[Trackback] Comparing JVM Web Frameworks? ?? ??? JVM Web Framework Matrix. ????? ??? 1?? ???? ????? ???? Grails.

Posted by geekinside's me2day on December 15, 2010 at 08:49 AM MST #

Why not mention ZK? It is much more popular than many frameworks you mentioned. You shall give it a try. IMHO, ZK is the best:)

Posted by Jack Walker on January 06, 2011 at 03:29 AM MST #

I second the poster above that ZK is the best.

1. You can program everything in Java. No need to learn multiple languages and frameworks.
2. A very rich set of components is available. You will be hard pressed to find a framework that includes, for example, a real spreadsheet component and various charting components right out of the box.
3. If you want you can easily use any scripting language provided it runs on the JVM.

ZK is a great pleasure to work with. It is the way to go.

(I am in no way affiliated with ZK. Few years ago I had to re-engineer a large web application written in ASP/C++. The speed with which I could train the engineers to contribute significantly to the project (GWT for example would have taken much more time), the consequent ease which we could meet the tight schedule, and the overall responsiveness of the application developed in ZK have made me a huge fan.)

Posted by gregor on January 20, 2011 at 06:24 AM MST #

pretty informative, great work. Congrats! -Sreehareesh KM

Posted by Sreehareesh on February 02, 2011 at 04:39 AM MST #

@Arun / Matt: While Arun won't need much convincing to get involved, please all consider productive input into the new upcoming JSF release for Java EE 7.

Those of you in the JCP why not participate in the EG, just talk to Ed, the Spec Lead.

@Igor / Matt: at least in some cases, we know, Matt also uses Tapestry, probably the survey his own usage...?

Posted by Werner Keil on February 03, 2011 at 10:40 AM MST #

My favorite is JVx with WebUI implementation because it helps me with Session handling and database access. It is not complex and the apps are fast.

Posted by thomas on February 16, 2011 at 02:19 PM MST #

Could you update your matrix to have version numbers? Taht would help readers know which apples and pears are being compared.

Posted by JLeplat on February 17, 2011 at 10:14 AM MST #

@JLeplat - that's a good suggestion. I'll do that when I update the Matrix for my TSSJS talk in March.

Posted by Matt Raible on February 17, 2011 at 04:08 PM MST #

Ronin is a newer web framework that looks like it's worth checking out.

Posted by frank on February 28, 2011 at 03:56 PM MST #

Hi, Sorry for the question... but... what are the reasons for not even consider Struts2.0? thanks in advance, Michel

Posted by Michel on June 06, 2011 at 08:20 PM MDT #

I agree with Michel, you completely left out Struts2 but I have no idea why. By crossing it off in the beginning you don't give people a chance to make their own decision.

At my work we have two programming teams, they have chosen Spring MVC, and for something I was doing I chose Struts2. When I compared the code for doing similar tasks, I had half the code they did. I have to admit I haven't had a very close look at SpringMVC, but at least in my limited experience I would have never done my project in SpringMVC as I would have had to write a ton of extra code.

I think you should have at least included the pros and cons and all of your charts. I know it is on the spreadsheet, but it isn't included in any of the other charts in the presentation because you discarded it in the beginning.

Cheers, Stephanie

Posted by Stephanie on July 27, 2011 at 02:54 AM MDT #

Why did you add Ruby on Rails to a JVM Framework Comparison? In that case you should have added Symfony Framework too.

Posted by anyulled on August 21, 2012 at 07:37 PM MDT #

Michel and Stephanie - Struts 2 didn't make the cut because my criteria put others above it. I'm a Struts 2 fan and committer as well, but I tried not to let my biases sway me. For an updated version of this presentation, you might checkout Comparing Web Frameworks and HTML5 with Play Scala at Jfokus 2012. In includes a recording of my presentation.

Anyulled - I included Ruby on Rails because of JRuby. I suppose Symfony could qualify because of Quercus. However, I don't know many folks that are running Symfony on a JVM.

Posted by Matt Raible on August 21, 2012 at 07:46 PM MDT #

Post a Comment:
  • HTML Syntax: Allowed