File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Servlets and the fly likes RequestDispatcher, relative and absolute path Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Soft Skills this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » Servlets
Bookmark "RequestDispatcher, relative and absolute path" Watch "RequestDispatcher, relative and absolute path" New topic
Author

RequestDispatcher, relative and absolute path

Sam Zheng
Ranch Hand

Joined: Nov 29, 2000
Posts: 61

I am having trouble to grasp the concept of relative and
absolute paths associated with RequestDispatcher. Please
help.
The Servlet API says that ServletRequest.getRequestDispatcher()
can take both relative path and absolute path. If the path
starts with a "/", it is interpreted as relative to the current
context root.
The same Servlet API also says that
ServletContext.getRequestDispatcher() must take a path that
begins with a "/", which is also intepreted as relative to the
current context root.
Furthermore, the API says that the difference between the above
two methods is that the former method can take a relative path.
NOW HERE IS MY CONFUSION: since both methods can take a path
that begins with a "/", apparently, a path that begin with a
"/" is treated as an ABSOLUTE path. If this is a case, why
such an absolute path "is interpreted as RELATIVE TO THE
CURRENT CONEXT ROOT"??? Can anyone give me an example of
how a relative path looks like? Thanks!
Peter den Haan
author
Ranch Hand

Joined: Apr 20, 2000
Posts: 3252
Originally posted by Sam Zheng:
Furthermore, the API says that the difference between [ServletRequest.getRequestDispatcher() and ServletContext.getRequestDispatcher()] is that the former method can take a relative path.
NOW HERE IS MY CONFUSION: since both methods can take a path
that begins with a "/", apparently, a path that begin with a
"/" is treated as an ABSOLUTE path. If this is a case, why
such an absolute path "is interpreted as RELATIVE TO THE
CURRENT CONEXT ROOT"???

Why the difference between the two methods? Because the ServletRequest is associated with a request, it has something a path can be relative to: the location where the servlet was invoked. The ServletContext, on the other hand, describes the web application; every servlet executes in the same ServletContext. A path has nowhere to be relative to, except the root of the web-app itself.
A web-application is a self-contained unit, which can be deployed in any location. Ideally it should work no matter whether you mapped it to the server root ("/") or not ("/development/testing/webapp1/"). This will work only if "absolute" paths used in forwarding and inclusion take the web-app root as their starting point.
The sticking point probably is that the term "absolute" is really only relative Every absolute path has to take a certain arbitrary starting point. In Unix, the starting point for an absolute filesystem path is a single root partition; in Windows, every partition has its own starting point. For a browser, an absolute path on your server starts at the server root; for a Java servlet/JSP, every web-app has its own starting point.
You asked for an example. Take the web-app mapped to "/development/testing/webapp1/". Inside this web-app, a servlet is mapped to "/servlets/myservlet", which forwards the requests to "/servlets/myotherservlet".

  • A user can access the first servlet through the URI "http://yourhost:80/development/testing/webapp1/servlets/myservlet".
  • Using the ServletRequest object, myservlet can forward the request to "myotherservlet". This will be interpreted relative to the location of "myservlet".
  • Using either ServletRequest or ServletContext, myservlet can also forward the request to "/servlets/myotherservlet". This absolute path takes the web-app root "/development/testing/webapp1/" as its starting point.

  • BTW, ServletContext.getContext() gives you access to other web applications running on the same server; that's how you dispatch requests to an arbitrary location on the server.
    - Peter

    [This message has been edited by Peter den Haan (edited May 14, 2001).]
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: RequestDispatcher, relative and absolute path