great information. thx for taking the time.

very much appreciated,

- james

Paul Philion wrote:
>
> James -
>
> I've just been reviewing the RFC 1738 (URL spec, mostly in context of some formal 
>comments that I putting together about the 2.2 spec). From that RFC:
>
>    A file URL takes the form:
>
>        file://<host>/<path>
>
>    where <host> is the fully qualified domain name of the system on
>    which the <path> is accessible, and <path> is a hierarchical
>    directory path of the form <directory>/<directory>/.../<name>.
>
>    As a special case, <host> can be the string "localhost" or the empty
>    string; this is interpreted as `the machine from which the URL is
>    being interpreted'.
>
>    The file URL scheme is unusual in that it does not specify an
>    Internet protocol or access method for such files; as such, its
>    utility in network protocols between hosts is limited.
>
> And from the BNF at the end of the RFC:
>
>    fileurl        = "file://" [ host | "localhost" ] "/" fpath
>
> So, according to the spec, both of
>
>    file://localhost/PATH
>    file:///PATH
>
> a equal. The BNF further implies that URL are absolute: There is no way to specify a 
>resource otherwise.
>
> Now, RFC 1630 (URI spec) does allow for relative URIs:
>
> Partial (relative) form
>
>    Within a object whose URI is well defined, the URI of another object
>    may be given in abbreviated form, where parts of the two URIs are the
>    same. This allows objects within a group to refer to each other
>    without requiring the space for a complete reference, and it
>    incidentally allows the group of objects to be moved without changing
>    any references.  It must be emphasized that when a reference is
>    passed in anything other than a well controlled context, the full
>    form must always be used.
>
>    The rules for the use of a partial name relative to the URI of the
>    context are:
>
>       If the scheme parts are different, the whole absolute URI must
>       be given.  Otherwise, the scheme is omitted, and:
>
>       If the partial URI starts with a non-zero number of consecutive
>       slashes, then everything from the context URI up to (but not
>       including) the first occurrence of exactly the same number of
>       consecutive slashes which has no greater number of consecutive
>       slashes anywhere to the right of it is taken to be the same and
>       so prepended to the partial URL to form the full URL. Otherwise:
>
>       The last part of the path of the context URI (anything following
>       the rightmost slash) is removed, and the given partial URI
>       appended in its place, and then:
>
>       Within the result, all occurrences of "xxx/../" or "/." are
>       recursively removed, where xxx, ".." and "." are complete path
>       elements.
>
> So, if you've got a "URI in context", you can use relative URIs. Some examples (from 
>the spec):
>
>    In the context of URI
>
>                         magic://a/b/c//d/e/f
>
>    the partial URIs would expand as follows:
>
>      g                  magic://a/b/c//d/e/g
>      /g                 magic://a/g
>      //g                magic://g
>      ../g               magic://a/b/c//d/g
>      g:h                g:h
>
>    and in the context of the URI
>
>                         magic://a/b/c//d/e/
>
>    the results would be exactly the same.
>
> This is nice, but it really only gives you a way to translate relative URIs into 
>absolute URLs, based on the URI context.
>
> So basically, what I'm saying is that there is currently no way to specify a 
>"relative file url", mostly because for the URL to be relative, it has to have some 
>sort of context. Basically, I think it comes down to is using ".." in an absolute URL 
>and generating that URL:
>
>     String url;
>     String file = "../foo.jar";
>     String base = getCodeBase();
>
>     if ( base.endsWith( "/" ) ) {
>         url = base + file;
>     } else {
>         url = base + "/" + file;    // this might always be valid;
>     }
>
> This is why I always use getResource(). Perhaps there should be a File() constructor 
>that takes a URL, or developers should consistantly use getResource() and 
>URL.getFile().
>
> - Paul Philion
>
> James Todd wrote:
> >
> > [i'm going to cross-post my reply to the jsp and servlet
> > interest lists ... as i've been burned on this very item
> > in the past and am curious as to folks opinions].
> >
> > hi joe -
> >
> > !great information!
> >
> > for a good part of the day i've been trying to resolve
> > a "portable file url specified docBase" issue. for what
> > it is worth and this may be a bit dated but i've used
> > the following format since jdk 1.0.x days with measurable
> > success:
> >
> >         file://localhost/PATH
> >
> >         where PATH can look like "foo/bar" for unix
> >                 and "C|/foo/bar" (or something like this)
> >                 on win
> >
> > i've run into modo various jdk version/platform issues
> > when using file urls which are specified with anything
> > less then the above. that said, i'm really not sure how
> > to specify relative file urls with the above scheme in
> > a portable manner as the "third" slash designates the
> > the root file system ... or so i believe.
> >
> >         eg: file:../foo.jar
> >
> > i'd like to hear thoughts on this item as it is really
> > a bit of a pain in the a$$ when it comes to specifying
> > a reliable (ie jdk 1.1.x and jdk 1.2.x on win/solaris/*
> > for relative and absolute paths) file based docBase.
> >
> > any ideas? i am optimistic (and stubborn) so i believe
> > there is a solution here.
>
> ___________________________________________________________________________
> To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
> of the message "signoff SERVLET-INTEREST".
>
> Archives: http://archives.java.sun.com/archives/servlet-interest.html
> Resources: http://java.sun.com/products/servlet/external-resources.html
> LISTSERV Help: http://www.lsoft.com/manuals/user/user.html

___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".

Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html

Reply via email to