I'm seeking some advice on learning J2EE.  I was a software developer for large company for 25 years and left at the end of 2009 to explore new opportunities.  I still love development and spent the last 2.5 years learning new web related skills.  I am fluent in core Java and have a lot of practical experience but am not very skilled in J2EE.  In my job, I was exposed a little to J2EE development but I just learned enough to get my line items done and then moved on.  I don't even remember much of what I did learn.  I certainly don't have a clear idea of building a J2EE application from start to finish.

I think my limited exposure has been to EJBs, JSPs, etc.  I also see a lot of job postings that seek people with experience in Spring, Hibernate, and Struts.  Are these technologies mutually exclusive?  I don't wish to fire any "religious arguments" but what are the pros and cons of these technologies?  Do developers typically specialize with one set of technologies rather than work with both?

Can anyone recommend any good books from which to learn J2EE?