1

我现在真的很愚蠢,但我整天都在挣扎,我一点头绪都没有,不胜感激一些帮助:)

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

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

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

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

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

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

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

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

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

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

  • Grave: Error filterStart juin 21, 2012 1:48:42 PM 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 SEVERE: com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading (FileManager.java: 209) 在 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325) 在 org.apache.struts2.config 的 com.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60) .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) at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:191) at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:277) at 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) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) at 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) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) at java.util .concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java: 307) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 在 java.lang.Thread.run(Unknown Source) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java: 307) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 在 java.lang.Thread.run(Unknown Source) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)在 java.lang.Thread.run(Unknown Source) 处运行(Unknown Source)在 java.lang.Thread.run(Unknown Source) 处运行(Unknown Source)

4

1 回答 1

4

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

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

所以基本上这就是你想要的 struts.xml :

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

代替 :

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

祝大家好运!

于 2012-06-21T14:59:37.967 回答