1

我在只读文件系统上存在的 Tomcat 容器中安装了一个 webapp。结果,我在启动时看到此消息(实际名称已更改以保护有罪者):

严重:您指定的 scratchDir:/readonlyfs/tomcat/work/Catalina/localhost/myApp 不可用。

尽管有此消息,但该应用程序似乎正在运行,并且很难确定,但似乎 JSP 页面并未针对每次访问进行编译。所以,我的问题是,编译后的 JSP 页面会发生什么?它们是否缓存在内存中?它们是否被无限期缓存?它们是否被缓存?

我需要明确知道,因为应用程序几乎总是部署到只读文件系统,如果这会导致性能问题,那么我将不得不更改 scratchdir 以指向另一个文件系统。但是,这给我希望避免的部署过程带来了额外的复杂性。因此,如果性能不受影响,即页面缓存在内存中,那么我很乐意不理会这些事情。我意识到序列化的会话数据会在只读文件系统上丢失,但这与我无关,实际上是一个加号。我只关心编译页面的处理。

4

1 回答 1

2

看起来 JSP 已经被编译($CATALINA_BASE/work 下是否存在 .class 和 .java 文件?)。这就是为什么看起来事情正在发挥作用的原因。

如果您使用一个空的只读工作目录(JSP 引擎将其用作其暂存目录)启动 Tomcat,如果您尝试访问 JSP,您将看到以下内容:

HTTP 状态 500 - java.lang.IllegalStateException:没有输出文件夹

您有几个选择:a) 触摸每个 JSP 以确保它们都已在工作目录中编译,然后将完整的工作目录包含在您的发行版中 b) 预编译 JSP

我会说 b) 是更好的选择。

于 2013-05-15T10:25:38.547 回答