Here's my attempt at your (very broad) question:
- Django - a Python framework to make developing multi-client web-based CRUD apps easier.
- Ruby on Rails - a Ruby framework to make developing multi-client web-based CRUD apps easier.
- Google App Engine - Google hosting of Python or Java applications that uses BigTable as its storage mechanism.
- CGI scripts/apps - old school web apps where a CGI script was kicked off for each request to a web server.
Grails is a Ruby-like framework to make developing multi-client web-based CRUD apps easier. It's based on Java, Groovy, Spring, and Hibernate.
Java servlets are HTTP listener classes that you deploy using Java EE servlet/JSP engines. Those engines almost invariably have HTTP servers built into them, so you can choose whether or not to deploy them on top of a web server like Apache or IIS. They'd be part of a framework like Grails, but you need to add a lot of other stuff besides servlets to create a dynamic, data-driven web app. That's why you can't swing a cat without hitting another Java web framework (e.g., Struts, Spring, Wicket, JSF, etc.) - there's a lot more to it than just servlets.
These are all similar in that they're different attempts to solve that same fundamental problem. You'd choose one based on your familiarity with the underlying language.
I wouldn't put Google App Engine in the same category. It feels more like Google's "host in the cloud" option than an alternative to Rails or Django. You can deploy Python apps that use Django on Google App Engine, so it's not an alternative in that sense.