I am a long time Java developer who has spent the last few years 'in the weeds' in code
which is definitely in the business logic realm and not the front end. The latest is delegate
code that feeds a Flex front-end.
I'm now starting a new project (personal, with enterprise-y intentions) and I started
looking around for a framework. In years past I had done quite a lot of struts development
and didn't actually hate it (as it appears I should ;) ). Once I pulled my head up
and looked around I find that I've missed quite a bit. Spring mainly. So, I decided
to start learning Spring MVC for the web tier. Spring seems a bit daunting I must
My question is how happy folks are generally with Spring MVC? Also what are
other bulletproof frameworks?
There is no bulletproof framework. They all have their good and they all have their bad. Personally, I dig on Grails for most everything. But everyone has their opinion. This kind of question gets asked a lot and the answers are generally the same. Try a few out to find out what you dig on the most.
As Gregg said, you won't come around to try a few frameworks on your own.
Matt Raible comparision of a few webframeworks might be interesting for you, you can find a few presentations by him under http://raibledesigns.com/rd/page/publications (even though some might be outdated by now).
If you are interested in my personal opinion: I think Spring MVC sucked! Especially the documentation. I liked Struts way more. At the moment I'm in love with Apache Wicket (once I get my head around the component-based approach instead of the page-oriented one, which is used by Spring MVC and Struts).
Just my 2 cents.
The two previous speakers are right, there is no BEST web framework. So it is no surprise that I have another opinion than the other two guys :-)
Also it depends on the requirements and specific scenario for your new web application. Here are my proposals:
1) If you need a CRUD-application, use a CRUD-framework (e.g. the ROMA meta framework for JAVA or Grails if you want to use a modern JVM language).
Also if you need a "quick and dirty" solution for an internal application, these frameworks are excellent.
2) If you want to develope in JAVA almost exclusively (and not use a lot of HTML, CSS and XML) then use GWT. It is easy to learn and offers a rich user interface at the client side (because the whole application is loaded when starting it). Good GUI builder are available (e.g. the commercial GWT Designer).
3) If you want to create a real RIA with lots of great presentation (e.g. animations), then use a RIA-framework (Flex or Silverlight). Mature GUI builders are available. But in addition, you have to learn a new language :-(
4) If you want to create a really large enterprise application or portal software, there is no other option than JSF - because it is standards-based, widely-used, Portlet-Bridge-Standard and has a lot of addons (ICEFaces, PrimeFaces, CaptainCasa and so on).
And some frameworks I would not use at the moment:
A) I would not use SpringMVC or Struts, I prefer other "modern" component-based frameworks - these two are "old-style", i.e. page-oriented.
B) I would not use Wicket, because I think it is difficult to read and maintain the programming model of Wicketl (e.g. the Swing-like inner classes).
C) I would not use Tapestry 5, although it is easy to learn - but I do not like that the current version 5 is not compatible to version 4 which is not compatible to version 3. So what will happen to version 6? :-(
D) I would not use Lift (yet), because it is not as mature as Grails (bad documentation, some strange concepts). But I really would like to develop a web application for a customer in Scala :-)
E) I would not use ZK because I do not see a use case, where I should use ZK instead of GWT.
F) I would not use JavaFX (yet) for RIAs, because it is not as mature as Flex or Silverlight (available components, community, tool support). I hope this situation will change in one or two years...
Again: Only my subjective opinions! But of course, you are welcome to comment and critisize them... :-)