On 23/04/2019 21:46, Garret Wilson wrote:
> On 4/22/2019 7:58 AM, Mark Thomas wrote:
>> On 21/04/2019 15:53, Garret Wilson wrote:
>>> …
>>> But now I realize Tomcat is creating this directory structur inside the
>>> "base dir" I specified:
>>>
>>> tomcat.8080/work/Tomcat/localhost/ROOT
>>>
>>> I don't need this directory. I don't want this directory created. How do
>>> I tell Tomcat not to create no danged directories?
>> The Servlet specification requires (see section 4.8.1 of the Servlet 4.0
>> spec) that Tomcat provides a private temporary directory for each
>> servlet context (web application).
> 
> 
> I have have several reactions.
> 
> 1. The first is, OK, so the servlet spec requires that the servlet
> container expose a temporary directory. Tomcat can't provide a temporary
> directory to the consumer unless it has a temporary directory, so it's
> reasonable that it creates one.
> 
> 2. But so far nothing has been stored in this directory, so it's
> completely unused. I see also in the `Tomcat` class the comment, "lazy
> init for the temp dir - only when a JSP is compiled or get temp dir is
> called we need to create it. This will avoid the need for the baseDir".
> It sounds like you're lazily creating the JSP temporary directory, so
> why can't we do the same for the context temporary directory, which may
> never be used (and frankly probably won't be used in many applications)?
> But OK, that's a quibble; my other thoughts are more pressing.
> 
> 3. Since the temporary working directory is on a per-context basis, and
> I've only set the "basedir" for the entire `Tomcat` instance, Tomcat
> must be determining a default temporary directory for the context.
> Surely I'm allowed to explicitly specify a temporary directory on a
> per-context basis, but I sure can't find it. The `StandardContext` seems
> to equate the "temporary directory" with the "work directory". Are they
> really the same? If so, I suppose I can just call
> `((StandardContext)context).setWorkDir(String)`?
> 
> 
>> The best you can do is specify an absolute path that already exists for
>> the Context's work directory. It doesn't need to be writeable. If you
>> are using it for multiple web applications you probably don't want it to
>> be writeable.
> 
> 
> Ah, OK—I had read that response earlier, but didn't understand exactly
> what it meant until I investigated and wrote #2 above. So I guess I was
> right: I need to call`((StandardContext)context).setWorkDir(String)`.
> 
> 4. But all this "temporary directory requirement" business is for
> servlet containers. I started out just wanted to embed Tomcat to serve
> static files; I don't (yet? ever?) need a servlet container for this
> particular application. So how can I use Tomcat to serve static files
> without bringing in the requirements of a servlet container?
> 
> Maybe the answer is that Tomcat serves files by using a
> static-file-serving servlet, which in turn requires me to use Tomcat as
> a servlet container even for serving static files, which in turn
> requires me to have a temporary directory I don't want or need.
> 
> I suppose that's just the way it is. This is not so much a complaint as
> a desire to confirm I understand correctly how things stands. (OK, it's
> a teeny-tiny complaint, too.)

Your reasoning above is correct.

If you don't want the baggage associated with a Servlet container it
might be worth looking at what other solutions are available.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to