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

如果scratchdir是只读的,Tomcat会在内存中缓存编译好的JSP页面吗?,jsp,tomcat,caching,web-applications,readonly,Jsp,Tomcat,Caching,Web Applications,Readonly,我已经在只读文件系统上的Tomcat容器中安装了一个webapp。因此,我在启动时看到以下消息(实际名称更改以保护罪犯): 严重:您指定的scratchDir:/readonlyfs/tomcat/work/Catalina/localhost/myApp不可用 尽管有此消息,但应用程序似乎正在运行,而且很难确定,但似乎并没有针对每个访问编译JSP页面。所以,我的问题是,编译后的JSP页面会发生什么变化?它们是否缓存在内存中?它们是无限期缓存的吗?它们被缓存了吗 我需要确切地知道,因为应用程序几

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

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

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


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

看起来JSP已经编译好了(是否在$CATALINA_BASE/work下存在.class和.java文件?)。这就是为什么事情似乎在起作用

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

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

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


我会说b)是更好的选择

请加上雄猫version@MichaelTomcat 7.0.40这是正确的。JSP没有被编译,因此没有发生错误,但是当JSP需要编译时,就会发生您描述的异常。我为自己没有看到这件事而懊恼。谢谢