Back in May, we launched what proved to be our most popular investigation into Java developers tools and technologies: The Java Tools and Technologies Landscape for 2014. Propelled by a rush of charitable feelings, precisely 2164 JVM developers responded to the survey–each response donated 0.50 USD to Child’s Play, a charity that gives sick children game consoles to pass the time while sick.

One of the most popular subjects that we regularly cover has to do with Java Web Frameworks–after all, it’s one of the most active and fragmented technology segments out there. One in 10 devs we talked to doesn’t use any web frameworks at all, and one in five developers uses among 40 or web frameworks that aren’t even in the top 8 most used out there. What the heck is going on here?!

Here is what we’ll look at today:

How many developers use multiple frameworks?

Breakdowns for the top 4 frameworks compared to the average results (e.g. what % of Spring MVC users also use Vaadin?)

Nearly one-third (32%) of developers use more than one framework

Java web frameworks are one of the few technology segments we looked into that really features complementary tools–as you can see, 57% use only 1 framework and 32% of all respondents (including those that use nothing) said they use 2 or more frameworks. That goes up to 36% when we eliminate non-users. As if to emphasize the fragmentation of this area, we see different results when we break it down based on the 4 frameworks we’re looking at today.

What % of specific framework users use more than one framework?

Spring MVC – 54%

JSF – 54%

Vaadin – 54%

GWT – 70%

It would seem that GWT is not the single framework of choice for our respondents. Let’s dig deeper into the figures for these four frameworks.

What percentage of a framework’s users also use something else?

Spring MVC

Spring MVC users are strongly aligned with the overall findings–with Spring MVC in use by 40% of developers that use a web framework, this is not surprising. The top 4 frameworks used by Spring MVC users are JSF, Vaadin, GWT and Grails. Like a presidential election, we found the breakdown pretty much even: 54% of Spring MVC users also use another framework, but 46% stick only with Spring. Here are some other notable findings related to Spring MVC users:

Grails is the holy grail – Grails among Spring MVC users is 57% higher than the average, which is sensible considering that SpringSource acquired G2One, the company behind Groovy, back in 2008.

Struts 1 & 2 increased by nearly as much – The usage of Struts 1 & 2 among Spring MVC users is 54% higher than the average–16.2% compared to 10.5%. So, here are those Struts users that were considerably more prevalent in 2012! If these are mainly long-term Spring Framework users, then we can see the residual effect of the once-dominant Struts.

GWT one-third more popular – GWT usage among Spring MVC users is 34% higher than the average. In our previous coverage of Java Web Frameworks, we identified Spring and GWT as fitting together naturally, complementing each other’s strengths and reducing the deficiencies.

JSF

With the dominant positions generally held by Spring, Vaadin, GWT, they are still aligned with expectations, but among JSF users we see a resurgence in what some developers might think of “legacy frameworks” (perhaps “mature” is better): Seam especially, but also Struts 1 & 2 and Wicket are more highly represented among the JSF crowd, while newer players like Grails and Play 2 are less commonly used. Notably, we can see that:

Seam is about a billion% more popular – Barely reaching 2% of use by the average framework user, Seam usage among JSF users is 8%, a whopping four-fold increase comparatively.

Struts 1 & 2 is one-third higher – As with Spring MVC, JSF is also a well-known framework that most likely built friendships with Struts 1 and 2 users back in the day. These two frameworks are found 32% more often among JSF users.

Grails & Play 2 much less popular – While Grails (7%) and Play 2 (6.5%) were more popular for the average framework user, JSF users are 53% less likely to use Grails (3.3%) and 59% less likely to use Play 2 (2.7%).

Vaadin

Vaadin has been one of the fastest-growing web frameworks out there, specializing in helping devs design attractive UIs. If there was ever a framework that seems to have taken all the real estate from Struts 1 & 2, it would be Vaadin. GWT in our Decision Maker’s Guide to Java Web Frameworks (2014 edition), which we ranked as the #1 framework to use for Java development, although the main recommendation was to use several apply the strengths of several frameworks at once.

GWT usage greatly increased (but still not #1) – With so many platform similarities, it’s not surprising to see GWT usage nearly double among Vaadin users compared to the average, but it’s still not in first place (held by Spring MVC). This reinforces our position in the Decision Makers report that Spring is used for its many strengths even when the dream-team Vaadin / GWT get together.

Struts, party of 2? Struts? Hello? Compared to the Spring MVC and JSF crowd, Struts 1 & 2 usage is 2-3 times lower among Vaadin users–not even 7% use Struts 1 & 2 combined compared to over 16% for Spring MVC and nearly 14% for JSF users.

Grails usage decreases by about 50% – Given that we ranked Vaadin and Grails nearly even in the frameworks report, it would seem they cancel each other out. Users need just one of them.

GWT

We’ve seen GWT decrease in market share since 2012, probably after the whole JavaScript security warning from Google. In fact, without the poor security surrounding JS, GWT scores relatively well, and when combined with an ultra-secure framework like Spring MVC, it’s a great combo. GWT users definitely utilize Vaadin, which is based on GWT at heart, but for some reason we see a large jump in Struts 1 usage.

Vaadin is the favorite – Vaadin usage by GWT users jumps by about 34% to take the #2 position vacated by JSF, which is used a lot less. More or less, they traded 2nd and 3rd places with each other when it comes to GWT users.

Um, Struts 1 makes a comeback? – Combined usage of Struts 1 & 2 is higher than average, but oddly it’s Struts 1 usage, not Struts 2, that increases by about 50% compared to the average.

Lowest % of Spring MVC users – Although it’s not much, GWT users take also use Spring MVC about 10% less than the 3 other frameworks, and 20% less than the average.

TL;DR – The “Take-aways” from this analysis

Ok, let’s sum up everything that we found in one good sentence about each section here. This should be good enough for a Too Long; Didn’t Read (TL;DR) spot:

Multiple framework usage is a common-enough occurrence, with nearly one-third (32%) of developers using 2 or more frameworks. Another 57% use just one framework, and 11% use nothing that appeared in our list (i.e. JSPs and Servlets all the way!)

Spring MVC users show higher usage of Grails via the ownership of the Groovy platform and Struts 1 & 2, most likely left over from mature projects, and GWT, which we see as a very complementary framework.

JSF users, compared to the report’s averages, are considerably more likely to use mature frameworks, namely Seam and Struts 1 & 2, while shunning newer technologies like Grails and Play 2.

Vaadin users seem to work alone, only showing increased usage compared to the average of GWT, on which it is built. Struts 1 & 2 usage drops significantly and comparable framework Grails is also much decreased.

In return, GWT users favor Vaadin over JSF, as well as Struts 1 for some inexplicable reason.

The former Indian leg-wrestling champion of his home town, Oliver joined the ZeroTurnaround team in 2010 as the tiny startup's first marketing employee. While not a developer himself, he is inexplicably talented at finding code errors that somehow appear in RebelLabs articles. Oliver likes reading, writing and 'rithmatic, as well as music, films, dogs, steaks, gazing at world maps and strolling through the deeply-forested parks of the Czech Republic, where he lives. Say hi on Twitter @theotown

It would be great to see a list of the 40 other frameworks that make up the 11%.

Miguel Angel Bautista

I worked with JSF (HORRIBLE), Vaadin (I like it), but my favorite is Grails, very easy to work with. also you can combine Grails with Vaadin which is also Great.

Rusty Wright

I still haven’t found a framework that I like as much as Stripes. I would describe Stripes as what Struts 2 ought to be, or Struts 2 without the warts and moles. It’s one of those frameworks that’s buried down in the 11%. Unfortunately it never got the hype that the others got or I think it would be a lot more popular. It’s clean and straightforward and very flexible and powerful.

What about the Javascript frameworks? People keep telling me that nobody’s using a server-side GUI framework today. That can’t be true – PrimeFaces 4 (just to name a framework I happen to know very well) has been downloaded half a million times, and as far as I know, the newer versions are popular, too. It would be interesting to know whether the JS developers are just saying what they want to be true or if it’s really a big trend.

Angelo

How can you compare JSF with Grails ? I think You have a missconcept about what these two frameworks are for .

Angelo

you are really confused comapring JSF and Spring … and talking about Play when play is build to work on the top of Java and Scala . Straight JS programming ? To do what ? Big huge enterprise banking application ? You are mad .

Miguel Angel Bautista

front end: JSF: facelets (xhtml) Grails (gsps) almost the same. they both use EL to connect to the back-end. Grails is much more adaptable. you can use vaadin, gwt, wicket, angular, etc. JSF only the plugins like Prime.

Back end: JSF: EJB, JPA. Grails: Spring, plenty of plugins available.

I worked in companies where use JSF and Grails. in one case I moved one JSF app to Grails.

one point you’re right. one can’t compare JSF with Grails. JSF is to horrible to compare with other Java Web Framework.

Only with wicket. I hate more Wicket that JSF

The beauty of our area is that we can choose for companies that uses our favorites frameworks, languages…..

In my case I am a Grails Developer. I prefer

Alex Craig

Yes you can use a pure web front-end for a huge banking application. It’s 2014 my friend…

Amogh

Yes Grails is awesome!!

David Shefchik

I think it’s just a sign of the trend towards full-stack development. You can’t just be a jack-of-one engineer and expect to build high-performance, good-looking and maintainable web and mobile apps. It’s time to expand our scopes and maybe learn how to write some sexy JS widgets. Or write an async api server with a sharded NoSQL datastore and distributed caching. Or better yet both.

Oliver Watkins

There seems to be little focus on performance responsiveness and richness of widgets available. How about a breakdown of richness of widgets? Techs like Struts and JSF are more “served” by the server than say ZK or vaadin where javascript in the client is doing more work. You can bake a framework any way you want by serving it from the server ( Tapestry, Wicket ), but if you want the best GUI you gotta understand the GUI logic belongs in …well… the GUI. PrimeFaces seems to be the best in terms of this seperation, even though you program in Java. Best thing is to fully jump into Javascript and using something like ExtJS.

Oliver Watkins

Using ExtJS at the moment and the performance and richness is mindblowing. Only downside is you need to program in Javascript.

Oliver Watkins

Try ExtJS javascript framework. Its just like Java Swing in the browser

Angelo

JSF Back End ? you are really confused my friend. JSF it is pure UI. JPA ? What has to do JPA with JSF ? I suppose you are not a java dev ….

Miguel Angel Bautista

probably I am confused because I hate JSF and I don’t care about that framework. I am Groovy, Scala and Java developer.

darkcg

Hating on things you don’t even understand … That’s the wrong attitude telling us you’ll never work in IT professionally. You must live in the third world if some company made the error to hire you.

Gupta

GWT was a very useful and powerful framework until they removed the use of the GWT plugin and replaced it with that stupid dysfunctional Super Development Mode.

asd

It’s JSP :D

Hamed

Ok, we, the thrid world living developers, are really sorry for bothering you. We, the third world living developers, promise you to kill ourselves, asap.
Hate toward a piece of code is much more acceptable than hate toward human biengs. If you have somthing TECHNICAL to say about someone’s comment, say it. If you don’t, just shut the f… up.

As for web UI, Vaadin and Spring MVC are the best from my point of view.

Unfortunately when you need to build an enterprise app you can’t use only one framework as it does not cover all aspects of development. So you have
to combine web framework with backend framework plus think of many other things like security (users , roles, rights ),audit , resiliency etc.

To address these issues above and streamline development process, we made one step down further and created Full Stack Java Framework called “CUBA
platform”. The source code and documentation are available at https://www.cuba-platform.com/

Check
this new addition: A POJO GUI Library at http://www.pioneer-soft.com.
Not a framework but a set of reusable Java classes. Each reusable Java class is
designed to generate SVG/JavaScript code for a given GUI component. Using any
reusable Java class is no different from using any other POJO. Many reusable
Java classes for presenting GUI components. Creating a reusable Java class for
custom GUI component is a piece of cake.

Steve Cook

GWT was sweet, especially in its pure MVP structure. Vaadin and all these gwt “mvc” libraries make it slow and clunky. Then the dev team sold out (to Vaadin) along with stopping support for a solid debug interface. To be fair I have not played with Vaadin in 2 years, at which time their demos were buggy, and implementation was more complicated than any framework should be.

Turning what I expected in 2012 to be the next biggest language into trash with trash piled on it.

It is now riddled with political issues and bolted on MVC over an MVP core. Maybe we should get a group together and fork it off and get back to a more pure GWT architecture.

In any event I think flux/react may be the next best thing for web, still playing with it though. (so many trying to “fix” GWT should wait until we can mix in some of react’s technology and ideas.)

MVC People, MVC is not ALWAYS the best architectural model. From what I have seen MVP works far better for dynamic (AJAX) web pages than MVC 9 out of 10 times, yet everyone is so ingrained into this MVC idea with strength on the server side of things. Too many people these days seem to be chasing fads instead of actually taking time to architect for the environment. It kind of saddens me to see everyone trying to cram everything down the same philosophies just because they are what’s hot right now.

Great comment including some interesting background information. Thanks!

I agree with you that Flux and React are hot topic on the web, but other technologies like Angular are there to stay, too. So are server side technologies like JSF. There’s no silver bullet. You have to chose the technology matching your project’s requirement. And every project is different.

As for the MVC bit: Recently, the community has started to rethink the “MVC is the way to go” theory. IMHO that’s good. I always feel uncomfortable with dogmas. By the way, you may like my “Model-View-Whatever” article (http://www.beyondjava.net/blog/model-view-whatever/ ). Talking of which: isn’t flux another “competitor” to MVC?

Steve Cook

Flux is a dispatcher model, that’s base philosophy is to flow events(actions) through the same vector to reduce complexity and reduce race conditions and missed updates. The state can be validated before each action is accepted to ensure the state is still compatible with the action before being dispatched.

Dan

The aim of such a Spring MVC design is to separate the presentation
function from the business process.

How to make MVC to separate the business layer from the
presentation layer completely, CML can make it happen.

MVC working with CML can separate the business process layer
from the presentation layer completely.

And managed bean is it front end? I don’t think so and it’s a big part of JSF… And I hate JSF too.

Michael Ritt

I came across the CUBA Platform and was imressed by the framework. Actually I already expressed my thoughts on alternative.net http://alternativeto.net/software/the-cuba-platform/reviews/. As for this article I don’t see the point to compare those frameworks, as they are very niche type of products. Comparing Vaadin and Spring doesn’t appear as it is something that makes sense to me.

Before answering the question, I’d like to ask you a question myself. What is it that makes cakephp simpler? I looked briefly over their website, and what I saw was a complex life cycle, a model layer, a controller layer and a view layer. At first glance, it looks every bit as complicated as the average Java UI framework. What did I miss?

I’m not doing a comparaison between Java and php world or frameworks. It is normal to think the example I gived is complicated as in last version they added “extra” tools like composer, ( trust me it is simple ) … but my Question is why frameworks like struts does not cover all the MVC aspects, but only view for example, Why we have to edit and maintain a Ton of xml and properties files, to add jars … and in runtime, why a heavy code is executed for the simplest operations …

My mission as a member of the BootsFaces team is to make things simpler, and that’s why I asked. I hoped for some inspiration how to simplify JSF.

To answer your question: There are two reasons. The first reason is simply because it’s Java, and Java is popular in the enterprise world. That means many developers work on applications consisting of hundreds or even thousands of pages. You need powerful tools to manage such a huge application. Usually, this also means some overhead for simple applications. JSF is a classical example. You only need three files and two jars to get started, which is a lot simpler than it used to be in the early days, but even so, learning to use it efficiently requires a lot of time. But once you’ve mastered it, programming is a lot more efficient than trying to program the same application using – say – jQueryUI.

The other reason is that things get complicated over time. I’ve tried this several times. After a while, I got frustrated with our company framework, and started over with a fresh, new and simple approach. But before long, you need this feature, and that feature, and a couple of weeks or months later the simple framework is almost as complicated as the original one. The only way to simplify things is to omit features – but that’s exactly what hardly anybody wants.

Sometimes there’s also a third reason. When you ask your manager to buy a new framework, they’ll almost always compare features. The frameworks with most features and long-term company support wins. Sometimes also the price tag plays a role, but in the light of TCO (total cost of ownershift), it’s usually less important. It feels better to buy a feature-rich framework from “Big Blue” than downloading the lean open-source framework developed by a lone programmer during a long week-end.

Divanshu Tak

Sir, Is it important to use Framework to build app. Is it not possible that we can do only simple code.

That’s a very good question. Actually, I’ve tried several times to get rid of the framework I used. That’s possible, but after a while you notice you pay a high price. Of course, it depends on your application. But most application benefit a lot from using a framework – as soon as you’ve wrapped your head around it. That, in turn, is an investment you shouldn’t neglect. Usually it’s more expensive than the experts say. But on the long run, using a good framework always almost is more fun (and more productive) than using the base technology. Also see my other comment on this page (http://disq.us/p/1apetps).

Divanshu Tak

Thank you Sir for such a good explanation.

But Sir I have one more thing to request to you,
Sir could you please explain the below syntax to me,

That’s the definition of a variable containing an array containing integer numbers. The variable is also initialized with a new, empty array. Maybe you’ve stumbled over the “” bit. That’s the “generics” API introduced with Java 5. It distinguishes a multi-purpose array which may contain arbitrary object from an array that’s guaranteed to contain numbers and nothing else.

truthfinder

Unless you have deep knowledge on User Interface and graphical programming you cannot enjoy JSF and vice versa. JSF is the only web framework which centered around fundamental philosophy of network graphics which originated from X-WINDOW system in late 70’s – the predecessors of all GUIs. It is the similar feeling of using Java AWT, 2D graphics and SWING. You need a lot of time and effort to understand the philosophy. But once you learn those you feel any other UI library as joke.

I wouldn’t go that far. Even the average programmer can have fun with JSF (and be productive with it). I agree with you that JSF is unnecessary complex. In part, that’s because of clever concepts that are hardly ever used, but other parts are just that: clumsy. That’s why I spend to much time with BootsFaces. It’s my approach to make JSF a friendly place to every developer.

On the other hand, there are many fine other UI frameworks out there. Spring MVC, Angular, React.js, Ember.js, meteor, GWT, Ozark, JavaFX, SWT, UWP/Xamarin, just to name a few. There’s nothing wrong with them. They are just different, optimized for other purposes, but I wouldn’t call any of them better of worse than JSF. The choice of your pet framework depends on your use case, your team, your company’s strategy and – last not least – on your personal preferences.

By the way, I consider you comment about the roots and the philosophy of these frameworks interesting. Can you provide me some background information? What’s the connection between JSF and X-WINDOW?