一尘不染

如果scratchdir是只读的,Tomcat是否在内存中缓存已编译的JSP页面?

tomcat

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

严重:您指定的scratchDir:/ readonlyfs / tomcat / work / Catalina / localhost /
myApp无法使用。

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

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


阅读 310

收藏
2020-06-16

共1个答案

一尘不染

看来JSP已被编译(.class和.java文件是否在$ CATALINA_BASE / work下存在?)。这就是为什么看起来一切正常的原因。

如果使用空的只读工作目录(JSP引擎用于其scratchDir)启动Tomcat,则尝试访问JSP时将看到以下内容:

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

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

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

2020-06-16