无法在tomcat7上部署struts2 war

时间:2012-06-21 06:03:57

标签: deployment struts2 tomcat7

我现在感到非常愚蠢,但我一整天都在苦苦挣扎,而且我没有任何线索,一些帮助会受到赞赏:)

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

现在我想做的就是让它在没有日食的情况下运行。所以我在.war文件中导出我的webapp(右键单击webapp文件夹 - > export - > War文件),并尝试使用app manager tomcat web界面部署它:它要求我做的全部是通过我的电脑浏览war文件并单击部署按钮。容易到目前为止!

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

  

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

(原始邮件是法语,我没有找到如何更改tomcat7语言,所以这可能不是你用英语写的确切信息,我希望这个翻译足够接近。 MMSProject 是我的webapp的名称。

因此,我在struts2网站上下载了一些struts2 webapp示例,并尝试使用相同的进程在tomcat7上部署struts2-blank。这个工作非常好:我可以从tomcat app manager运行它。所以我猜我的问题来自我自己的war文件,而不是来自tomcat本身,但是因为它是由eclipse生成的,所以我觉得这部分过程可能出错了。

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

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

非常感谢您的任何帮助!我现在有点绝望,不认为部署会如此痛苦!

编辑: 我已经仔细检查了tomcat的日志,并在catalina中实际发现了这个。[date] .log:

  
      
  • Grave:错误filterStart   juin 21,2012 1:48:42 PM org.apache.catalina.core.StandardContext startInternal
  •   
  • 严重:由于以前的错误,上下文[/ MMSproject]启动失败
  •   
  • juin 21,2012 1:48:42 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
  •   
  • Grave:Web应用程序[/ MMSproject]使用[com.opensymphony.xwork2.inject.ContainerImpl $ 10]类型的键创建了一个ThreadLocal(值[com.opensymphony.xwork2.inject.ContainerImpl$10@2de3bcb5])和类型[java.lang.Object []]的值(值[[Ljava.lang.Object; @ 427a269c])但在Web应用程序停止时无法将其删除。线程将随着时间的推移而更新,以避免可能的内存泄漏。
  •   
  • juin 21,2012 1:48:42 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
  •   
  • 格雷夫斯: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:

  

juin 21,2012 1:48:42 PM 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)       at 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)       at 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)       at 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)       在java.lang.Thread.run(未知来源)

1 个答案:

答案 0 :(得分:4)

好的,所以我找到了anwser并想发布它以帮助那些有同样问题的人!

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

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

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

而不是:

<constant name="struts.devMode" value="true" />
祝大家好运!