.html is usually regular static HTML page that changes only when the webmaster edits it. .shtml is used for dynamic pages, where you can do something like this: "You are connected to this web site from <!--# echo var="REMOTE_HOST" -->." and the webserver will parse that. The user will then see "You are connected to this web site from xxxx-xxxx-blah.uu.net."
If you go to my web server and look at this page:
http://www.gigacluster.net/uptime.shtml, you will see the server's uptime.
You could configure your webserver to just parse ALL pages, regardless of whether there's any dynamic content, and then you wouldn't have to bother with choosing either .html or .shtml, but it's a double-edged sword -- parsing a document takes up [valuable] CPU time and possibly RAM. That is why the server wants a special file extension for files it needs to parse.
Hope that helps.