Hoo boy, talk about inviting varied opinions...
For myself, I'm not a big fan of the existing popular frameworks (though I haven't had a chance to look into
JSF enough to have a valid opinion). That said, I am most certainly a big fan of the architecture they impose -- namely, the "Model 2" approximation of the MVC
pattern. So whichever way you choose to go, either take the time to make sure your app(s) will adhere to the Model 2 pattern, or use one of the frameworks that imposes it. (Personally, I've developed a light-weight Model 2 framework that does exactly what I need).
JSTL is a must. Striving to eliminate Java scriplets and scriplet expressions completely from the JSPs is highly recommended. If you can, use a
JSP 2.0 container so you can leverage the power of the EL, tag files, and the simplified custom tag API to help achieve scriptless pages.
There will be other opinions.
Struts has lots of fans. I'm just not one of them. But in the end, whatever helps you create a well-structured application is the way
you should go.