For the server part, we can use many languages and frameworks. The most important factor is, again, easy-to-use, since we still would like to concentrate on business problems instead of technical ones. The second factor is speed, though it's not as important as in a desktop application (network delays usually far surpass the server delay). More important than speed is scalability, but this is also dependent more on the application design than actual language, though some frameworks might constrain the design. Portability, size and reverse-engineering-potential are non-issues if you host the web application yourself, but if you intend to distribute it as a product, they will be as important as for a desktop application (well, size might not matter much in this case).
Java is quite similar to .Net, with a lot more frameworks to chose from (Struts, Spring, JSF, plain old JSP etc.). Also note that GWT is designed to work with Java, but of course you can use any AJAX library. Portability is included by design, which is also nice.
PHP is the Visual Basic of the web world, and I say this in the sense that everybody knows it (except me), and everybody uses it, and the ugliest web code is written in it. Well, maybe except for Perl. Anyway, it has all the advantages (and disadvantages) of the Java and .Net worlds, with tons of libraries available.
Python is one of the nicest platform for web development, with a lot of frameworks to mix and match to suit your needs: Zope, Django, TurboGears etc. It also has all the advantages of Java and .Net, but with a much nicer language underneath.
Ruby and Ruby on Rails. If you like less libraries than Python, less choice and a Perl-ish language, Ruby does the trick.
Perl can be successfully used to write web applications and has the nice CPAN libraries to help. That's if you can get used to decipher line noise, because that's how the source looks like when you first see it. Of course, you can write line noise in any language, but in Perl it's the norm rather than a weird contest.