Old thread now, hopefully you'll take a look at your "replies" later :)
Two reasons:
1. To do ANYTHING useful in ASP (classic), you have to use an activeX object. DB calls/etc all go through activeX. The syntax for doing this is messy, and the objects don't always act the same as built in ASP functions (the same complaint PHP has), especially when they require c++ type structures like callbacks and output parameters.
Most people writing asp classic had no idea about what activeX is, how it works, and what you need to do with objects you create/etc.
2. It was very difficult to do code seperation in ASP. I never saw any full fledged templating systems, and doing even two layered coding (with a UI layer and business layer) was difficult at best. One place I worked at actually wrote their business logic in C++, called via activeX in asp, to enforce seperation. You couldn't really create your own business layer in pure asp.
ASP.NET isn't perfect (but it evolved nicely) but it fixed both of those issues.
At the time JSP was an EXCELLENT alternative. JSP gave you the same toolkit/language to write your business logic and presentation logic in while still letting you keep them seperate.