32

我正在编辑直接驻留在内部的 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>
4

12 回答 12

32

在 tomcat docs中,查看development设置。它必须设置为 true 才能重新加载 jsps。

development - Jasper 是否用于开发模式?如果为 true,则可以通过 modifyTestInterval 参数指定检查 JSP 是否修改的频率。true 或 false,默认为 true。

这是在你的CATALINA_HOME/conf/web.xml

另外,如果你需要在生产环境中刷新一个jsp而不需要重启,你可以去CATALINA_HOME/work/Catalina/localhost/contentName/org/apache/jsp删除your_jsp.javaandyour_jsp.class文件。它们将在下次访问时重新创建。

编辑:在提供您的配置并评论不刷新内容后,我还有另一个:清除您的浏览器缓存,或从另一个浏览器打开页面。

于 2010-01-05T08:03:29.770 回答
11

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

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

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

于 2014-09-05T11:19:39.337 回答
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>

然后重新启动。

于 2014-03-25T17:25:25.470 回答
6

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

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

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

<Context>
于 2014-12-05T00:16:47.887 回答
3

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

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

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

我在 Windows 7 上使用 Tomcat 7。

于 2013-06-17T04:06:00.540 回答
2

同步服务器和客户端时间

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

于 2013-07-09T18:06:53.633 回答
0

您需要转到 Eclipse 中的服务器项目并编辑 web.xml 文件并将“开发”设置为 true。

于 2013-04-15T18:22:31.360 回答
0

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

您的目录树应如下所示:

Web > META-INF > context.xml

于 2015-06-17T00:50:53.207 回答
0

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

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

于 2016-03-29T17:18:02.513 回答
0

我在带有 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>
于 2016-02-08T16:46:09.603 回答
0

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

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

在此处输入图像描述 在此处输入图像描述

我希望这能帮到您。

于 2017-04-11T17:25:56.180 回答
-2

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

于 2017-06-29T16:08:40.573 回答