tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Craig R. McClanahan" <craig...@apache.org>
Subject Re: Is there a way to get the "docBase" property from within a servlet?
Date Mon, 03 Sep 2001 18:38:14 GMT


On Sun, 2 Sep 2001, Jeff Turner wrote:

> Date: Sun, 2 Sep 2001 16:04:23 +1000
> From: Jeff Turner <jeff@socialchange.net.au>
> Reply-To: tomcat-user@jakarta.apache.org
> To: tomcat-user@jakarta.apache.org
> Subject: Re: Is there a way to get the "docBase" property from within a
>     servlet?
>
> On Sat, Sep 01, 2001 at 09:48:10PM -0700, Craig R. McClanahan wrote:
> >
> >
> > On Mon, 27 Aug 2001, Rick Mann wrote:
> >
> > > Date: Mon, 27 Aug 2001 20:28:17 -0700
> > > From: Rick Mann <rmann@latencyzero.com>
> > > Reply-To: tomcat-user@jakarta.apache.org
> > > To: tomcat-user@jakarta.apache.org
> > > Subject: Is there a way to get the "docBase" property from within a
> > >     servlet?
> > >
> > > Is there a Servlet spec-compliant way to get the webapp's directory's path
> > > programmatically, from within a servlet?
> >
> > No.
>
> getServletConfig().getServletContext().getRealPath("/");
>
> Of course it won't work within a .war file..
>

And therefore there is no *portable* solution, which was the original
question.

> > > Something like calling
> > > ServletConfig.getInitParameter("docBase"), but something that's standard,
> > > and that does not require me to specify the path explicitly in a
> > > configuration file?
> > >
> >
> > You are starting from an incorect assumption, that there *is* such a thing
> > as a portable "directory path" to a web application.  It is entirely legal
> > for a servlet container to run a web application directly from a WAR file
> > (in which case there is no expanded directory), or by storing its static
> > resources in some other sort of structure (such as being BLOB objects in a
> > database).
>
> Most websites are not static. Users publish content, for example, and
> the logical place for that content to be stored is on the filesystem
> inside the webapp, not in a database. So for many, or not most,
> websites, the notion that a website can be kept in a .war is not
> practical.
>

Although the statement might be true, the runtime implementation of web
application resources is totally up to the servlet container -- the only
requirement for WAR files is to accept them as the deployment mechanism.

Many (but by *no* means all) servlet containers do support an "open
directory" mechanism like Tomcat does.  If you write a web application
that depends on this (perhaps using the getRealPath("/") mechanism), then
you are limited to containers that give you this option.  That may be fine
for your needs -- but it's not portable, so there is therefore no portable
API (in javax.servlet) to access it under all circumstances.

> I'd be interested to know if there is a solution to this. Perhaps the
> filesystem could be mapped to a JNDI context, which could be made into a
> "virtual filesystem" inside the webapp?
>

As a matter of fact, this is exactly what Tomcat 4 does internally -- it
represents the static resources of a web app as a JNDI naming context.
But, because it is internal to Tomcat, it is not visible to applications.

There was some discussion in the JSR-053 expert group (the ones
responsible for Servlet 2.3) in making this kind of an abstraction visible
to applications, and therefore portable.  But, there wasn't enough time to
do it right for this round of the specs -- it will be considered again for
the next version.

> --Jeff
>
> > > TIA,
> > >
> > > Rick
> > >
> > >
> >
> > Craig McClanahan
> >
>

Craig



Mime
View raw message