如果不重新启动Tomcat,为什么不反映我的JSP更改?

Rak*_*yal 28 jsp tomcat tomcat6

我正在编辑直接驻留在内部的JSP文件tomcat/webapps/myapp/WEB-INF,但要查看更改,我必须重新启动服务器.据我所知,JSP更改不需要您重新启动服务器.我找到的与自动重新加载有关的唯一配置是reloadable ="true"

如果您希望Catalina监视/ WEB-INF/classes /和/ WEB-INF/lib中的类以进行更改,则设置为true;如果检测到更改,则自动重新加载Web应用程序.

我在中使用了这个属性context.xml,但问题仍然存在.在没有重新启动的情况下,如果没有检测到JSP文件中的更改,可能是什么原因?

@Bozho: 这是摘自web.xml.我需要改变什么吗?

 <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
Run Code Online (Sandbox Code Playgroud)

Boz*_*zho 29

在tomcat文档中,请参阅development设置.必须将其设置为true才能重新加载jsps.

开发 - Jasper是否用于开发模式?如果为true,则可以通过modificationTestInterval parameter.true或false指定检查JSP以进行修改的频率,默认为true.

这是你的 CATALINA_HOME/conf/web.xml

此外,如果您需要在生产环境中刷新jsp而不重新启动,则可以转到CATALINA_HOME/work/Catalina/localhost/contentName/org/apache/jsp并删除your_jsp.javayour_jsp.class文件.它们将在下次访问时重新创建.

编辑:提供配置后,以及关于不刷新内容的评论,我还有另一个:清除浏览器缓存,或从其他浏览器打开页面.

  • 有趣的是我删除了`CATALINA_HOME/work/Catalina/localhost/contentName/org/apache/jsp`中的所有文件,并且在访问页面时,为jsp创建了新的.java和.class文件.但这些变化仍未得到反映.:( (3认同)

kkk*_*kkk 10

更迟到的答案......

在上下文文件中将"antiResourceLocking"设置为"true"可能会阻止Tomcat重新加载JSP(Bugzilla 37668).

这是在Tomcat doc上的"antiResourceLocking"参数说明中记录的


Bee*_*eez 7

尽管可能很容易弄清楚,但这就是“将开发设置为真”的含义(更多用于快速参考):

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <!-- Add the following init-param -->
    <init-param>
        <param-name>development</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)

然后重启。


小智 5

我有同样的问题,并已解决。确保conf/context.xml您没有以下配置

<Context antiJARLocking="true" antiResourceLocking="true">
Run Code Online (Sandbox Code Playgroud)

如果您有那个,请将两者都删除antiJARLocking="true" antiResourceLocking="true",只写

<Context>
Run Code Online (Sandbox Code Playgroud)