Every client request is submitted with a URL. So every request object on the server is tied to some URL.
ServletContext, on the other hand, is basically the web application itself. It was not created because of any URL. It is created when the container is started.
So if a request object was the result of a URL of "http://javaranch.com/someWebApp/folder/directories/finance" and you ask the request for a RequestDispatcher with "result.jsp", it will say "Hmmm, no leading slash means it wants me to make a new URL relative to my own. That means it wants
http://javaranch.com/someWebApp/folder/directories/result.jsp! Piece of cake!"
But if you try the same thing to the ServletContext, it says "Are you
kidding me!?! I've got like 100 places to look for this dumb file - and if I find two or more by the name result.jsp I have no clue which one you really want! Just give me the full directory structure *starting with a leading slash* from my root and I'll help you out. Throw me a freakin' bone here!"