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

时间:2010-01-05 07:58:56

标签: jsp tomcat tomcat6

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

12 个答案:

答案 0 :(得分:28)

In the tomcat docs,请参阅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文件。它们将在下次访问时重新创建。

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

答案 1 :(得分:9)

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

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

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

答案 2 :(得分:4)

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

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

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

<Context>

答案 3 :(得分:3)

虽然可能很容易理解,但这里有什么&#34;将开发设置为真&#34;意思是(更多用于快速参考):

<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 :(得分:2)

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

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

最后,我将“用户帐户”“完全控制”权限提供给Tomcat文件夹,每当我在JSP中进行更改时,Tomcat都会获取更改。我假设你使用的是Windows。 这背后的基本原理是:无论何时在JSP中进行更改,都必须将其编译并部署(写入)到webapps文件夹。如果该文件夹没有“写入”权限,它将无声地失败。在我的情况下发生了这种情况。因此,如果context.xml中的reloadable = truedevelopment = true不起作用,请尝试此权限修复。

我在Windows 7上使用Tomcat 7.

答案 5 :(得分:1)

同步服务器&amp;客户时间

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

打开META-INF文件夹中的antiJARLocking文件,并将 String sql = "select name, address, date from info"; List<String> binding = new ArrayList<String>(); if(dto.getName() != null){ sql += " where name=?"; binding.add(dto.getName()); } pstmt = conn.prepareStatement(sql); int index=1; for(String p: binding){ log.info("\tindex="+index+", p="+p); pstmt.setString((index++), p); } 设置为false。

您的目录树应如下所示:

网络&gt; META-INF&gt; context.xml中

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

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

xx 是一个随机(?)前缀号码,在我的情况下是11,但每个站点都有一个。

答案 10 :(得分:0)

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

  1. 从MyEclipse双击Tomcat服务器。
  2. 单击“概述”窗口中的“发布”菜单。
  3. 选择单选按钮&#34;资源更改时自动发布&#34;
  4. 输入发布间隔时间为1秒。
  5. enter image description here enter image description here

    我希望这会对你有所帮助。

答案 11 :(得分:-2)

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