본문 바로가기
Apache,Tomcat

java.lang.NoClassDefFoundError: javax/servlet/Filter 문제

by nomore7 2015. 1. 21.



java.lang.NoClassDefFoundError: javax/servlet/Filter


기존 다른 웹 프로젝트가 올라가 있던 서버에 새로운 프로젝트를 올리고  tomcat start하자 위와 같은 에러가 났다.


servlet 관련 라이브러리 중복관련된 상황에서 발생하는 에러이다.


servlet.jar servlet-api.jar 등의 파일이 tomcat 자체 라이브러리와 추가한 프로젝트의 라이브러리로 중복되있는지 확인해야 한다.


나의 경우, 기존에 올라간 프로젝트의 lib에 중복된 라이브러리를 삭제했다.



이러한 상황이 발생 할 수 있기 때문에, 몇몇 라이브러리가 프로젝트에 포함되어 있는지 확인할 필요가 있다.


j2ee.jar 또는 jsp-api.jar , servlet-api.jar , servlet.jar 등이 있다.


위와 같은 jar파일을 프로젝트에서 삭제한다.



최근 버전의 tomcat의 경우 알아서 servlet-api.jar등의 문제를 해결한다.


하지만, 중복된 클래스를 무시하기 때문에, 미리 확인하는 것이 좋다.


에러대신 출력되는 메세지는 다음과 같다.


INFO: validateJarFile(/path/app/WEB-INF/lib/servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class



위와 같은 jar파일 문제가 없을 경우, 다른버전으로 교체해보거나, jar파일을 삭제한 후, 다시 넣어 실행해보면 정상적으로 작동 하는 경우도 있다. 보통 이러한 경우의 문제는, 낮은 버전의 톰캣을 shutdown 하지 않은 상태에서 auto deploy등을 하는 상황에서 에러가 나고 발생하는 경우가 있다.