Dawn, I'm not sure that's really the answer to the question he actually asked...
J2EE is an umbrella for many, many different APIs. Remember that an API is just a
specification for some code; it's not the code itself. In
Java, the specification takes the form of a set of interfaces, and some instructions for using them. Most of what's in j2ee.jar is exactly those interfaces, and nothing more. The J2EE spec by itself doesn't
do anything. To actually run, you need an
implementation of some parts of those specs.
Then there's the J2EE (or JEE, as it's really called these days)
reference implementation, which includes an implementation of every one of the J2EE APIs. That makes it an
application server. They're not necessarily the
best implementations -- they're just something to
test against, maybe run small deployments. For industrial-strength deployments, you need a more substantial implementation like
JBoss, Websphere, etc.
Tomcat is a web container; it implements only parts of J2EE, notably the
servlet and
JSP specs. It provides some tools for using the
JDBC spec. It provides a security infrastructure. Plus, you can use other J2EE APIs like JavaMail by plugging in an implementation obtained from any other source.
In general, if you need to use Enterprise Java Beans, you need an application server. If you're only going to use servlets and JSPs, then you just need a web container. You
can, generally, run your servlets and JSPs in a full-on application server -- but it's overkill.