J2ME, J2SE, J2EE

What are the differences between the different Java platforms J2ME, J2SE, and J2EE?
J2SE is Sun's platform that includes the Java Virtual Machine (JVM) and packages. There is the core package which is basically the contents of rt.jar in the distribution package of J2SE. Then there are specification such as Swing and Networking (if I'm correct about this latter one ).

There's also optional packages like the ones listed at http://java.sun.com/reference/api/index.html under "J2SE Optional Packages" including JAI, JCE, JDO and J3D.

There's many implementations of the J2SE platform such as Sun's JSDK, IBM's J9, Blackdown, and Kaffe. I'm sure there are more out there... Anyway, J2SE is something you'd want to build on, something you'd probably want to learn and get to know since it's the basics.

J2EE on the other hand builds on top of J2SE so to speak; J2EE needs J2SE. It includes tools to create frameworks, API specifications suitable for companies. By specification, JSP and Servlets (and Beans) are J2EE. EJB (javax.ejb, javax.enterprise.deploy.*) is J2EE. As is JMS (javax.jms), JavaMail (javax.mail), ...

Then there's J2ME (Micro Edition) which runs on portable, mobile, handheld devices. I'm honestly not that familiar with this one; I don't really have a testing environment .

J2SE is where one should start and slowly learn the core packages, later branching into the optional packages. While Servlet/JSP is J2EE, it doesn't mean it must be packaged in J2EE. It's just specified as J2EE.

One reason why J2EE is not suitable for shared hosting is because of size. Java is huge and requires a couple of GB of memory even for J2SE. Sun's J2SE package is now less than 35 MB, while the J2EE is 98 MB.