tomcat - 使用 tomcat7 配置动态 Web 项目时出现 'org.apache.catalina.LifecycleException: Failed to start component' 错误

标签 tomcat jakarta-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"]

最佳答案

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

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

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

关于tomcat - 使用 tomcat7 配置动态 Web 项目时出现 'org.apache.catalina.LifecycleException: Failed to start component' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25789592/

相关文章:

security - 将客户端证书的 DN 传递给 Tomcat 中已部署的应用程序

eclipse - Tomcat webapp 无故停止工作 : The requested resource is not available

rest - 为什么 HTTP 选项请求不安全

apache - 使用 mod_jk 将用户名和客户端证书从 apache 传递到 tomcat

javascript - 关于如何使用 IntelliJ 调试器运行 Glassfish Server 的细节?

java - 如何在jsp中访问struts2属性值?

angular - Tomcat 重写规则 Angular 5 应用程序?

java - 如何在 Java 上为网站创建漂亮的 URL(永久链接)?

java - Web 服务 SOAP 请求的默认超时?

java - 使用struts在java中配置网站电子邮件