Search
Duplicate

[에러 처리] java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener

Created time
2023/05/30 07:14
Last edited time
2023/07/11 03:32
Status
Done
tag

들어가기에 앞서

참고한 자료를 바탕으로 비전문가가 정리한 글이므로 오류가 있을 수 있습니다.
오류에 대한 지적 사항은 언제든지 환영합니다. 부디 댓글로 알려주시길 바랍니다. 감사합니다.

발생 원인

결론부터 말하면, Tomcat 10이상 버전에서 일어나는 호환성 문제이다. 9이하 버전으로 다운그레이드하면 해결된다.
Tomcat 10은 Jakarta EE 9 버전의 일부인 Servlet API 5.0을 기반으로 한다. 또한, Jakarta EE 9 버전부터 모든 패키지의 이름을 javax.servlet에서 jakarta.servlet로 바꿨는데 배포하려는 웹 어플리케이션이 jakarta.serlvet과 호환이 안 되서 에러가 발생한 것이다.

해결

해결방법은 크게 3가지이다.
1.
톰캣을 9이하 버전으로 다운그레이드한다.
2.
pom.xml, build.gradle과 같은 프로젝트 빌드 도구 설정 파일의 디펜던시들을 Jakarta EE 9 버전과 호환되는 버전으로 다시 설정한다.
3.
conf\Catalina\localhost\[contextname].xml 경로에 있는 xml파일에서 <Context>태그의 설명부를 아래와 같이 수정한다. (servlet4.0버전과 호환되게 변경)
<Context> ... <Loader jakartaConverter="TOMCAT" /> </Context>
Plain Text
복사

참고