I just can't emphasise enough what an excellent book this is, for all level of experienced programmers. I consider myself to have an intermediate knowledge of Java and a very basic knowledge of programming distributed components, but I've enjoyed every minute of my reading.
What do you need to know before reading this book? Basically you need to understand the basic of java programming like classes, methods and parameters [e.g. MyClass.method(parameter,..)] and that java needs to import certain packages to be able to make some specific functions [e.g. import javax.sql;]. Apart from this I just highly recommend you to read very thoroughly chapter 1 and 2, they will guide you nicely to understand the J2EE technologies and how the different chapters in the book approach them. J2EE is a difficult subject to learn and "Sam's Teach Yourself" tackles it magnificently, it covers absolutely everything.
A case study is followed day after day and if for some reason you can't work out the answer one day, you just can download it from the website. I haven't had a problem with any of the code, they work fine.
I'd like to respond to the previous reviewer by saying that this book is not obsolete at all, you just need to download the correct J2EE which it could be "j2eesdk-1_4_02_2005Q2-windows.exe" for windows. The book clearly specifies which version of J2EE is using at the time of writing it, by common sense is not recommended to download the latest version of J2EE two years down the line.
The only problem is that it's quite impractical to finish the book in 21 days for a complete beginner, more like 21 weeks.