본문 바로가기

개발환경/이클립스

[ERROR]java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher

개발환경 : eclipse(europa) 3.3.2 + WTP(JST, WST) 2.0.2 + Tomcat 5.5.2

위의 개발환경으로 웹애플리케이션을 개발할 때 아래와 같은 예외가 발생할 수 있다.
이때 이클립스 클래스패스 상에는 struts-core 가 있기 때문에 문제가 없는데도 에러가 발생한다.

...
심각: Exception starting filter struts2
java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1359)
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
 at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:207)
 at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:302)
 at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:78)
 at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3635)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4222)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
 at org.apache.catalina.core.StandardService.start(StandardService.java:448)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
2009. 5. 29 오후 5:40:08 org.apache.catalina.core.StandardContext start
심각: Error filterStart
...

이럴 경우 다음과 같이 프로젝트 폴더에 있는 .classpath 파일을 확인해 보자

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
  <classpathentry kind="src" output="target/classes" path="src/main/java"/>
  <classpathentry kind="src" output="target/classes" path="src/main/resources"/>
  <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
  <classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>
  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
  <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
  <classpathentry kind="output" path="target/classes"/>
</classpath>


 

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
  <classpathentry kind="src" output="target/classes" path="src/main/java"/>
  <classpathentry kind="src" output="target/classes" path="src/main/resources"/>
  <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
  <classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>
  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
  <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
      <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
    </attributes>
  </classpathentry>
  <classpathentry kind="output" path="target/classes"/>
</classpath>

위와 같이 메이븐의 클래스패스를 수정해 주면 해결된다.

또 다른 해결방법은 워닝을 제거함으로써 위의 내용을 자동으로 추가할 수 있다.

사용자 삽입 이미지

Problems 창을 보면 워닝이 보인다. 이 워닝을 선택하고 Quick Fix(Ctrl + 1)를 통해 처리한다.
사용자 삽입 이미지

이렇게 처리를 하면 메이븐 클래스패스를 처리한 것과 동일하게 변경해 준다.

※ 역시 워닝은 제거를 해야만 한다.~~