작성
·
11K
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 부분을 참고해 주세요.
좋은 질문 감사합니다.
3
docBase가 궁금해서 Tomcat.class 까보고 이리저리 찾다가 발견했네요
도움이 될만한 정보 공유합니다.
docBase
해당 웹어플리케이션에 대한 Document Base (Context Root로도 알려져 있습니다) 디렉토리, 또는 웹어플리케이션 아카이브 파일의 경로명(웹어플리케이션을 WAR 파일로 직접 실행하는 경우)을 나타냅니다. 이 디렉토리나 WAR 파일에에 대한 절대경로명을 지정할 수도 있고, 이 Context가 정의된 Host의 appBase 디렉토리에 대한 상대경로명을 지정할 수도 있습니다
1
혹시 이미 8080 포트에 다른 톰캣이 떠있던 중 아니었을까요? ps ax | grep tomcat 으로 다른 톰캣 프로세스가 떠있는지 확인해서 죽이고 띄우시거나, 포트 번호를 8080이 아닌 다른 포트 번호로 바꿔서 실행해 보시겠어요?
질문 감사합니다.
0
0
0
0
0
안녕하세요. 비슷한 에러코드로 질문드립니다.
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
제 에러상황인데, 제가 많이 지식이 부족해서 응용력이 부족하네요.. 한 번 읽어봐주시면 감사하겠습니다