【问题标题】:Why do I get "HTTP Status 503 - This application is not currently available" in tomcat 6?为什么我在 tomcat 6 中得到“HTTP 状态 503 - 此应用程序当前不可用”?
【发布时间】:2012-01-15 07:11:43
【问题描述】:

我有一个使用 Struts2 和 Spring 为 DI 编写的应用程序,并且我使用 Tomcat 6 作为容器。假设我在 Tomcat 上部署后将应用程序打包为 my-application.war,我可以通过 http://my-host/my-application 访问它。
当我删除 .war 文件时,Tomcat 应该取消部署应用程序,根据here 当我尝试http://my-host/my-application 时,我应该得到:

HTTP Status 404

但我得到了:

HTTP Status 503 - This application is not currently available

当我将应用程序重新部署到相同的上下文路径时,我得到一个奇怪的异常:

Unable to instantiate Action, [ActionClass], defined for '' in 
namespace '/' Failed to convert value of type [MyClass] to required type 
[MyClass] for property 'myClass': no matching editors or conversion strategy 
found

其中 ActionClass 具有 MyClass 类型的属性 myClass,该属性由 Spring 注入,默认为单例。这很奇怪,因为两个对象的类型相同。我怀疑应用程序一开始并没有完全取消部署,因为当我重新启动 Tomcat 时,场景会重复。我将不胜感激找到可能的原因。

【问题讨论】:

    标签: spring tomcat struts2 tomcat6


    【解决方案1】:

    嗯,我想我找到了答案。正如我猜测的那样,问题出在不正确的取消部署上。

    似乎在不重新启动 tomcat 的情况下部署和取消部署应用程序是一件棘手的事情。当您部署应用程序时,Tomcat 类加载器会加载应用程序中的类,一旦加载它们,它们似乎不会因取消部署而被卸载。并且不断地部署和取消部署应用程序会导致严重的内存泄漏。这种情况对于单例来说尤其如此,因为 JVM 中剩余的对象版本与新部署的类不匹配。因此我得到了上面的错误。

    每次重新部署任何应用程序时,安全路径似乎都会重新启动 Tomcat。
    消息来源帮助我找到了这些信息:

    【讨论】:

      猜你喜欢
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 2015-09-17
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多