【发布时间】:2010-07-23 15:35:49
【问题描述】:
我刚刚继承的应用程序定义了.tag 文件——即用JSP 和其他JSTL 标记编写的JSTL 标记。 Tomcat 是否可以像 JSP 的“开发”模式一样,在不重新启动的情况下获取对 .tag 文件的更改并重新编译/重新加载它们?
编辑 我应该注意到上下文在 Tomcat 中被标记为“可重新加载”,并且我成功地热部署了类文件和 jsps。它只是没有处理 .tag 文件。
【问题讨论】:
我刚刚继承的应用程序定义了.tag 文件——即用JSP 和其他JSTL 标记编写的JSTL 标记。 Tomcat 是否可以像 JSP 的“开发”模式一样,在不重新启动的情况下获取对 .tag 文件的更改并重新编译/重新加载它们?
编辑 我应该注意到上下文在 Tomcat 中被标记为“可重新加载”,并且我成功地热部署了类文件和 jsps。它只是没有处理 .tag 文件。
【问题讨论】:
JSP 的“开发”模式也适用于标记文件...除非标记文件被打包在 jar 文件中(例如,在 /WEB-INF/lib 中的 jar 文件的 /META-INF/tags/ 中)。
如果标签文件像 JSP 一样部署(例如,在 /WEB-INF/tags/ 中),如果“开发”模式为 true,则每次访问时都会检查它们的修改并重新加载。您不必显式设置它,因为它在 tomcat 5.5/6 中默认为真。
如果您检查 $CATALINA_BASE/conf/web.xml 并且“开发”未明确设置为 false,但您仍然遇到重新加载 .tag 文件的问题(假设这些文件不是 jar 打包的),您可以尝试关闭标签池(对于 jasper,JspServlet):
<init-param>
<param-name>enablePooling</param-name>
<param-value>false</param-value>
</init-param>
...但这确实没有必要。
【讨论】:
类路径中的库/文件不会在 Tomcat 中热部署/热加载。据我所知,Glassfish v3 是唯一能做到这一点的人。 Tomcat 只能热部署 JSP 文件和 Java 源文件中的更改。然而,由于 Tomcat 是一个非常快速的(重新)启动程序(在不到 3 秒的时间内完成,而 Glassfish 大约需要 30 秒),手动重新启动应该不是一个主要问题,是吗?热部署本身已经花费了大约相同的时间。
【讨论】: