ALL the networking "utilities" like Sockets etc.. are provided by Java in the java.net package. Similar functionality is provided in .NET in the System.Net namespace. This makes writing the web server fairly "easy"... easy is a very relative term obviously.
C++ does NOT provide this built-in functionality in their standard library. You have to explore some third party networking library to be able to code up something like this. So it is no where as easy to do.
You're right... HTTP is an application level protocol and so if FTP. I would assume that implementing FTP would be similar. You would need asymetric capabilties in FTP, whereas in HTTP its more unidirectional.