【问题标题】:Exception when running Tomcat server org.apache.catalina.deploy.WebXml addServlet运行 Tomcat 服务器 org.apache.catalina.deploy.WebXml addServlet 时出现异常
【发布时间】:2012-10-22 18:23:20
【问题描述】:

我已经使用 eclipse 在我的本地机器上编写了几个 servlet。我已经在本地机器上测试了它们,一切正常。

然后,我将我的项目导出为 .war 文件,并将其放在我只能通过 ssh 访问的另一台机器中我的 tomcat 的 webapps 目录下。我重新启动了我的 tomcat 服务器,在查看日志文件后,我发现它抛出了以下异常:

java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet
at org.apache.tomcat.util.IntrospectionUtils.callMethod1(IntrospectionUtils.java:855)
at org.apache.tomcat.util.digester.SetNextRule.end(SetNextRule.java:201)
at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1051)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:604)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1759)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2915)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:625)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:819)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:748)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1208)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:525)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1537)
at org.apache.catalina.startup.ContextConfig.parseWebXml(ContextConfig.java:1875)
at org.apache.catalina.startup.ContextConfig.getDefaultWebXmlFragment(ContextConfig.java:1472)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1250)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:369)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5173)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:968)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1646)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)

不知道这意味着什么?

【问题讨论】:

  • 这个帖子可以帮助你。 link
  • 我看过那个帖子,但我没有使用 maven,也没有编辑 web.xml。据我了解,我不应该在 servlet3.0 中需要 web.xml,因为它们已被注释取代。如果是这种情况,为什么我会收到此错误?
  • 检查您是否在两个地方运行相同的版本。通常它应该没关系。因此,请提供您和远程机器的版本。请同时发布您的 web.xml sn-p。您可以在整个堆栈跟踪中看到 Xerces。 web.xml 中有一些 servlet 无法加载。停止远程 Tomcat 服务器。清理你的临时和工作目录。 Tomcat 启动后会分解战争文件。你能确认目录中没有同名文件吗?

标签: java tomcat servlets


【解决方案1】:

我找到了解决方案here

我是对的,因为您不再需要 web.xml。您可以简单地使用注释来定义您的 servlet 的路径。但问题是我在我的库中包含了 catalina.jar,这导致了问题。删除 catalina.jar 解决了问题!

【讨论】:

  • 仔细阅读:stackoverflow.com/questions/4076601/… 如果您出于某种不明显的原因将catalina.jar 放在/WEB-INF/lib 中(我无法想象任何合理的初学者错误作为原因),那么您可能有还做错了一些其他事情。
  • 我在网上看到我应该把我所有的 jar 放在 /WEB-INF/lib 下。尽管我已将所有 jars 添加到我的项目中,但我在该目录中看不到它们,并认为它可能会在以后引起问题。所以,我基本上手动将所有 jar 复制并粘贴到 /WEB-INF/lib 中,这是我不应该的。但是感谢那个链接,帮助了。
  • 这无疑是指特定于 webapp 的 JAR,而不是特定于 servletcontainer 的 JAR。
  • maven 依赖项将一些 Tomcat 或其他 servlet 容器的 JAR 添加到您的项目中(在您不知情的情况下)也可能发生这种情况。我就是这样。
【解决方案2】:

我在项目中使用 maven 后遇到了这个问题。正如亚当所说,我删除了 maven 依赖项中的所有 tomcat 库,然后问题修复了。

【讨论】:

    猜你喜欢
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2017-03-07
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多