At least since Java EE 6 everybody is talking about Java Server Faces (JSF). Programming JSF is just nice for developers. But sometimes using JSF for certain types of projects might lead to some issues. As an example I would like to name a customer project which had huge problems with the memory consumption and performance of the application. But you can check this yourself by opening your Glassfish server's admin console with your browser: the admin console is a JSF application available out of the box for configuration of your Glassfish installation. It has a non-trivial UI with many components. I faced performance issues there, but now imagine hundreds or thousands of users would use an application like this (or even a more complex one) frequesntly. Unfortunately in Java development we often tend to the attitude "Memory is always available, performance is not a problem". Of course, JSF has not only drawbacks - there are definitely reasons why projects and developers tend to use JSF more and more.
For my own I can tell I just like JSF - but this is not a reason for forgetting about other technologies and frameworks out there. One of the greatest frameworks I ever came across is Struts 2. Although Glassfish developers might not use Struts 2 (i.e. because they prefer JSF) I have decided to offer tutorials about how to get Struts 2 running on Glassfish. I will also cover some advanced topics like Spring integration and more.
Some of you might not see any sense of using Glassfish + Struts 2 + Spring because on Glassfish 3 you already have JSF, JPA and more great features. But I have come across different sites where people exactly ask about Glassfish + Struts 2 + Spring. I still believe there can be good reasons for using this combination. Please consider I do not want to compare Struts 2 with other frameworks. Be open for everything - use what every you want.
To run the Struts 2 examples you need at least: