IDE에서 embedded tomcat을 직접 실행할 때 발생하는 에러 해결

2013-10-22 11:50

eclipse에서 WTP와 같은 플러그인을 사용하지 않고 embedded WAS를 직접 사용하는 경우가 있다. tomcat 버전 또한 embedded 버전이 나와 eclipse에서 직접 실행하도록 설정했다.

https://devcenter.heroku.com/articles/create-a-java-web-application-using-embedded-tomcat 문서를 참고해 정말 쉽게 embedded tomcat을 사용하도록 설정했다. 그런데 다음과 같은 에러가 발생.

10월 22, 2013 11:46:56 오전 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[Tomcat].StandardHost[localhost].StandardContext[/]]
	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[Tomcat].StandardHost[localhost].StandardContext[/]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	... 7 more
Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig;
	at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1311)
	at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1352)
	at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:369)
	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:5173)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 7 more

원인은 tomcat 버전이 servlet 2.5을 사용하지 않고 servlet 3.0을 사용하면서 발생하는 이슈였다. 즉, 프로젝트에 의존관계를 맺고 있는 servlet 2.5 버전을 다음과 같이 3.x 버전으로 업그레이드하면 해결할 수 있다.

JDK 7.0 이상을 사용하는 경우

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

JDK 6.0 이상을 사용하는 경우

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

위와 같이 해결했더니 정말 깔끔하게 해결되었다. IDE에 embedded tomcat 연동하는 작업은 정말 간단하군. 앞으로 WTP는 버리고 embedded tomcat 사용하련다.

4개의 의견 from SLiPP

2017-07-05 15:31
    <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>6.0.6</version>
    </dependency>

최신버전으로 설치해보세요 저는 최신버전으로 햇더니 문제없이 톰캣 기동 되었네요

2018-08-06 09:09

같은 오류로 구글링하며 돌고돌아 여기까지 왔습니다. servlet버전 때문이란 것을 여러곳에서 확인했는데요. 정확하게 어떤 버전이 맞아야 하는건가요? 말씀하신대로 pom.xml에서 javax.servlet-api의 버전수정을 했는데도... 같은오류가 발생합니다. 참고로 저의 환경은 비교적 최신버전들을 사용하는데요.

자바 1.8(jdk 1.8.0_181 톰캣 8.0(80.053) 전자정부프레임워크3.6 사용합니다.

아파치 폴더에 있는 servlet-api.jar파일을 jdk폴더에 복사하라는 것도 있었는데... 그것도 복사해두니 안되구요... 이것 때문에 1주일을 시간허비를 하고 있는데 미치겠네요 ㅠ.ㅜ

혹시 내용 좀 더 정확하게 설명가능하시면 답글 부탁드리겠습니다. 감사합니다.

의견 추가하기

연관태그

← 목록으로