You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Rick Mann <rm...@latencyzero.com> on 2001/09/05 23:38:07 UTC

Re: Is there a way to get the "docBase" property from within a servlet?

on 9/1/01 9:48 PM, Craig R. McClanahan at craigmcc@apache.org wrote:

>> Is there a Servlet spec-compliant way to get the webapp's directory's path
>> programmatically, from within a servlet?
> 
> No.
> 
>> 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).

Okay. I get that. How does one access a resource, then, whether it's a file
in a directory or a file in a WAR file? For example, we have properties
files that specify certain things for our web app. Currently, I provide a
full path, from root, to this file as an init param to a servlet that gets
loaded at context startup.

I'd like to be able to refer to this file relative to the web app's
directory (or within the web app's) .WAR file. Can you tell me how I'd go
about doing this, or what concepts to search for in the documentation to
answer this question?

As always, thanks for your help,

------------------------------------------------------------
Roderick Mann               rmann @ latencyzero.com.sansspam



Re: Is there a way to get the "docBase" property from within a servlet?

Posted by Anand B N <an...@learningbyte.com>.
If you are not using WARs and using a folder for your web application then 
try :-

         ServletContext tContext = request.getServletContext();

         tContext.getRealPath("/");

Not sure if it works always but it works  and I guess most servlet engines 
also do function and retunr the docbase property this way.

Anand

At 03:00 PM 9/5/01 -0700, you wrote:


>On Wed, 5 Sep 2001, Rick Mann wrote:
>
> > Date: Wed, 05 Sep 2001 14:38:07 -0700
> > From: Rick Mann <rm...@latencyzero.com>
> > To: tomcat user jakarta.apache.org <to...@jakarta.apache.org>,
> >      Craig R. McClanahan <cr...@apache.org>
> > Subject: Re: Is there a way to get the "docBase" property from within a
> >     servlet?
> >
> > on 9/1/01 9:48 PM, Craig R. McClanahan at craigmcc@apache.org wrote:
> >
> > >> Is there a Servlet spec-compliant way to get the webapp's 
> directory's path
> > >> programmatically, from within a servlet?
> > >
> > > No.
> > >
> > >> 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).
> >
> > Okay. I get that. How does one access a resource, then, whether it's a file
> > in a directory or a file in a WAR file? For example, we have properties
> > files that specify certain things for our web app. Currently, I provide a
> > full path, from root, to this file as an init param to a servlet that gets
> > loaded at context startup.
> >
> > I'd like to be able to refer to this file relative to the web app's
> > directory (or within the web app's) .WAR file. Can you tell me how I'd go
> > about doing this, or what concepts to search for in the documentation to
> > answer this question?
> >
>
>The API calls for this are ServletContext.getResource() and
>ServletContext.getResourcesAsStream().  The path you specify is context
>relative, and must start with a slash ("/") character.  Details are in the
>servlet specification, available at:
>
>   http://java.sun.com/products/servlet/download.html
>
>For example, let's assume you wanted to parse the web app deployment
>descriptor for your application.  You can access it like this:
>
>   InputStream is =
>     getServletContext().getResourceAsStream("/WEB-INF/web.xml");
>
>The /WEB-INF directory is a good place to put resource files like this,
>because the servlet container will refuse to serve them in response to a
>direct request from a client.  Plus, this call will work no matter how
>your servlet container deploys your application (in a directory, in a WAR
>file, or whatever).  It also doesn't matter what context path your app
>ends up with, because the path is only relative to the context.
>
>In Servlet 2.3 (i.e. Tomcat 4.0), a new call was added that acts like the
>list() method of the java.io.File class.  For instance, to see the names
>of all the resources in the "/WEB-INF" directory, you can say:
>
>   Set paths =
>    getServletContext().getResourcePaths("/WEB-INF");
>
>and process all of them.  Tomcat 4 uses this, for example, to do directory
>listings when there is no welcome file in the selected directory.
>
>
> > As always, thanks for your help,
> >
> > ------------------------------------------------------------
> > Roderick Mann               rmann @ latencyzero.com.sansspam
> >
> >
> >
>
>Craig



Re: Is there a way to get the "docBase" property from within a servlet?

Posted by "Craig R. McClanahan" <cr...@apache.org>.

On Wed, 5 Sep 2001, Rick Mann wrote:

> Date: Wed, 05 Sep 2001 14:38:07 -0700
> From: Rick Mann <rm...@latencyzero.com>
> To: tomcat user jakarta.apache.org <to...@jakarta.apache.org>,
>      Craig R. McClanahan <cr...@apache.org>
> Subject: Re: Is there a way to get the "docBase" property from within a
>     servlet?
>
> on 9/1/01 9:48 PM, Craig R. McClanahan at craigmcc@apache.org wrote:
>
> >> Is there a Servlet spec-compliant way to get the webapp's directory's path
> >> programmatically, from within a servlet?
> >
> > No.
> >
> >> 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).
>
> Okay. I get that. How does one access a resource, then, whether it's a file
> in a directory or a file in a WAR file? For example, we have properties
> files that specify certain things for our web app. Currently, I provide a
> full path, from root, to this file as an init param to a servlet that gets
> loaded at context startup.
>
> I'd like to be able to refer to this file relative to the web app's
> directory (or within the web app's) .WAR file. Can you tell me how I'd go
> about doing this, or what concepts to search for in the documentation to
> answer this question?
>

The API calls for this are ServletContext.getResource() and
ServletContext.getResourcesAsStream().  The path you specify is context
relative, and must start with a slash ("/") character.  Details are in the
servlet specification, available at:

  http://java.sun.com/products/servlet/download.html

For example, let's assume you wanted to parse the web app deployment
descriptor for your application.  You can access it like this:

  InputStream is =
    getServletContext().getResourceAsStream("/WEB-INF/web.xml");

The /WEB-INF directory is a good place to put resource files like this,
because the servlet container will refuse to serve them in response to a
direct request from a client.  Plus, this call will work no matter how
your servlet container deploys your application (in a directory, in a WAR
file, or whatever).  It also doesn't matter what context path your app
ends up with, because the path is only relative to the context.

In Servlet 2.3 (i.e. Tomcat 4.0), a new call was added that acts like the
list() method of the java.io.File class.  For instance, to see the names
of all the resources in the "/WEB-INF" directory, you can say:

  Set paths =
   getServletContext().getResourcePaths("/WEB-INF");

and process all of them.  Tomcat 4 uses this, for example, to do directory
listings when there is no welcome file in the selected directory.


> As always, thanks for your help,
>
> ------------------------------------------------------------
> Roderick Mann               rmann @ latencyzero.com.sansspam
>
>
>

Craig