There are quite a few frameworks (such as Tapestry and web works) which are gaining a lot of momentum in software development; they actually reduce the amount of coding a programmer does significantly and have better separation of logic. what comparative advantage does struts have over these other frameworks.
One huge advantage in my opinion is Struts' ubiquity. Books, learning resources, community resources, etc... are more readily available with Struts. If I'm a manager, I like Struts because it's well accepted, in use on many major applications, and I'll have a much easier time finding developers who already are familiar with Struts.
I think that Jason hit the nail on the head with respect to the two main advantages Struts has: mind share, and what's often referred to as 'network effects,' or a 'value chain,' meaning the implicit value of all the books, articles, blogs, training courses, add-ons, and plugins, etc., as well as a large base of developers who have at least some Struts experience.
From a technological standpoint, I basically view the web app framework world as divided into roughly three camps:
Struts and its direct descendants, such as WebWork and the relevant portions of Spring;
Admittedly I don't have much direct experience with WebWork and the web app framework stuff in Spring, but they appear to me to be modernized versions of Struts that smooth some of its rough edges, and thereby simplify development. What they share in common is a simple architecture that primarily provides a front controller, a navigation mechanism, and a binding mechanism (Struts lags here in that its Converter architecture never really fulfilled its promise). So there's not a lot of meat to their architectures.
JSF has some similarities, but it also defines a sophisticated component model that the others lack. The downside of JSF is that, arguably, it is overengineered. There's a lot of complexity under the covers, though that does buy you increased extensibility. The question is though, how many developers are really going to need/take advantage of that flexibility? That being said, if I had to pick from all the above, I'd lean towards JSF, though I'd take a closer look at Spring before deciding.
Finally, there's WebObjects and Tapestry. WebObjects usually doesn't enter into the discussion because it's not open source, but from my experience it increased developer productivity by a factor of 3 or more (in no small measure because it includes a superb O/R mapping framework, and a sophisticated controller layer in between). Tapestry's architect, Howard Ship, was formerly a WebObjects developer, and that model of development is strongly reflected in the design of his framework.
One of the huge advantages of WebObjects/Tapestry over other web app frameworks is that it models web pages and components of web pages rather than being form-oriented. Another huge advantage is the approach to templating, which relies solely on a simple HTML tag (<WEBOBJECTS name="foo"/>) in WebObjects, or even better, custom HTML attributes in Tapestry, so that there's no scripting code or funky tags in HTML templates.
The downside of Tapestry is that it is reportedly quite large and complex (but then again, it has a lot of features that the other frameworks don't). Also, most Java developers are familiar with the simpler, JSP-oriented approach of the other frameworks, and for some folks apparently have difficulty adapting to a new way of thinking about the problem space.
If I had to choose from among all the available open source frameworks, all things being equal I would probably pick Tapestry, because it offers a more sophisticated model of web development that over time would make a development team far more productive than they would be using the other open source frameworks. Though I haven't used Tapestry, I'm familiar enough with that model from my years doing WebObjects development to be convinced of the fundamental benefits of that approach.
[ April 06, 2005: Message edited by: Jonathan Lehr ] [ April 06, 2005: Message edited by: Jonathan Lehr ]