• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

심각: A child container failed during start

18.09.15 15:37 작성 조회수 9.55k

2

어플리케이션 실행시 아래와같은 메세지가 뜨면서 톰캣실행이 안되는데 어떤부분을 확인해야할까요?

소스코드

어플리케이션 실행시 아래와같은 메세지가 뜨면서 톰캣실행이 안되는데 어떤부분을 확인해야할까요?

package com.dope;

import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class Application {
public static void main(String[] args) throws LifecycleException {
Tomcat tomcat = new Tomcat();
tomcat.setPort(8080);

    Context context = tomcat.addContext("/", "/");

    HttpServlet servlet = new HttpServlet() {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            PrintWriter writer = resp.getWriter();
            writer.println("<html><head><title>");
            writer.println("헬로, 톰캣");
            writer.println("</title></head>");
            writer.println("<body><h1>Hello Tomcat</h1></body>");
            writer.println("</html>");
        }
    };
    String servletName = "helloServlet";
    tomcat.addServlet("/", servletName, servlet);
    context.addServletMappingDecoded("/hello", servletName);

    tomcat.start();
    tomcat.getServer().await();
}

}

에러코드

심각: A child container failed during start

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

at java.util.concurrent.FutureTask.report(FutureTask.java:122)

at java.util.concurrent.FutureTask.get(FutureTask.java:192)

at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)

at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)

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

at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1420)

at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1410)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/]]

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

심각: A child container failed during start

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

at java.util.concurrent.FutureTask.report(FutureTask.java:122)

at java.util.concurrent.FutureTask.get(FutureTask.java:192)

at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)

at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)

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

at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1420)

at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1410)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/]]

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

답변 8

·

답변을 작성해보세요.

11

맥에서는 문제가 없었는데, 윈도에서는 말씀하신 문제가 생기네요. 왜 그런 차이가 생긴지는 모르겠지만, 윈도에서는 docBase에 해당하는 디렉토리를 생성해 주었더니 문제 없이 실행할 수 있었습니다.

public static void main(String[] args) throws LifecycleException, IOException {

Tomcat tomcat = new Tomcat();

tomcat.setPort(8080);

String docBase = Files.createTempDirectory("tomcat-basedir").toString();

Context context = tomcat.addContext("/", docBase);

tomcat.start();

}

위 코드에서 docBase 부분을 참고해 주세요.

좋은 질문 감사합니다.

톨게이트님의 프로필

톨게이트

2023.07.17

안녕하세요. 비슷한 에러코드로 질문드립니다.
1. 질문자분의 코드에는 file 변수가 없었는데, 어떻게 변형해야 하나요?
2. docbase란 디렉토리를 생성하고 위 코드를 복붙하면 되나요?
3 https://www.inflearn.com/questions/940640/%EB%82%B4%EC%9E%A5-%ED%86%B0%EC%BA%A32-%EC%84%9C%EB%B8%94%EB%A6%BF-%ED%86%B0%EC%BC%93-%EC%8B%A4%ED%96%89-%EC%97%90%EB%9F%AC
제 에러상황인데, 제가 많이 지식이 부족해서 응용력이 부족하네요.. 한 번 읽어봐주시면 감사하겠습니다

3

조현열님의 프로필

조현열

2019.05.09

docBase가 궁금해서 Tomcat.class 까보고 이리저리 찾다가 발견했네요

도움이 될만한 정보 공유합니다.

docBase

해당 웹어플리케이션에 대한 Document Base (Context Root로도 알려져 있습니다) 디렉토리, 또는 웹어플리케이션 아카이브 파일의 경로명(웹어플리케이션을 WAR 파일로 직접 실행하는 경우)을 나타냅니다. 이 디렉토리나 WAR 파일에에 대한 절대경로명을 지정할 수도 있고, 이 Context가 정의된 Host의 appBase 디렉토리에 대한 상대경로명을 지정할 수도 있습니다

1

혹시 이미 8080 포트에 다른 톰캣이 떠있던 중 아니었을까요? ps ax | grep tomcat 으로 다른 톰캣 프로세스가 떠있는지 확인해서 죽이고 띄우시거나, 포트 번호를 8080이 아닌 다른 포트 번호로 바꿔서 실행해 보시겠어요?

질문 감사합니다.

0

beststar님의 프로필

beststar

2021.01.25

빠르고 명쾌한 도움 됐습니다! 감사합니다

0

조현열님의 프로필

조현열

2019.05.09

답변보고 문제 해결했습니다!

항상 잘배우고 있습니다 :D

0

임준혁님의 프로필

임준혁

2019.05.03

이 질문 보고 해결했습니다... 윈도우 환경에서 실습하는 시청자들 위해서 영상 수정해주시면 감사할텐데....ㅜㅜ

0

윤동근님의 프로필

윤동근

2018.11.11

win에서는 docBase 가 문제를...신기하네요

0

FULL님의 프로필

FULL

2018.11.10

되네요 ...