A servlet looks like Java with some statements that write HTML (maybe).
An JSP looks like HTML with some Java script (maybe).
So a servlet is better suited to Java-like stuff: logic, complex processing, nifty OO models. A JSP is better suited to presentation stuff: HTML, JavaScript, etc.
A common model is for incoming GET and POST requests to hit a servlet which calls other Java classes that handle any inbound data and generate any outbound data. When all the Java work is done, the servlet forwards to a JSP that prepares the response page.
Under the covers the container compiles a JSP into a really ugly servlet, so the two can do most of the same things. But it's good to have a clear idea of what their roles are and how you want them to be different. Consider coding rules like no HTML in servlets and no Java in JSPs.
For more details, google and read up on MVC-2, front controller or
Struts architecture.
-edit-
Wow, a bunch of people said similar things while I was away reading my mail!
[ September 27, 2005: Message edited by: Stan James ]