如何让Tomcat停止缓存我的servlet响应?

我正在学习Servlets编程,在Ubuntu 8.10机器上使用Apache Tomcat 6,我正在运行一个非常烦人的问题 – 显然,与缓存有关。

这就是我正在做的:我编写一个servlet,将它放在一个漂亮的目录结构中,并使用Tomcat Web应用程序管理器进行部署。 它按预期工作。 然后我编辑servlet,重新编译并尝试再次访问它,但Tomcat仍然返回相同的旧版本。 重新加载应用程序甚至重新启动服务器不起作用。 唯一有效的是“取消部署”应用程序,然后再重新部署它。

每次我对代码做一些小改动时,我都必须这样做。 太糟糕了。

我确信有一种方法可以解决这个问题,但我无法在网络上的任何地方找到答案(我做了很多搜索)。 我真的很感激任何帮助。 谢谢!

来自Adeel Ansari的建议存在缺陷:您永远不应该使用特定于webapp的配置修改CATALINA_HOME / conf / context.xml。 这就是your-webapp / META-INF / context.xml的用途。

您也不应该指定的“docBase”属性。 您也不应该指定的“path”属性。

OP有几种选择:

  1. 使用管理器重新加载Web应用程序(不需要取消部署/重新部署:简单的重新加载应该起作用)( http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Reload_An_Existing_Application

  2. 在META-INF / context.xml中设置元素以使reloadable =“true”( http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

如果您需要有关Tomcat的帮助,请加入用户的邮件列表并获得一些真实的答案。

我遇到过与Tomcat 5.5类似的问题。 我从来没有想出根本原因,但我通过删除%CATALINA_HOME%/ work / Catalina / localhost中与webapp相对应的文件夹来解决这个问题。 它不是一个很好的解决方案,但它避免了你必须取消部署/重新部署整个应用程序。

在您的TOMCAT_HOME / conf /下,您将找到名为Context.xml的文件。 内容如下所示,

   WEB-INF/web.xml WEB-INF/classes  

这两行都没有注释,你也应该取消注释。 您可能会对第二个评论或根本没有评论。 尝试取消注释,或在后一种情况下添加它。 我假设您正在TOMCAT_HOME / webapps下部署您的应用程序。

将post

尝试在Context元素下使用docBasepath attribure。 以下是示例

  

注意:不要包含WEB_INF

将post

可能是我错过了什么。 看看这个 。 它是相同的,但更加清晰和描述性,包括其他一些选项。

你没有说你是在使用ubuntu tomcat还是从tomcat.apache.org单独下载。 如果您使用的是ubuntu,请尝试使用单独的下载更简单。 标准下载非常易于管理,而且非常适合开箱即用。 可能(我不知道)ubuntu可能更多地配置为生产用途,例如它可能有点硬化。

tomcat的推荐生产设置就是您所描述的(例如,没有自动部署等)。 开发设置更容易使用。

如果您使用Netbeans,它会自动重新编译该类,并在您保存文件时将其注入正在运行的webapp。 没有其他步骤,只需点击保存即可。