Matt RaibleMatt Raible is a Web Developer and Java Champion. Connect with him on LinkedIn.

The Angular Mini-Book The Angular Mini-Book is a guide to getting started with Angular. You'll learn how to develop a bare-bones application, test it, and deploy it. Then you'll move on to adding Bootstrap, Angular Material, continuous integration, and authentication.

Spring Boot is a popular framework for building REST APIs. You'll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.

For book updates, follow @angular_book on Twitter.

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: Angular, Bootstrap, and Spring Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.

This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.

For book updates, follow @jhipster-book on Twitter.

10+ YEARS


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.

RE: What Web Application framework should you use?

Tim O'Brien has an interesting post titled What Web Application framework should you use?. The first thing I noticed about this post is the permalink. It looks like he started with "Isn't Rails supposed to change...", which makes me wonder what the rest of the title was. In this post, he rags on Java Web Frameworks and the lack of a clear path for choosing one. He ends up predicting that many will stick with Struts 1.x (poor bastards) and those that aren't tied to Java should move to Rails. I don't have a problem with folks moving to Rails, but I would like to comment on the Java Web Framework space and Tim's comments.

He says:

Prediction: The confusion over what is happening over at Struts is going to discourage people from continuing to use it. The Struts team did the right thing in recognizing that Struts 1.x was a dead-end, but that project needs a single public message. Is it Struts Action or is it Struts Faces? Or is it two frameworks capitalizing on the Struts brand name?

I think what is going on in the Struts project is definitely two frameworks capitalizing on a brand name. That was a concious choice on the project's part when they chose to start creating sub-projects. The interesting thing about Struts Shale is it's largely a prototype for JSF 2.0. Furthermore, it was rejected by many Struts developers as becoming Struts 2.0. Why? Because JSF sucks. Especially when used with JSP - which is what most folks are doing.

JSF continues to be the most over-hyped under-used framework in Javaland. If you read the blogs of first-time users, you'll find many complaints and issues on how things work. Granted, most of these problems are with JSP and the implementation, but still. If I were in charge of JSF, I'd dump JSP altogether, bundle Facelets with it and allow more flexible page navigation (including controller-to-page). Don't get me wrong, I like the ideas behind JSF, I just don't like the implementation (or the fact I have to wait years for things to be fixed in the spec).

That being said, I've yet to meet an unhappy WebWork fan. If you find someone that still likes Struts, ask them if they've used WebWork. Chances are they'll say no. As far as Tapestry is concerned, the learning curve is too high. It's been rejected time and time again by my clients because of the learning curve. Are they going to fix this? Yep, they're going to re-write the whole damn thing - again! Every major point release of Tapestry throws backwards-compatibility out the window. Furthermore, I've heard once you get over the learning curve, it's a joy to work with. I've also met people at conferences that've used it over a year and say they're still struggling with its concepts.

Spring MVC - I wish I had bad things to say about it, but I don't. It (obviously) has the best Spring integration, but I've found WebWork much more pleasurable to work with. Sure, Spring has a ThrowawayController, but with a name like that, you can tell it's a second-class citizen.

Inspired by Tim's post, here's my prediction:

Struts Action 2 will be the best choice for developing Java-based web frameworks. Not only does it support JSF, but it's easy to learn, test and use. Furthermore, it seems to be the most often used framework in major software products and web sites.

How's that for a clear message? Struts Action 2 is the shiznit, now let's get back to developing applications.

Disclaimer: This is my opinion with a lot of stuff thrown in to get folks riled up. I've never put a JSF, Tapestry or Spring MVC application into production (except for AppFuse of course), so most of my opinions are likely without foundation. In wonder how many applications Mr. O'Brien has put into production with these frameworks?

Posted in Java at Jun 20 2006, 08:32:41 AM MDT 57 Comments
Comments:

Bingo, the successor to Struts 1.x (which, honestly, I see many sticking with these days) is Struts Action 2. But, I really convinced that a lot of the confusion in this space comes from mixed messages from the Struts group. C'mon is it Struts Shale or Struts Action, IMO, it can't be both...

JSF has some great ideas. Hightower's piece really frames the concepts well, but as soon as you start trying to put JSF into practice you either end up in the tar pit that is Sun's Java Studio Creator or in MyFaces, which is usable but still has a steep learning curve.

Shale to me seemed like a premature distraction from Struts 1.x - I really did seem like Craig started work on Shale almost in a vacuum.

But, it's funny, mention Rails anywhere and you get some really riled up Java developers. :-)

Posted by Tim O'Brien on June 20, 2006 at 02:59 PM MDT #

Matt, thank you for finally taking a definitive stance on this issue and giving us your opinion without holding anything back. Your contributions with appfuse/equinox in my opinion make your opinion on web frameworks one of the most valuable in the Java community. That being said, I do find it a bit amusing that you support all those other web frameworks in appfuse when you obviously dislike them.

One small question though. Webwork2 is basically dead as the team has moved onto the Struts Action project. Does it not worry you that WW2 won't evolve anymore and migration path to Struts Action is probably non-existent?

Posted by Wayland Chan on June 20, 2006 at 03:13 PM MDT #

Great post Matt. My only complaint is that I *wish* that Tapestry and JSF were not referred to as the only Java component web frameworks. Like you said, Tapestry is being constantly rewritten, and I have yet to fully get into the Tapestry "groove". JSF is pure crap unless you have some fancy IDE to autogenerate thousands of lines of XML.

But Wicket has surpassed every Java component framework I've tried. So much cleaner than Tapestry with a definate OO feel to it. It's very similar to Swing programming, which in my mind is a good thing.

It's a shame you don't drop Tapestry and incorporate Wicket into AppFuse. Tapestry may be the "leading" component framework right now, but I have yet to see a newcommer just "pick up" Tapestry without a whole lot of training. This kindof defeats the whole appfuse purpose of getting up and going as quickly as possible. Wicket seriously took me ten minutes before I was completely productive, and I haven't turned back since.

http://jroller.com/page/wireframe?entry=web_development_done_right

Posted by Ryan Sonnek on June 20, 2006 at 03:23 PM MDT #

> Webwork2 is basically dead as the team has moved onto the Struts Action project. Does it not worry you that WW2 won't evolve anymore and migration path to Struts Action is probably non-existent?

No, this doesn't worry me at all. WW2 is Struts Action 2, so it will continue to evolve. With developers like Don, Ted, Patrick and Crazy Bob - I'm not at all worried about this project's ability to improve.

As far as a migration path, it should be as simple as changing a few filenames and package names. I plan to start replacing AppFuse's WebWork version with SA2 in the next few weeks. Then I'll start showing others how to do it.

Posted by Matt Raible on June 20, 2006 at 03:29 PM MDT #

Great post Matt. Its about time someone starts to take a stand on these kind of issues.

My problem with the whole Java framework discussion is that JSF is now the official specification for J2EE Web frameworks. This seems wrong, since we are seeing that there a number of good approaches to writing a component based framework. It also creates a FUD scenario where teams select JSF, because it is the "standard" and will have better "vendor support".

The other problem, IMO, is that an action based framework is the more appropriate choice for many applications. I would also go as far to argue that an action based framework should be used if the team contains multiple beginner level developers, while component based frameworks are better left to very experienced development teams. A good direction for this discussion to go would be to talk about the distinction between action and component based frameworks and the advantages to using one over the other.

I think it will be interesting to see if Ruby has these kind of issues in a year or so and how the Ruby development community deals with them.

Posted by Rob Breidecker on June 20, 2006 at 04:49 PM MDT #

> It also creates a FUD scenario where teams select JSF, because it is the "standard" and will have better "vendor support".

I absolutely agree with this. The funny thing about JSF vs. Tapestry vs. WebWork (or XXX web framework) is you're likely to hire the same hot shots to help you implement an application with it. Who are these "hot shots"? Independent consultants who have experience putting a real application into production using the technology.

You're not going to hire Oracle, IBM or Sun (or JBoss for that matter) to help you learn and use JSF - you're going to hire somebody that's done it. So from a hiring perspective, there's lot of JSF positions, but I doubt there's a lot of truly experienced developers out there. Except for Hightower of course, but I think he likes banging his head against the wall. ;-)

Posted by Matt Raible on June 20, 2006 at 05:01 PM MDT #

Damn, I don't get a mention in the developer's list? ;-) Thanks for the vote of confidence in SAF though...

Posted by Jason Carreira on June 20, 2006 at 05:05 PM MDT #

MATT!!!!! ;) Seam is where it's at!!! Awesome, Awesome, Awesome, Awesome. Hey, did I mention it was awesome? Trully reuseable components, finally, that I can use on the web end and as an SOA without duplicated effort! If I was a songwriter, I'd write a song about Seam right now. W00t! ;)

Posted by Dan Hinojosa on June 20, 2006 at 05:59 PM MDT #

If you want to use a simple, event-driven framework, try Click http://click.sourceforge.net. It is simple and very easy to learn. Takes concepts from Tapestry and just makes it easy.

Posted by John Christopher on June 20, 2006 at 06:21 PM MDT #

> If I were in charge of JSF, I'd dump JSP altogether ...

If I were in charge of JSF, I would have built it as JSP 2.0 from the beginning. Seems that JSP & JSF will finally unite in JSP 2.1 spec, though the spec still tries to kick JSP out of the nest by limiting EL features for pure JSP pages.

If you are/were Windows developer, the example is right here: real-mode Win16 -> protected-mode Win16 -> Win16 + Win32s -> Win32 + DOS7 extensions -> pure Win32 -> Win32 + .Net -> ...

A developer of a Windows app can still build a Win16 app, deploy it on WinXP and it will work. _This_ is an example how to ensure API compatibility, how to keep users while improving and extending the API. JSF did not go this path initially. Well, I guess Craig M was not 100% sure that JSF would be accepted as default J2EE view technology when he started developing JSF...

> I like the ideas behind JSF, I just don't like the implementation

The ideas behind JSF are collectivelly known as ASP.NET

> Because JSF sucks.

Is it actually your opinion, or you just quoting a link? ;-)

> Struts Action 2 will be the best choice for developing
> Java-based web frameworks. Not only does it support JSF,
> but it's easy to learn, test and use.

http://marc.theaimsgroup.com/?l=struts-dev&m=115082440032215&w=2

Rob Breidecker:
> I would also go as far to argue that an action based framework
> should be used if the team contains multiple beginner level
> developers, while component based frameworks are better left
> to very experienced development teams.

I would argue exactly the opposite, especially if there are easy-to-use GUI tools and the build process is simple.

Posted by Michael Jouravlev on June 20, 2006 at 09:05 PM MDT #

"I would argue exactly the opposite, especially if there are easy-to-use GUI tools and the build process is simple. " Yeah, but there aren't, so his point is very valid. I also question the design of any framework that requires a fancy GUI tool to make it not suck.

Posted by Sam on June 20, 2006 at 09:23 PM MDT #

"I also question the design of any framework that requires a fancy GUI tool to make it not suck." Visual Basic? Borland Delphi? ASP.NET?

Posted by Michael Jouravlev on June 20, 2006 at 09:42 PM MDT #

Hi, great post Matt, yes, everybody sould try Click! I am moving from WW2 to Click. Even the more inexperienced trainee can learn click in few hours... I have created custom componentes with click, and is just awesome how much html click generates automatically for me :-) The event listeners makes your life easier, and it also uses convention over configuration. And click is very fast. It is not just a new web framework, it exists a long time (see the roadmap)... "Webapp framework blog" - Comparison of J2EE web application frameworks http://rlecheta.com.br/viewBlog.htm

Posted by Ricardo on June 21, 2006 at 12:29 AM MDT #

How can one struggle for years with Tapestry, Matt? I guess if one never wrote a line of Tapestry code... The big Tapestry learning curve is a complete myth. We hired a high-school graduate and within two-three weeks he was creating Tapestry components. You know, Matt, you've been receiving very kind support on Tapestry mailing list as well... Serge

Posted by Serge Dubov on June 21, 2006 at 12:32 AM MDT #

We found http://click.sourceforge.net/

Click passes our 10-minutes test. A new developer, student, able to use the framework within 10-minutes of reading http://click.sourceforge.net/

Why we like it:

  • Simple and intuitive web presentation model
  • Click is JSP and MVC Free; it uses Controls that are far more productive rendering tools with integrated html and JavaScript as needed
  • It uses Velocity

Worth looking at a different and simpler J2EE web application framework

Posted by J.F. Zarama on June 21, 2006 at 01:31 AM MDT #

Matt, I think your criticism of Tapestry having too steep a learning curve is a bit shallow. It does take some time to become proficient in Tapestry, but it is more than justifiable based on the unique capabilities of the framework. On balance, I have found the learning curve breaks even after a few weeks, and the returns grow from there. Tapestry sets a very high ceiling as to what can be accomplished. We have converted a sizable application from Struts to Tapestry and are seeing significant return on our invesment in both time and developer morale.

Posted by Ben on June 21, 2006 at 03:16 AM MDT #

The practice in which each major revision of Tapestry is not backward compatible is simply not something I want to deal with after making the investment to learn it. Even the documentation on the site is a mish-mash of version 3 and 4 docs. The authoratative book, Tapestry in Action, written by Howard Lewis-Ship (Tapestry/Hivemind mastermind) is outdated as it is for Tapestry 3. Hivemind, no comment but you should probably learn this if you want to realize Tapestry's full potential. Another mountain to climb on that learning curve. Even if you are willing to deal with all these obstacles, is it a wonder that the adoption rate is slow when the development team ostricizes it's user base with non-backward compatible updates? I learned Struts back before 1.0, I will admit I may not know all the latest features in Struts 1.2 but I can still develop in it. There is alot of value in that when you are trying to grow a user community.

Posted by Wayland Chan on June 21, 2006 at 04:32 AM MDT #

I worked with Tapestry for a while and built a couple of small apps in it. The problem I had with it was the page rewind thing was just too wacky and the documentation was not particulary up to par. I think tapestry tries to mix too much stuff in with the view. For instance the "for" tag in the template language interating over components creating multiple seperate instances of them is not the most elegant thing in the world. I like how JSF builds these dynamic components in Java code which seems to make more sense. Hivemind is not that well documented either and led to a lot of confusion. I also find it much easier to build wireframes out without code in JSF than in Tapestry. I guess the final nail in the coffin was the lack of interest at JavaOne and hearing from many developers at the conference who said that they were quite happy with JSF.

So I ate the JSF burritto and I don't see what everybody's problem with JSF is? It's a lot of work to understand it but that's because it's trying to do a lot more. I would recommend "Java Server Faces In Action" if you really want to "get it" and read the whole thing otherwise you'll fight the way JSF wants you to do things and have a hard time.

My biggest problem with JSF right now is that although it is good for web applications (where one logs in and manipulates and creates data), it is still not a great fit for Web Sites (where there is a lot of casual browsing going on) mostly because of the POST only nature and complex maintenance of the user's current view state. This makes it difficult to do view level caching, search engine optimization, have permalinks and otherwise deal with random navigation. I am trying to figure out a good web framework for this task and I want something less primitive than struts. Maybe I'll try the Spring Framework as it seems to be the lesser of the evils right now.

Posted by Justin on June 21, 2006 at 06:02 AM MDT #

I did not see stripes mentionned in this thread (it is mentionned in the original post from Tim and in the comments over there). You should check it out: it is tight, clean, well documented, and easy to learn.

The zero-configuration programming model is a joy, and should you try it, I bet you will enjoy a lot of these "wow, this is too easy!" moments. I still do, which is a testament to how good Stripes is and how "ancient" (i.e. "crippled") Struts is.

imho, it beats all the other contenders in the pure mvc space: struts, webwork2 ("I coulda been a contender" but missed the opportunity, harder to learn and use), spring mvc ("with great power comes...lots of XML!"), tapestry (too alien, to steep learning curve).
The others are pale imitators (strecks, vraptor) or not radical enough. I looked at Click's documentation and I did not experience the "wow!" feeling I had when I looked at Stripes' the first time.
When it comes to Struts2, well...Who understands the story there? I certainly don't: is it going to be Shale, Struts 2, Struts Action, WebStruts or StrutsWork ? ;-)

As for JSF, it is not worth the effort until 1.2 and facelets come out and fix it (hopefully...). As it stands now, you need to bring in Seam to make it productive - not exactly lightweight...

I urge everyone to take a good look at Stripes

Posted by Renaud Bruyeron on June 21, 2006 at 07:14 AM MDT #

Simply put the answer is somehow very simple: "same as till now. N (though, slightly changing) Java web frameworks, all trying to solve more or less the same problem". Who is gonna win from this? IMO, all consultants out there that will have more and more apps to fix and make 'em usable. Their life will be hard, because they will need to know more frameworks, but this will keep their incomes at a high level. I think, and once again this is just my opinion, for Java web frameworks is too late to unify. There is already too much effort behind all of them.

Another WebWork/SAF developer (that didn't make it to the list ;-),

./alex
--
.w( the_mindstorm )p.

Posted by Alex Popescu on June 21, 2006 at 03:01 PM MDT #

I'm definitely in the Stripes camp. I've been using Struts for years and never really liked it. I've tried JSF on a few occasions and abolutely loathe it. After reading the Stripes docs I simply couldn't pass it up. It is so simple, so elegant, and so straight-forward that after a little testing I immediately adopted it as my framework of choice. The other Java developers at my company had the same reaction and are now using it in their projects, too. If you're looking for a good framework, you really should check out Stripes.

Posted by Ben Gunter on June 21, 2006 at 03:16 PM MDT #

I have to agree whole heartedly with the comments given regarding stripes. I have done work with most of the main stream frameworks out there today. After much research and usage with struts, webwork, spring, tapestry, rails, and jsf, the only one that even piqued my interest was webwork. I ended up giong with stripes due to the fact that it is sooooo much simpler than anything out there. It has all the functionality and power I need and all programmers can understand it and be writing code in a couple hours not to mention it was a piece of cake to convert all of that old struts code. If you haven't given it a look, you should at least do that before you think "Just Another Web Framework". Make web coding fun and simple again. http://stripes.mc4j.org/confluence/display/stripes/Home

Posted by Nic Holbrook on June 21, 2006 at 03:49 PM MDT #

I have two projects on Tapestry3 in production. Tapestry is an excelent framework. Yes, it's little more complicated than Struts for simple applications, but very good for complex applications with many components.

Posted by Brychta on June 21, 2006 at 06:00 PM MDT #

We shall see my chick-a-dees...The documentation is currently more than a little lacking, but as with all things this too shall pass. All of my energy is currently focused on more important items (to myself), but when we release whatever those are in the next couple weeks I'll turn my attentions to these "learning curve" issues. I like good challenge :)

Posted by Jesse Kuhnert on June 21, 2006 at 11:23 PM MDT #

I am also among the Stripes camp after having used Struts for years, and heard stories about Spring MVC usages. The transition from Struts to Stripes in a corporation is also straight forward and cost-effective. It is by far the simplest but powerful framework that are not commonly seen in the Java world. I have also written up possible ways of integrating Stripes with other existing frameworks to simplify Java web-based application development.

Posted by Ray Tsang on June 22, 2006 at 01:22 AM MDT #

I've been extremely impressed with what I've seen of Stripes. I've spent some time converting an app from Spring MVC to Stripes and the reduction in the codebase & the increase in readability is remarkable. It also integrates very happily with a Spring app framework (my app now uses Spring & Hibernate with Stripes for the presentation layer). It's great to be able to properly leverage the power of Java 5 annotations to make the code simpler and avoid the XML config soup that other frameworks tend to lead you into.

Posted by Rob Fletcher on June 22, 2006 at 08:27 AM MDT #

I havn't really wanted to get involved with this debate as it just sounds silly if the framework creator is posting in the actual threads. Still, since this post is outside of that main one I guess there is no harm .. I do encourage people to give Grails a go (http://grails.org) we'd certainly appreciate the feedback if anything else. I would particularily be interested in what Matt, Jason and Patrick think about it given their experience with JVM-based frameworks. PS I recommend the 0.2 snapshots if you do try!

Posted by Graeme Rocher on June 22, 2006 at 03:56 PM MDT #

[Trackback] There are a couple great blog posts summing up the state of Java Web Frameworks right now in the Summer of 2006. First, let me say that I believe things will be drasticly different by this time next year. I...

Posted by Erik's... Hmm... on June 22, 2006 at 07:32 PM MDT #

A short entry about Stripes, provoked by so many comments in here: http://themindstorms.blogspot.com/2006/06/stripes-sounds-cool.html. ./alex
--
.w( the_mindstorm )p.
---
(http://themindstorms.blogspot.com)

Posted by Alexandru Popescu on June 23, 2006 at 10:38 AM MDT #

I am tired of trying to keep up of all these so called latest frameworks. Let's see. We have Struts, Shale, seam, stripes and Spring. Then ruby, rail, grail and JSF vs Tapestry vs WebWork The next framework shud be called Strike as new java developer looking to learn a framework shud simple strike until a winner emerges

Posted by j2ee_Dodo on June 26, 2006 at 08:29 AM MDT #

The other million-dollar question few of these frameworks seem to address clearly is - what about ajax?

Ajax support in frameworks seems to break down into two camps:

  1. "We have fabulous support for ajax - look, a component can update itself dynamically! But your whole architecture must still be based on the http request/response mechanism, that's the way it's always been and always will be", or:
  2. "Build a gui spring-like website with no javascript knowledge, and it will magically just work like any other gui tool. Scalability? Transparency? Simplicity? What are those?"

I'm still waiting for a web framework that lets you build applications in a sensible ajax style - using ajax calls for the majority of user interaction, and only making a new synchronous HTTP requests where you need to go to a different functional part of the site. But still with the simplicity and transparency of a typical java web framework, rather than an opaque toolkit that says "trust me".

Posted by Korny on June 27, 2006 at 01:41 AM MDT #

oops, "swing-like" not "spring-like" :)

Posted by Korny on June 27, 2006 at 01:43 AM MDT #

Korny: have a look at Click. Click uses Copntrols as self-contained rendering objects that offer a good vehicle to integrate AJAX in a simple and effective manner. http://www.sunvolt.com/examples/ http://click.sourceforge.net/

Posted by J.F. Zarama on June 27, 2006 at 02:11 AM MDT #

ThinWire is pure Server-Side Java framework that you might want to look at. It?s open-source under the GPL and will soon be listed on sourceforge. In any case, some of its features are:
  • Familiar event-driven GUI programming model
  • Reconnects the flow of logic, no request / response
  • Maintains state naturally via variables, not via session
  • Develop exclusively in server-side language only
  • Rich Set of Complex Widget Components
  • ThinWire downloads once, just over 100K
  • Zero footprint client, no applets, activeX controls or browser plug-ins of any kind!
  • All Major Browsers Supported: Firefox 1, Opera 8, Safari 2, IE6
http://www.thinwire.com

P.S. Korny: You don't have to "trust us"... download the source and take a look for yourself. Plus, ThinWire is used in multiple large scale applications, one with over 1000+ users.

Posted by Joshua Gertzen on June 29, 2006 at 09:11 PM MDT #

Korny: I looked at the thinwire and demo looks pretty neat. What is missing in documentation is thinwire architecture and user guide specially on session management. I would like to use thin wire as presentation layer and integrate it with spring services and acegi based security. How about porting appfuse with thinwire view? I believe this will give good traction to thinwire

Posted by Anil Sharma on August 17, 2006 at 08:09 AM MDT #

Great post Matt. I've been using Spring MVC with Spring Web Flow recently with large corporate customer. The first app was painful in terms of wiring everything together... but now I find it very flexible and powerful. Definitely worth a look for anything moderately complex.

Posted by Greg Ritchie on September 27, 2006 at 05:43 PM MDT #

Every time I read "generates code", I don't care if it's "generates just for you" or what. I hate generated code. I think generated code is a cop out for when the developer didn't really know how to solve a problem, and so instead made a tool to spit out a bunch of stuff.

Of course there are some exceptions (compilers). But most of the time I've seen code generated, it's because a person really didn't know how to solve it in any other way.

For example, generating getters and setters in Java vs. "free" getters and setters you get in Ruby. Or generating code for OR mapping, again, junk, in my opinion.

The only time it makes sense to generate code is when:

1. You are jumping a huge level of 10 of abstraction higher. For example, C generates ASM. I've used both, and C is miles and miles easier and higher level to write than ASM.

2. You will NEVER *return* back to the level of generated code abstraction. This means, once I use C, I pretty much never ever touch ASM again. In fact, many many people don't even know ASM, don't need to know it, and actually, could even *hurt* their ability to program effectively in higher level languages by knowing it.

This is never the case in web frameworks. For example, no matter how OO you get in your web framework, HTML+Javascript+CSS is not the same nice set of primitives as is ASM. You always have to go back to the level of HTML and CSS and Javascript, no matter what you say, no matter who you are.

Also, there is no significant jump in level of abstraction either. So the jump in level of abstraction is low, and the return back to the original level is pretty much guaranteed.

That means generation is flat out a *wrong* way to solve any problem in web development *right now*.

So, to all you generating fools, take this warning. :) And don't take it too seriously either. Don't burst a vein. It's just my 2c.

Posted by Leo on October 20, 2006 at 11:45 PM MDT #

What about Echo2 or alike? Any one using it with success? Comments?

Posted by Demián on November 21, 2006 at 05:28 PM MST #

I looked at the following frameworks. i was very interested in Tapestry until I stumbled on Wicket. Wicket is also component based but IMO simpler to use. Next came Click framework even simpler. Next I looked at Java Swing like AJAX frameworks which started at GWT (Google Web Toolkit) followed by Echo2. Finally we discovered Thinwire that was not as mature as Echo2 but has performance advantages and shows a lot of promise. Strategically GWT could be the wiser choice because of Google backing. Echo2 has community support and Thinwire is still very new. Current choice :-) is Thinwire.

Posted by Pieter van Onselen on February 02, 2007 at 07:45 AM MST #

[Trackback] up

Posted by yeth on April 03, 2007 at 04:26 PM MDT #

I submit an additional vote for Click: http://click.sourceforge.net. I had been set on Wicket, then WingS, but I finally found Click. It's what I'm going with. It is simple and fabulous and not cumbersome like Wicket. In Wicket you have to create your form objects in Java and also lay them out manually in your html. Click generates your HTML for you for about 40 different types of components - and for other basic layout you can use Velocity. Click is page based and component based. Click rules if you are looking for a page based and component based framework.

Posted by Philip Weaver on April 11, 2007 at 12:07 AM MDT #

Leo, Look. OK. Click renders html - forget about generates. The rendering can be overriden if needed. Java is an object oriented programming language.

Posted by 72.177.51.203 on April 11, 2007 at 12:10 AM MDT #

I used to work with struts + spring + hibernate, and I like this combination most, its give easy , fast and understandable implementation.

Posted by Renish Ladani on June 11, 2007 at 07:06 AM MDT #

Matt, thanks for your post, I read it a while back, and shame to me, didn't understand the issues at first. I started my career, in Java / JSP some 5 years ago, and switched to ASP .Net two years ago.

I had the occasion to go back to Java for my new job, so I decided to give it a try at JSF, hoping that the best from ASP world would be there. What a disillusionment.... Yes, some things are in there, and it's definitely easier to learn and use than Struts 1.2, but... gosh, it sucks. JSF and HTML are COMPLETELY incompatible: I'm not joking, this is infamous. You just can't take a layout in html/jsp, and build a component with it - this means that you won't be able to include a web designer's work at all - this is fixed in JSP 2.1/JSF 1.2, and thats my luck, i haven't found an implementation that works, almost one year after your post. I've been stuck on a simple - simple ! the same things happen in the whole Java platform, their developers apparently don't know what that word means - a simple html fieldset/legend usage... hours later, dozens of blogs visited (some really good ones), no real answer, just hacks.

And OK, it's a component oriented framework, but come on, you really need lots of work to get something to work. That's not the idea of the 'component' part for such frameworks... I mean, the whole navigation rules seem already redundant or boring for ASP .Net developers, but trying to compare the ugly XML syntax + Java properties in JSF versus C# separated classes... this is sad, sad. And let's not talk about the visual support in IDEs such as Eclipse, Creator, Netbeans... first of all, no visual support for Eclipse at all (unless you use a Netbeans/Creator customized plugin, as i read guys at MyEclipse did... lol). The problem with support from Netbeans 6/Creator is, that as a consequence from the XML/XHMLT syntax, there's no tolerance for mistakes: you try to edit some html, and bang, you've lost hours of work, and of course, as I said, you can't ever edit your former JSP applications.

Some light at the end of the tunnel, oracle asf really has some nice components... that you can't use outside their server. Oh, I tried to mix tobago/myfaces and the RI... won't work either. In fact, all implementations are all so 'standard', that they won't work together ! What's the meaning of that word, 'standard', anyways?

I'm pissed, and maybe I'm unfair, but i would have never thought to be brought to claim 'Struts was always better than something'.

Posted by Felipe Cardozo on June 16, 2007 at 03:14 AM MDT #

sad to find that tapestry is not good enough for us to use, It's true that tapestry is hard to learn. But,IMO,after tapestry 5.0 release,tapestry is good enough for us to learn.

Posted by Gavin on June 27, 2007 at 07:40 AM MDT #

I liked Echo2. Don't know why it is not getting as popular as others.

Posted by Nitin Khare on July 25, 2007 at 05:15 PM MDT #

Hello there! may I join your discussion. I want to share some experience on learning JSF framework. After some advice from the forum and some books, they said that JSF1.2 will be future framework. So I started to learn JSF on my own. Before, I build my web app using pure jsp2.0 and servlet without tagging with struts,hibernate and etc. When I want to learn java web framework, they said the best is JSF. I started building web component using html component tags and renderer. For the first time I think it will be a breeze for me, however things are getting to steep for me to adapt. Huge JSF API intertwined together upon my simple project, really make me tired. More I learn and more I need to learn. Plus JSF is somewhat restrict me for making complex layout. They force me to going deeper in JSF API for making such customization. damn,.. its really tires me

Posted by kiddies on August 24, 2007 at 07:55 AM MDT #

Nice informative blog,agree most of the point but i dont like that Tapestry and JSF were not referred to as the only Java component web frameworks.To make other code simpleis great to give proper leverage the power of jave 5. http://www.websites-design.com.au/

Posted by Steve M. on September 13, 2007 at 10:32 AM MDT #

My what a difference a year makes (or not), which is about the time I started looking at frameworks. Interesting that one year later things haven't really moved on much. To anyone looking at JSF, at the very least look at JSF & Facelets since it resolve the JSP problems. Why anyone complains about JSF being complex, I have no idea, I picked it up in a matter of weeks as a new web developer. Currently considering Seam, but it feels like it sends you down too many dead ends with no way out for particular problems. My future career is a parameter, which rules out some of the more obscure frameworks which I guess leaves the likes of Seam, Spring, JSF, Struts and hibernate which is exactly the same place I was when I was looking last year.

Posted by Delphi's Ghost on October 03, 2007 at 10:01 PM MDT #

l

Posted by 198.175.166.202 on October 10, 2007 at 12:03 PM MDT #

Hi I like the discussions above, they were quite informative. In particular, the reference to CLICK and THINWIRE. I went out to find more information about CLICK and thinwire. they seem to be light indeed. after looking at the various examples on both sites, to me CLICK had that "WOW !!!!" factor. I am going to use CLICK from now on. I think it is the lightest and easiest framework to use to date. I've used some struts and tapestry over the years, and our company is currently evaluating JSF. However I am going to recommend that we go with CLICK. sometimes it's really amazing that a small group of people can come up with such a clever/simple approach (v/s the heavy/clumsy/bloated/unwieldy frameworks that SUN keeps creating. ) If that's a reflection of the SUN company's culture, it's no wonder that their company are doing so badly, judging by their financial performance , quarter after quarter. thanks again guys.

Posted by toto on November 03, 2007 at 10:10 PM MDT #

JSF has definitely changed very rapidly over the last year and, in my opinion, has all of the elements of being a technology that will explode with features (even more than now) for a few reasons:

1.) There are MANY, MANY JSF frameworks out there with all sorts of cool 'built in' AJAX widgets that are simple to use and have both professional and open support. You can get an idea of all of the available JSF frameworks by looking at this site: http://www.jsfmatrix.net/

2.) With the use of facelets & JSF, you can now combine those frameworks into a consolidated solution. In fact, many of the JSF frameworks now directly support each other in their test cases.

3.) Unlike other frameworks, like Tapestry, Webwork, etc, JSF has created a environment of competition. You have IceFaces, Richfaces, ADF, Webgalileo and a host of other JSF component makers pushing to make their widgets better than the others. This competition in the JSF space and has led to some really nice looking UIs. And as a developer, you do not have to choose one. Pick and choose your widgets from each for your solution. (some limitations)

4.) There are efforts to 'wrap' common frameworks like Yahoo UI! into JSF components. This will continue and will make it so that a developer will not need to learn all of the other frameworks out there, they can simply integrate the new JSF libraries.

I am a big fan of Rails, but always seem to run into issues when you want specialized functionality. For instance, we needed a treetable with inplace ajax editing and pagination. Have fun with that one. (although it may exist now). In JSF, there are at least 4 different frameworks which offer such functionality built in.

What I think is missing, and I kinda wanted to keep this on the "down-low" so I could create a library and get all the fame (but I have no time) is to create not only cool widgets, but functioning modules that are as simple as jsf tags.

I would like to see something like a <framework:login> tag that displays a username/password dialog with a button and has all of the supporting pieces required to be a fully functioning login module. Have not found that sort of thing yet. Once we start to go down that path and beyond simple cool widgets, thats when JSF be a huge player in this space.

Thats my two cents,
Mark

Posted by Mark Ricard on December 01, 2007 at 09:22 PM MST #

It is interesting all of the various frameworks that people are using. The common thread seems to be the grass is always greener if I use framework XYZ. Since it is new it must be better than my current framework. We have been using Apple's WebObjects since 1997 (it was released in 1995 by NeXT). It is still one of the more advanced and well designed Java frameworks ever built. It incorporates the most mature and capable object relational data access tool (Enterprise Object Framework also originally designed and built by NeXT). WebObjects has undergone continual upgrades, supports AJAX, web services, provides a complete component model with server side events, built in load balancing and multi server deployment and administration, etc.

When we first started developing with WebObjects, Apple charged $50,000/server for deployment licenses. The developer license was $2500/developer. WebObjects is currently distributed for free with all Mac OS DVDs and has freely deployable runtimes on all platforms. We deploy our WebObjects based apps under Tomcat, but they can deploy under any J2EE servlet container or can run as a standalone app using its built in application server. We use Eclipse for our development IDE using a plugin developed by the WebObjects developer community for the component and ORM modeling. We use ANT or Maven for builds just like every other framework.

Just like everything else that Apple has done - it is a well thought out product that is light years ahead of its competition. The basic architecture has been in place from the beginning - before ASP, JSP or Java even existed!!

All of these frameworks will come and go over the next couple of years - the original creators will get bored and move on to the next big thing. Selecting a java framework is a total crap shoot, you have to be prepared to rewrite your apps every couple of years because your current framework has either radically changed or is no longer being supported. Good luck to all of you jumping from ship to ship hoping things are better, as long as you are getting paid by the hour its a great strategy.

Posted by Dov Rosenberg on January 10, 2008 at 01:14 AM MST #

Matt is a psychic and dead on. The little piece below is cut and pasted from his comment on June 20, 2006 (shown up above). It has played out exactly like this, up to and including having to hire Rick and his subcontractors to do the heavy coding on JSF.

----------- > It also creates a FUD scenario where teams select JSF, because it is the "standard" and will have better "vendor support". I absolutely agree with this. The funny thing about JSF vs. Tapestry vs. WebWork (or XXX web framework) is you're likely to hire the same hot shots to help you implement an application with it. Who are these "hot shots"? Independent consultants who have experience putting a real application into production using the technology. You're not going to hire Oracle, IBM or Sun (or JBoss for that matter) to help you learn and use JSF - you're going to hire somebody that's done it. So from a hiring perspective, there's lot of JSF positions, but I doubt there's a lot of truly experienced developers out there. Except for Hightower of course, but I think he likes banging his head against the wall. ;-) Posted by Matt Raible on June 20, 2006 at 11:01 AM MDT

Posted by JSF Convert on January 10, 2008 at 08:24 PM MST #

A useful resource to compare Java web frameworks (Spring, Tapestry, Struts, OpenLaszlo,...) and also PHP, Python, Ruby web frameworks : http://www.therightsoft.com/softwaretechnologies/webframeworks/

Posted by tomjerry on February 11, 2008 at 09:42 PM MST #

My response to this "useful resource" can be found here.

Posted by Matt Raible on February 12, 2008 at 12:50 AM MST #

can i use thinwire in JSF application..is it possible?? i just need the serverside dialog/message implementation of thinwire in my jsf application..how can i do that??

Posted by gantait on October 22, 2008 at 08:31 AM MDT #

Post a Comment:
  • HTML Syntax: Allowed