Struts 1.x as we know it is pretty much at the end of the road. Since JSF was introduced and now standardized as the web framework of choice in Java EE 5.0, as tool support increases for many there will be no other choice – use JSF for the web framework.
However the Struts community didn’t pack up and go home, they have been busy developing in many (confusing?) different directions. Timothy O’Brien’s blog entry on the OnJava.com site outlines these different directions.
First up is the continuation of the Struts 1.x codeline, now being referred to as the Struts Action 1 framework. This FAQ on their site says that development is continuing, however with so many other options out there, including JSF as well as other the other Struts projects, I think it would be foolish to go with Struts 1.x if starting a new project today. Why? Yes it’s tried and tested, but there are now better options available.
Next – the merging of the WebWork project and it’s framework with Struts has given birth to Struts Action 2 Framework. I’m not familiar with this codeline at all, but understand this will be what was formally known as WebWork, as a new version, 2.3.
Next comes Struts Shale. Shale is not Struts. It is a framework built on top of JSF, to ease JSF development and fill the gaps where the Struts Shale developers feel that JSF is lacking. Shale is described as what Struts would have originally been, if the developers had known then what they know now.
And the choices don’t end there – there are now many more Web Application frameworks out there than there have ever been. Gavin King’s Seam framework is getting a lot of press, again, building on top of JSF and offering features such as conversation support that are not handled in JSF by default. There are plenty of other choices all that have their own pros and cons, and implemented using different approaches, some command pattern based like Struts, some event based like Tapestry. If you are looking to choose a web framework today, I would do some homework and checkout these alternatives, since defaulting to Struts is possibly not the best choice anymore.