Translate

[IntelliJ][Maven] Spring 셋팅 후 "java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet" 에러




IntelliJ ver: 14.1.4



증상

Maven 과 연동하여 Spring 셋팅을 했는데 기본적인 jsp 는 정상적으로 호출이 되었다.
하지만 Controller 부분의 ~~.do 를 호출 시 아래와 같이 출력이 되었다.


Error instantiating servlet class org.springframework.web.servlet.DispatcherServlet
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet










기본적인 부분은 이미 체크를 해보고 여러번 셋팅을 해봤는데 문제는 없었다.
(아래의 3가지는 초급개발자라면 실수할 수 있기에 인터넷에서 가장 많은 답변으로 달리는 내용이다.)

1. Maven 사용하지 않는다면 /WEB-INF/lib 디렉토리에 Sping 라이브러리가 들어있는지 여부
2. Maven 사용한다면 pom.xml 에 Sping 관련 라이브러리가 추가되어 있는지 여부
3. IDE 에서 Build Path 가 정상적으로 잡혀있는지 여부








나의 경우의 문제는 아래와 같았다.


1. Artifacts 설정을 확인 시 'Available Elements' 부분에 spring-web-mvc 라이브러리가 포함되어있지 않았다.
  (maven 에서 spring-web-mvc 라이브러리를 받기전에 Artifacts 설정을 했나보다.)






2. Module 의 Dependencies 에는 spring-web-mvc 라이브러리가 정상적으로 있었다.
   (그렇기 때문에 빌드는 정상적으로 되지만 WAS에서 정상적으로 해당 라이브러리를 불러올 수 없었던 것이었다.)






3. Artifacts 에서 기존의 Artifact 를 삭제하고 Artifact를 새로 생성하니 아래와 같이 보여졌다.





* 위와같이 셋팅하니 정상적으로 Controller 가 작동되는 것을 확인했다.


======================================
내용 추가 2015.08.14

http://stackoverflow.com/questions/11227395/java-lang-classnotfoundexception-org-springframework-web-servlet-dispatcherserv

stackoverflow 답변을 보니 Artifact 의 'Output Layout' 에서 /WEB-INF/lib 디렉토리에 라이브러리가 추가되어 있는지를 확인하라고 되어있다.
다시한번 셋팅되어 있는 것을 확인해보니 lib 디렉토리에 라이브러리가 모두 추가되어 있었다.

Artifact 를 지우고 다시 설정해 줘도 되지만 WAS설정을 다시 해야 한다는 불편함이 있어서 다음에는 lib 만 바로 등록하고 사용을 해야겠다.












===============================================
당연한 이야기지만 Artifact 를 지우고 다시 추가했으니 WAS의 Context 또한 다시 셋팅을 했다.


1. 아래와 같이 'Edit Configurations' 선택




2.  기존에 선택된 Artifact 를 삭제




3. 배포할 Context를 추가 (Add 버튼 클릭 후 Artifact 선택)




4. 새로 등록한 Artifact 가 등록된 것을 확인 후 WAS를 재구동



댓글