【问题标题】:Tomcat 7.0.42 not starting in eclipseTomcat 7.0.42 未在 Eclipse 中启动
【发布时间】:2013-08-31 20:12:45
【问题描述】:

我的 web.xml 文件有问题。 我创建了一个带有 Web 模块版本的 Eclipse 动态 Web 项目:3.0 默认情况下没有 web.xml 文件,我自己创建了一个。

现在当我尝试运行该项目时,我收到了这个错误:

Aug 31, 2013 3:53:47 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre7\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\MySQL\MySQL Server 5.5\bin;C:\Program Files (x86)\PharosSystems\Core;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;.
Aug 31, 2013 3:53:48 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:AJAX_J2EE' did not find a matching property.
Aug 31, 2013 3:53:48 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Aug 31, 2013 3:53:48 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Aug 31, 2013 3:53:48 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 792 ms
Aug 31, 2013 3:53:48 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Aug 31, 2013 3:53:48 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.42
Aug 31, 2013 3:53:48 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/AJAX_J2EE]]
at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/AJAX_J2EE]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
... 7 more
Caused by: java.lang.IllegalArgumentException: The servlets named [testController] and [servlet.testController] are both mapped to the url-pattern [/testController] which is not permitted
at org.apache.catalina.deploy.WebXml.addServletMapping(WebXml.java:335)
at       org.apache.catalina.startup.ContextConfig.processAnnotationWebServlet(ContextConfig.java:2450)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2132)
at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2093)
at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2086)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1293)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)
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:5322)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more

Aug 31, 2013 3:53:48 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.startup.Catalina.start(Catalina.java:691)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more

Aug 31, 2013 3:53:48 PM org.apache.catalina.startup.Catalina start
SEVERE: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.startup.Catalina.start(Catalina.java:691)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 11 more

Aug 31, 2013 3:53:48 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-8080"]
Aug 31, 2013 3:53:48 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
Aug 31, 2013 3:53:48 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Aug 31, 2013 3:53:48 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-bio-8080"]    
Aug 31, 2013 3:53:48 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["ajp-bio-8009"]

我之前在办公室机器上的其他项目也遇到过同样的问题,我可以通过在 eclipse 中清理服务器来处理。

现在我已经清理了我的服务器并删除了服务器,但结果相同。如果我从 web.xml 项目运行中删除 servlet 模块。这就是为什么我猜测问题出在 servlet 映射上,但我看不到问题所在。

我的 Web.xml:

  <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>AJAX_J2EE</display-name>
  <welcome-file-list>
    <welcome-file>/pages/index.html</welcome-file>    
  </welcome-file-list>
  <servlet>
    <display-name>testController</display-name>
    <servlet-name>testController</servlet-name>
    <servlet-class>servlet.testController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>testController</servlet-name>
    <url-pattern>/testController</url-pattern>
  </servlet-mapping>
  </web-app>

感谢任何帮助。在此先感谢:)

【问题讨论】:

  • 来自日志:原因:java.lang.IllegalArgumentException:名为 [testController] 和 [servlet.testController] 的 servlet 都映射到 url-pattern [/testController],这是不允许的org.apache.catalina.deploy.WebXml.addServletMapping(WebXml.java:335) 我可以想象你没有发布完整的 web.xml。你能看看吗?
  • @blackbird014 .. 这是我完整的 web.xml。我省略了刚刚更新的根节点。我在 xml 文件中只映射了一个 servlet,并且只有一个 servlet src/servlet/testController.java
  • 你有一个包调用servlet,包括一个类testController然后看起来是正确的......尝试只调用包而不是servlet和testController.java,TestController.java应该按照惯例以大写字母开头。我没有其他想法。
  • 感谢 blackbird014。我从here 发现了我的错误。也发布了答案。感谢您花时间和精力提供帮助:)

标签: eclipse servlets tomcat7


【解决方案1】:

在 pom.xml 中你错过了在 servlet 的依赖项中写入 (&lt;scope&gt;provided&lt;/scope&gt;) 所以在 servlet 的依赖项中你只需要在 pom.xml 中添加 (&lt;scope&gt;provided&lt;/scope&gt;) 例如&lt;dependency&gt;
&lt;groupId&gt;javax.servlet&lt;/groupId&gt;
&lt;artifactId&gt;jsp-api&lt;/artifactId&gt;
&lt;version&gt;2.0&lt;/version&gt;
&lt;scope&gt;provided&lt;/scope&gt;
&lt;/dependency&gt;
“或” &lt;dependency&gt;
&lt;groupId&gt;servletapi&lt;/groupId&gt;
&lt;artifactId&gt;servletapi&lt;/artifactId&gt;
&lt;version&gt;2.4&lt;/version&gt;
&lt;scope&gt;provided&lt;/scope&gt;
&lt;/dependency&gt; 这个解决方案对我有用。

谢谢

【讨论】:

    【解决方案2】:

    我从here 发现了我的错误。

    我使用“创建 Servlet”向导创建了 Servlet,该向导添加了一个 @WebServlet(/servletName) 注释并且在 web.xml 中没有条目

    然后我在 web.xml 中手动创建了一个条目,该条目在运行时复制了该条目。

    因此,您必须使用 Servlet 3.0 来完成这两者中的任何一个。

    1. 使用注解如下:

      @WebServlet("/testController")
      public class testController extends HttpServlet {    }
      

    2. 为您的 servlet 创建一个 web.xml 条目。

    阅读更多:Servlet 3.0 Annotations

    【讨论】:

    • 如果你出于某种原因想要同时保留 web.xml 中的配置和注解,请在注解中写入:@WebServlet(name="YourServletName",urlPatterns={"/YourURL"})其中 YourServletName 和 YourURL 是 web.xml 中给出的
    猜你喜欢
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多