Struts 1 Reaches End Of Life

Struts 1, the venerable Java MVC Web framework, has reached End Of Life status, the Apache foundation has announced. In a sense, the move simply formalises what has already happened, as the Struts team have focused their efforts on version 2; the last release of Struts 1 was version 1.3.10 in December 2008. The change of status does mean however that, whilst the code and documentation will still be available, no further security patches or bug fixes will be issued. "...you will either need to find mitigations, patch the existing Struts 1 source code yourself or migrate your project to another web framework," the FAQ states. To put it another way, whilst there may not be a particularly pressing need for applications and sites on Struts 1 to migrate to a newer framework, it would be inadvisable for new projects to use it.

Struts 1 was originally created by Craig McClanahan and donated to the Apache Foundation in May 2000. It became the de-facto standard for building web applications in Java for a time, and is still used in many production systems.

“I like to say that Struts 1.x was the 'Killer App' for J2EE,” Matt Raible, a Web Architecture Consultant specializing in open source frameworks, told InfoQ

For the most part, people were struggling with Servlets and JSPs and how to architect their web applications back in 2001. If any kind of framework existed for a team, chances are it was developed in-house. Java developers love patterns and since Struts used and encouraged so many patterns, it was an immediate draw. Developers were also drawn to it because it was mostly Java and they could use their skills to write web applications. In many ways, I see parallels to how Java devs felt when GWT came out. Suddenly, their bare-bones Java skills could be used to write Web 2.0 applications.

I remember talking to a recruiter back in the day who said, "If you know Struts, you're Golden". Back then, there weren't that many Java skills related to web development. Struts was pretty much the only one.

I developed AppFuse in 2002-2003 as a full-stack framework, with Struts as its only web framework; that was when I was a fan of Struts. AppFuse reduced a lot of the boilerplate code that Struts required and integrated with Spring and Hibernate too. However, I often heard from other devs that WebWork and Spring MVC were better. So I tried them and was immediately impressed. The fact that you could use POJOs instead of ActionForms was great, and their testability was much better than Struts.

Since then, there have been many improvements in the JVM Web Space. Ruby on Rails inspired frameworks like Grails and Play. However, there's still a plethora of organizations that have well-built, scalable backends that don't want a full-stack framework. That's why pure web frameworks (JSF, Spring MVC, Struts 2, Tapestry 5, Wicket, etc.) continue to be popular. Today, these pure Java frameworks are still trying to be more productive and achieve zero-turnaround. While JavaScript MVC frameworks have appealed to many, I think the fact that folks (Twitter, Airbnb come to mind) have seen performance issues with client-side templating has given these frameworks new life.

Struts 1 was superseded by Struts2, getting its first full release in February 2007, but this was based on the WebWork framework. Describing how the merger came to be, author of the InfoQ Struts2 eBook, Ian Roughley wrote

The original proposal, Struts Ti, was born out of a need to evolve Struts in a direction that the code base did not easily lend itself to. Around the time of that proposal, there was a movement by Patrick Lightbody to bring together leaders on several different web frameworks with the goal of achieving a common framework. Although the movement lost momentum, a commonality between WebWork and the goals of Struts Ti at the technology and committer level was found, and the projects were merged, with WebWork providing the base technology.

A consequence of this is that there is no drop-in replacement for Struts 1, and migrating a large Struts 1 application can end up being a complex process. As well as Struts2, the FAQ suggests Spring Web MVC, Grails or Stripes as possible alternatives.

That was a really stupid suggestion. The use cases that an Action based web framework resolves and those that apply to node.js (a lot less BTW) are not the same...not even close. Not to mention that is far easier to migrate a Struts based controller/action to another Java Web framework than writing it in Javascript with no concurrency support. So IMHO you don't know what you are talking about and you are just following the hype without actually knowing anything in depth. Next time save yourself silly keystrokes and read a bit more about what you are talking about before embarrassing yourself.

Hi Angel,Let me try to help you, first by defending my self on you point "without actually knowing anything in depth". I assume you can right click google my name, second link is to wiki.apache.org/struts/StrutsBooks - where you can see that I wrote the first book on Struts 1 in 2001 - the book is now free and linked there, you can read it, some 20 books followed. (And a glance you can see in 2003 I won trainer of the year by JDJ). So I say I have in depth expertise on the topic, yes?

On the topic of a non Java language, ie Node.js, I find it obvious that polyglot programmer is superior. You can learn a lot by mastering in practice another lang. You can learn that node.js uses a reactor pattern and has speed due to avoiding locks. (ex: what is faster, HashTable or HashMap, right) and lots written on the topic, most acknowledged programmers (ex: author of SQLLite) on concurrency. If you do try polyglot (ie non jvm) with Node, start by comparing npm(node) vs Maven(a popular jvm package manager). Or talking to DB, or being close to browser, or compare Socket.IO real-time push. It may help you that Rod Johnston creator of Spring is no longer doing Spring, but is working on Node framework called Meteor. (and creator of Struts left to do Ruby, it's not a bad choice).

For Action, I use and recommend Hasher.js, it works similar to Struts action that you seem to be familiar with, and it should be easy to pick up. Or you can look at Matt Raible's slides, he has some MVC recommendations.

Good luck, Vicps: Also Google - bikeshedding - and click on first link, it will help you.