【问题标题】:Why are my JSP changes are not reflected without restarting Tomcat?为什么不重新启动 Tomcat 就不会反映我的 JSP 更改?
【发布时间】:2010-01-05 07:58:55
【问题描述】:

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

如果你想让 Catalina 设置为 true 监控 /WEB-INF/classes/ 中的类 和 /WEB-INF/lib 进行更改,以及 自动重新加载网页 如果检测到更改,则应用程序。

我在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>

【问题讨论】:

  • 配置没问题。检查我的更新(和您的浏览器缓存)
  • 因此,您使用的是从应用服务器接管控制权的 IDE?
  • 在 Tomcat 8 和 Java 8 上遇到了同样的问题。在 Tomcat 7 和 Java 7 上运行良好。我也尝试了开发参数,但它仍然无法正常工作。可能是由 WTP 库更新引起的,这是使用 Tomcat 8 配置 Eclipse Kepler 所必需的。

标签: jsp tomcat tomcat6


【解决方案1】:

In the tomcat docs,请参阅development 设置。必须将其设置为 true 才能重新加载 jsps。

开发 - Jasper 是否用于开发模式?如果为 true,则可以通过 modifyTestInterval 参数指定检查 JSP 是否修改的频率。true 或 false,默认为 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 文件。但是这些变化仍然没有得到体现。 :(
  • 我们时不时遇到同样的问题,@RakeshJuyal 你找到解决办法了吗?
  • 关于清除浏览器缓存的评论让我免于在此浪费一天!
【解决方案2】:

一个更晚的答案......

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

这记录在Tomcat doc,在“antiResourceLocking”参数说明中

【讨论】:

  • 有这个问题,antiResourceLocking 也是问题!
  • 这拯救了我的一天!
【解决方案3】:

虽然可能很容易弄清楚,但这里是“将开发设置为真”的意思(更多供快速参考):

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

然后重启。

【讨论】:

    【解决方案4】:

    我遇到了同样的问题并解决了这个问题。 确保在conf/context.xml 中没有以下配置

    <Context antiJARLocking="true" antiResourceLocking="true">
    

    如果你有那个,删除两个antiJARLocking="true" antiResourceLocking="true",直接写

    <Context>
    

    【讨论】:

    • 这似乎也适用于静态文件,如 html、js 等,您可能希望在不重启应用程序的情况下进行更新。
    【解决方案5】:

    一个迟到的答案,但其他人可能会觉得这很有用。

    检查Tomcat文件夹的权限,我尝试了很多其他解决方案,但都没有成功。

    最后,我将我的“用户帐户”“完全控制”权限授予 Tomcat 文件夹,并且每当我在 JSP 中进行更改时,Tomcat 都会获取更改。我假设您使用的是 Windows。 这背后的基本原理是:每当您对 JSP 进行更改时,都必须对其进行编译并部署(写入)到 webapps 文件夹。如果该文件夹没有“写入”权限,它将静默失败。这发生在我的案例中。因此,如果 context.xml 中的 reloadable = truedevelopment = true 不起作用,请尝试此权限修复。

    我在 Windows 7 上使用 Tomcat 7。

    【讨论】:

    • 我认为这对我有用...我在工作目录下添加的类和 java 文件没有被拾取,所以我尝试了这个并运行垃圾收集,最后我的 jsp 更新反映在服务器
    【解决方案6】:

    同步服务器和客户端时间

    您可以检查您的服务器时间和客户端系统时间。对我来说,几天前更改服务器时间后正确工作。它反映了 .jsp 文件的变化。

    【讨论】:

      【解决方案7】:

      您需要进入 Eclipse 中的服务器项目并编辑 web.xml 文件并将 'development' 设置为 true。

      【讨论】:

      • 你能说出确切的行吗?我找不到在服务器项目的web.xml 文件中设置的development 选项。
      【解决方案8】:

      打开 META-INF 文件夹中的 context.xml 文件并将 antiJARLocking 设置为 false。

      你的目录树应该如下:

      Web > META-INF > context.xml

      【讨论】:

        【解决方案9】:

        我在带有 Eclipse 的 Windows 7 上使用 TomEE 1.7.2。对我有用的解决方案只是在 localhost-config(在我的 IDE 中)更改 TomEE 服务器的 web.xml 文件,以便开发 init 参数为真:

        <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>
            <init-param>
                <param-name>development</param-name>
                <param-value>true</param-value>
            </init-param>
            <load-on-startup>3</load-on-startup>
        </servlet>
        

        【讨论】:

          【解决方案10】:

          (Tomcat 7.0.62) 我必须去 CATALINA_HOME/temp/xx-mysite/,在 那个 目录树中找到我的 jsp 文件并进行编辑。

          xx 是一个随机(?)前缀数字,在我的例子中是 11,但每个站点都有一个。

          【讨论】:

            【解决方案11】:

            我在 myeclipse 中进行 jsp 更改时也遇到了这个问题,这些在运行时没有反映在应用程序中。 希望这些检查对您有所帮助。

            1. 在 MyEclipse 中双击 Tomcat 服务器。
            2. 点击概览窗口中的发布菜单。
            3. 选择单选按钮“资源更改时自动发布”
            4. 输入发布间隔时间为 1 秒。

            希望对你有所帮助。

            【讨论】:

              【解决方案12】:

              实际上jsp引擎检查jsp页面是否比它的servlet页面旧,并在此基础上决定是否需要更改。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-03-29
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-08-02
                • 1970-01-01
                • 2020-05-27
                • 1970-01-01
                相关资源
                最近更新 更多