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.