In MS IIS you can create a web share out of any folder on the machine, and assign it a URL in the IIS admin tools, so you very well could use My Documents if you really wanted to... But realistically, no one does that... There are some default forlders for FTP and HTTP sites on an MS server and these are typically used to place subfolders... I like the WEB-INF structure of a Tomcat like app-server because it afford you a great level of security for your includes, etc. for example, I have servlets that may process a request, perhaps they set result values in a bean then they forward the request to a page to display the results... I don't EVER want this page shown unless they came through my servlet, so I place it under WEB-INF or some sub-directory of WEB-INF and it is protected as I want...
Java allows you to forward the request to another page to handle which is something most other server side technologies doesn't support... This brings me to another point... This is typically what is happening with those centralized enterprise systems... the system module doesn't actually do ANY of the work, it simply determines which "workflow" to take and steps the request through...
i.e.
You access intra.ibm.com/portal
the system servlet "hcl" takes you requests and sees you have an active session and are properly logged in... since there is nothing else in the paramters it selects the default workflow and forwards the request to the start page handler... The start page handlers takes the request, gets your user id fromt he session and finds the page set as your default start page in the database, and forwards the request to that page... The URL doesn't change, it is NOT a browser forward which would alert the user, but an internal forward so users are unaware of exactly what happened... they just see their correct start page shown...
Then the user selects a link:
intra.ibm.com/portal?cmd=new&obj=folder
The system servlet "hcl" sees the session, the correct login, the cmd parameter and the obj parameter and selects the workflow for creating a new object, forwards the request to the object manager. The object manager sees the cmd parameter and knows we're create something new and the obj parameter tells it what type of object... It selects the page with the form, for example, for naming a new folder... Then forwards the request to that page... etc. etc. etc.....
The system servlet is like a router, nothing more... this also keeps the URLs reasonbly short as they don't reflect the actualy structure of the file system... which is good, because having your file system exposed to the public is a good place for hackers to begin their attacks...
Don't getme wrong, I like Java, I enjoy programming in Java. But long before there was Java I could program the same way in C++, total OOP, but when I want to build a power tool, I don't use Java... I built a hard disk cleaner last year using Java... it will wipe clean any unused hard drive space... but since Java couldn't tell how much space was available on a hard drive until the recent release of version 1.6, this could not have been built the way I needed it prior to that... That change request had been issued to the Java Developers more than 7 years ago, but they never got around to doing something that sounds so basic... how big is the drive? how much free space is there?...
C++ is ALSO write once, run anywhere... you just have to compile the code for theplatform you want to use it on... unless you use native libraries that only work on one platform, it will run anywhere... you can also build switches into the make process to automatcially select compatible libraries on different systems when you compile it...
New is, Java STILL has to be compiled for every system... the JVM must be built to run natively and it has to compile the Java byte code prior to running it... so in essence you are doing the EXACT same thing, you just allow someone else to write those make routines to select the native libraries...
In their attempts to do write once, run anywhere, they ran into problems an settled on least common denominator, which is why the AWT looks like something that comes out the wrong end of my dog... This is why Swing was designed.... but that makes greater use of native librabries... and still we don't see true write once run anywhere...
So, when I want true speed and power, I fall back to C++ and when I want a robust, web architecture with rapid development and PLENTY of open source tools to rely and build on, I use Java. When I want a quick, simple yet full featured web design I roll over to PHP... If they would just complete the OOP aspects of PHP, they would have something to rival Java on many larger scale projects too...
Don't forget inheritance... multiple inheritance in C++ vs simple inheritance in Java...
C++ takes the DNA logic... if you are born of two or more parent objects, you should be able to inherit from both... I know I am certainly part my father's son; fast cars, real attitude, workaholic and part my mother's son; stuborn and kind.... I have my father's hair and my mother's feet... which means I ware shoes so big you could water ski in them and hair so light you might think I was bleach it... I don't... But compared to my father's small feet and my mother's red hair... it is obvious I inherit from both... BUT if I had been made by Java, I would have been ALL my father's with some modifications, or ALL my mother's with some modifications...
And with C++ it doesn't stop there you can have a cocktail of donnor parents, like the movie twins... take the best and be Arnold, or the worst and be Danny... But you get multiple options to choose from...
That is one place Java will likely never catch up... C++ outshines them all on that one... a major aspect of OOP too....
Peace,