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