我指的是Tomcat的web.xml
文件的以下参数:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
. . .
<init-param>
<param-name>development</param-name>
<param-value>true</param-value>
</init-param>
. . .
</servlet>
网络应用程序是否有任何方法可以以编程方式切换此值 - 至少对于所有Web应用程序来说都是如此 - 因此可以在正在运行的Web服务器上临时更改停止并重新启动Tomcat?
如果失败了,有没有办法强制单个JSP重新编译而不必等待它可能采取的几个非确定性分钟?我知道如果你改变一个JSP,它最终会(在几分钟内)被编译,但我正在寻找一种方式来说,“在下次访问时,重新编译它。”
注意:需要重新启动Web应用程序或导致Web应用程序重新启动或容器重启的解决方案对我没有帮助。当我可以重启Tomcat时,我已经知道如何(手动)这样做。我要做的是在生产中的Tomcat实例上暂时将“development”值从false切换为true,我无法中断当前会话。
答案 0 :(得分:1)
JspServlet
的默认行为是每次访问源JSP时检查源JSP,如果已更改,则重新编译。此设置在99%的情况下都能正常工作,包括开发和生产。在非常高负载下,然后禁用它可能会加快速度,但我还没有看到这一点。
如果您看到JSP 最终重新编译的行为,那么您必须已将Tomcat配置为以这种方式运行。您是否启用了后台重新编译标志,如详细here?此设置可能会隐式禁用自动按访问重新编译。
答案 1 :(得分:0)
据我所知,如果您修改了Web应用程序的web.xml,则会自动重启容器(tomcat)。此外,web.xml中的参数值只能以编程方式读取。
如果您想立即重新编译JSP,只需请求JSP的URL,或将JSP的默认ModificationTestInterval更改为0秒:
<init-param>
<param-name>modificationTestInterval</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>development</param-name>
<param-value>true</param-value>
</init-param>
。希望这会有所帮助。