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.)

Garret


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

Reply via email to