Tomcat Web应用程序可以通过编程方式更改jsp servlet的“development = true”参数吗?

时间:2009-03-24 17:41:30

标签: jsp tomcat

我指的是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,我无法中断当前会话。

2 个答案:

答案 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>

。希望这会有所帮助。