【问题标题】:unable to deploy struts2 war on tomcat7无法在tomcat7上部署struts2 war
【发布时间】:2012-06-23 08:20:48
【问题描述】:

我现在觉得自己很愚蠢,但我整天都在挣扎,我一点头绪都没有,不胜感激:)

我开发了一个 struts2 webapp,当我通过 eclipse (indigo sr2) 运行它时,它运行良好,与我自己计算机上安装的 servelt 服务器 apache tomcat 7.0.27 相关。我所做的就是:右键单击我的 webapp 的文件夹 --> 运行方式 --> 在服务器上运行。然后,当我复制和路径我的 servlet 的 url 地址时,它可以在 eclipse 浏览器或其他浏览器(chrome、firefox)中很好地运行。

现在我想做的就是让它在没有 Eclipse 的情况下运行。所以我将我的 webapp 导出到一个 .war 文件中(右键单击 webapp 文件夹 --> 导出 --> War 文件),并尝试使用应用程序管理器 tomcat web 界面部署它:它要求我做的就是浏览通过我的计算机获取战争文件并单击部署按钮。轻松到此为止!

然后我的 webapp 出现在应用程序管理器界面的应用程序选项卡中,但是当我点击“运行”按钮时,我得到的只是这条消息:

失败:上下文路径/MMSProject 的应用程序无法启动

(原始消息是法语,我没有找到如何更改 tomcat7 语言,所以这可能不是您在英语中得到的确切消息,我希望这个翻译足够接近。MMSProject em> 是我的 webapp 的名称)。

因此,我在struts2网站上下载了一些struts2 webapp示例,并尝试使用相同的过程在tomcat7上部署struts2-blank。这个工作得很好:我可以从 tomcat 应用程序管理器中运行它。所以我想我的问题来自我自己的war文件而不是tomcat本身,但由于它是由eclipse生成的,所以这部分过程可能会出错对我来说似乎很奇怪。

所以我坚持这一点。你们知道吗:

  • 如何获得有关问题的更多信息(我查看了 tomcat 日志,但没有找到任何错误消息)。这对我解决问题有很大帮助!
  • 我的 webapp 会从 eclipse 运行但不直接从 tomcat 运行的任何原因?
  • 如何让它从 tomcat 运行? :)

非常感谢您的任何帮助!我现在有点绝望,没想到部署会这么痛苦!

编辑: 我仔细检查了tomcat的日志,实际上在catalina.[date].log中找到了这个:

  • 严重:错误过滤器启动 2012 年 6 月 21 日下午 1:48:42 org.apache.catalina.core.StandardContext startInternal
  • 严重:上下文 [/MMSproject] 由于之前的错误而启动失败
  • 2012 年 6 月 21 日下午 1:48:42 org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
  • Grave:Web 应用程序 [/MMSproject] 创建了一个 ThreadLocal,其键类型为 [com.opensymphony.xwork2.inject.ContainerImpl$10](值 [com.opensymphony.xwork2.inject.ContainerImpl$10@2de3bcb5])和一个[java.lang.Object[]] 类型的值(值 [[Ljava.lang.Object;@427a269c])但在 Web 应用程序停止时未能将其删除。线程将随着时间的推移而更新,以避免可能的内存泄漏。
  • 2012 年 6 月 21 日下午 1:48:42 org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
  • Grave:Web 应用程序 [/MMSproject] 创建了一个 ThreadLocal,其键类型为 [com.opensymphony.xwork2.inject.ContainerImpl$10](值 [com.opensymphony.xwork2.inject.ContainerImpl$10@617ceddc])和一个[java.lang.Object[]] 类型的值(值 [[Ljava.lang.Object;@50e43884])但在 Web 应用程序停止时未能将其删除。线程将随着时间的推移而更新,以避免可能的内存泄漏。

这在 localhost.[date].localhost :

2012 年 6 月 21 日下午 1:48:42 org.apache.catalina.core.StandardContext filterStart 严重:异常启动过滤器 struts2 java.lang.NullPointerException 在 com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209) 在 com.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60) 在 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325) 在 org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:168) 在 com.opensymphony.xwork2.config.ConfigurationManager.conditionalReload(ConfigurationManager.java:220) 在 com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:61) 在 org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:774) 在 org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:191) 在 org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:277) 在 org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258) 在 org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382) 在 org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:103) 在 org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4638) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5294) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1247) 在 org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:747) 在 org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:222) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:186) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 没有基本错误,您应该简单地尝试 CLEAN 并重新构建。

标签: deployment struts2 tomcat7


【解决方案1】:

好的,所以我找到了答案并想发布它以帮助遇到同样问题的人!

这是一个很小的细节,但一旦你知道它可能会为你节省很多挣扎和祈祷的时间:如果你决定使用,在部署之前不要忘记将 struts devMode 切换为 false(在 struts.xml 文件中)它在您开始开发时(即:可能是几个星期前的硬编码!)。

所以基本上这就是你想要在 struts.xml 中拥有的内容:

<constant name="struts.devMode" value="false" />

而不是:

<constant name="struts.devMode" value="true" />

祝大家好运!

【讨论】:

  • 除非你想在 devMode 下工作。 . .这不应该阻止应用程序在 tomcat7 中运行。
  • 好吧,虽然我真的不明白为什么它会阻止应用程序在 tomcat7 中运行,但这是我唯一改变的东西,它突然起作用了......我会重新设置 devMode为真,看看会发生什么并发表新评论以确认或证实这一假设。也许 devMode 生成了与我的应用程序相关的东西,tomcat“不喜欢”,在这种情况下,答案将在我发布的日志中......
  • 与应用运行无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
相关资源
最近更新 更多