我正在学习Servlet编程,在Ubuntu 8.10机器上使用Apache Tomcat 6,而且我正在运行一个非常恼人的问题 - 显然,与缓存有关。
这就是我正在做的事情:我编写一个servlet,将它放在一个漂亮的目录结构中,并使用Tomcat Web应用程序管理器进行部署。它按预期工作。然后我编辑servlet,重新编译并尝试再次访问它,但Tomcat仍然返回相同的旧版本。重新加载应用程序甚至重新启动服务器不起作用。唯一有效的是“取消部署”应用程序,然后再重新部署它。
每次对代码进行任何小改动时,我都必须这样做。很糟糕。
我确信有办法解决这个问题,但我无法在网络上的任何地方找到答案(我经常搜索)。我真的很感激任何帮助。谢谢!
答案 0 :(得分:3)
来自Adeel Ansari的建议存在缺陷:您永远不应该使用特定于webapp的配置修改CATALINA_HOME / conf / context.xml。这就是你的webapp / META-INF / context.xml的用途。
您也不应该指定< Context>的“docBase”属性。 您也不应该指定< Context>。
的“path”属性OP有几种选择:
使用管理器重新加载Web应用程序(不需要取消部署/重新部署:应该使用简单的重新加载) (http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Reload_An_Existing_Application)
将META-INF / context.xml中的元素设置为reloadable =“true” (http://tomcat.apache.org/tomcat-6.0-doc/config/context.html)
如果您需要有关Tomcat的帮助,请加入用户的邮件列表并获得一些真实答案。
答案 1 :(得分:2)
在您的TOMCAT_HOME / conf /下,您将找到名为Context.xml的文件。内容如下所示,
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/classes</WatchedResource>
</Context>
这两行都没有注释,你也应该取消注释。您可能会对第二个评论或根本没有评论。尝试取消注释,或在后一种情况下添加它。我假设您正在TOMCAT_HOME / webapps下部署您的应用程序。
<强> [编辑] 强>
尝试在上下文元素下使用 docBase 和路径 attribure。以下是示例
<Context docBase="path-to-WEB-INF" path="/your-app">
注意:请勿包含WEB_INF
<强> [编辑] 强>
可能是我错过了什么。检查this。它是相同的,但更加清晰和描述性,包括其他一些选项。
答案 2 :(得分:2)
我遇到过与Tomcat 5.5类似的问题。我从来没有想出根本原因,但我通过从%CATALINA_HOME%/ work / Catalina / localhost删除对应于webapp的文件夹来解决它。它不是一个很好的解决方案,但它避免了你必须取消部署/重新部署整个应用程序。
答案 3 :(得分:1)
您没有说明您是使用ubuntu tomcat还是单独从tomcat.apache.org下载。如果您使用的是ubuntu,请尝试使用单独的下载更简单。标准下载非常易于管理,而且非常适合开箱即用。可能(我不知道)ubuntu可能更多地配置为生产用途,例如它可能有点硬化。
tomcat的推荐生产设置就是您所描述的(例如,没有自动部署等)。开发设置更容易使用。
答案 4 :(得分:0)
如果您使用Netbeans,它会自动重新编译该类,并在您保存文件时将其注入正在运行的webapp。没有其他步骤,只需点击保存即可。