我正在使用tomcat7配置动态Web项目时出现'org.apache.catalina.LifecycleException:无法启动组件'错误

时间:2014-09-11 14:05:27

标签: tomcat java-ee

这是我的web.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-
    app_3_0.xsd" id="WebApp_ID" version="3.0">

     <display-name>VideoPlayer</display-name>

     <welcome-file-list>

        <welcome-file>index.html</welcome-file>

        <welcome-file>index.htm</welcome-file>

        <welcome-file>index.jsp</welcome-file>

        <welcome-file>default.html</welcome-file>

        <welcome-file>default.htm</welcome-file>

        <welcome-file>default.jsp</welcome-file>

      </welcome-file-list>

      <servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>com.videoplayer.controller.UploadServlet</servlet-class>

     </servlet>

    <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/UploadServlet</url-pattern>

    </servlet-mapping>

    </web-app>

这是我的Servlet:

      package com.videoplayer.controller;


    import java.io.File;

    import java.io.IOException;

    import java.util.Iterator;

    import java.util.List;



    import javax.servlet.ServletException;

    import javax.servlet.annotation.WebServlet;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;



    import org.apache.commons.fileupload.FileItem;

    import org.apache.commons.fileupload.FileUploadException;

    import org.apache.commons.fileupload.disk.DiskFileItemFactory;

    import org.apache.commons.fileupload.servlet.ServletFileUpload;



    /**

     * Servlet implementation class UploadServlet

     */

    @WebServlet("/UploadServlet")

    public class UploadServlet extends HttpServlet {

        private static final long serialVersionUID = 1L;



        /**

         * @see HttpServlet#HttpServlet()

         */

        public UploadServlet() {

            super();

            // TODO Auto-generated constructor stub

        }



        /**

         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

         */

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            // TODO Auto-generated method stub

        }



        /**

         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

         */

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            // TODO Auto-generated method stub

            boolean isMultiPart = ServletFileUpload.isMultipartContent(request);



            if(isMultiPart)

            {

                DiskFileItemFactory factory = new DiskFileItemFactory();

                ServletFileUpload upload = new ServletFileUpload(factory);



                try {

                    List<FileItem> items = upload.parseRequest(request);



                    Iterator<FileItem> it = items.iterator();



                    while(it.hasNext())

                    {

                        FileItem item = it.next();



                        if(!(item.isFormField()))

                        {

                            String fieldname = item.getFieldName();

                            String filename = item.getName();

                            long fileSize = item.getSize();



                            System.out.println("Field Name is :"+fieldname);

                            System.out.println("File Name is :"+filename);

                            System.out.println("File Size is :"+fileSize);



                            String filepath = "C:"+File.separator;



                            File video = new File(filepath);



                            item.write(video);

                        }

                    }

                } catch (FileUploadException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                } catch (Exception e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

        }



    }

我观察到每当我创建任何servlet映射时,tomcat7都会抛出这个异常。我没有理解web.xml出了什么问题。我试图在servlet中删除@WebServlet,但结果仍然相同。 ..有人可以帮我解决这个问题吗?提前谢谢:)

以下是完整的StackTrace:

    SEVERE: A child container failed during start

    java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/VideoPlayer]]

        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$Worker.runTask(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[/VideoPlayer]]

        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)

        ... 7 more

    Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException

        at java.lang.Class.getDeclaredFields0(Native Method)

        at java.lang.Class.privateGetDeclaredFields(Unknown Source)

        at java.lang.Class.getDeclaredFields(Unknown Source)

        at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106)

        at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:263)

        at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:142)

        at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:67)

        at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:405)

        at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881)

        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

    Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileUploadException

        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)

        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)

        ... 21 more

    Sep 12, 2014 9:47:02 AM 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$Worker.runTask(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

    Sep 12, 2014 9:47:02 AM 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

    Sep 12, 2014 9:47:02 AM org.apache.coyote.AbstractProtocol pause

    INFO: Pausing ProtocolHandler ["http-bio-9080"]

    Sep 12, 2014 9:47:02 AM org.apache.coyote.AbstractProtocol pause

    INFO: Pausing ProtocolHandler ["ajp-bio-8009"]

    Sep 12, 2014 9:47:02 AM org.apache.catalina.core.StandardService stopInternal

    INFO: Stopping service Catalina

    Sep 12, 2014 9:47:02 AM org.apache.coyote.AbstractProtocol destroy

    INFO: Destroying ProtocolHandler ["http-bio-9080"]

    Sep 12, 2014 9:47:02 AM org.apache.coyote.AbstractProtocol destroy

    INFO: Destroying ProtocolHandler ["ajp-bio-8009"]

1 个答案:

答案 0 :(得分:1)

我认为问题的根本原因是:

Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileUploadException

这意味着在类路径中找不到commons-fileupload jar,或者你有两个冲突版本的jar。确保jar包含在您的webapp的WEB-INF/lib目录下。还要确保在类路径中只有该jar的一个版本,并且Tomcat中部署的jar版本与用于编译应用程序的jar版本相同。