원인
(web.xml)
<servlet-class>org.springframework.web.servlet.DispatcherServlet.class</servlet-class>
해결
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
Spring MVC (스프링 웹 MVC) 강의 05 - dispatcher-servlet.xml
(https://late90.tistory.com/131?category=1013269)
편에서

그렇게 .class는 필히 꼭 지워줘야 한다고 해놓고는
정작
지운줄 알았는데 안지워져 있어서 날 고생 시킨 구문이다.
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-class>org.springframework.web.servlet.DispatcherServlet.class</servlet-class>
class를 붙인 채로 실행 시키면 아래와 같은 오류를 보게 될 것이다.

HTTP 상태 500 – 내부 서버 오류
타입 예외 보고
메시지 서블릿 클래스 [org.springframework.web.servlet.DispatcherServlet.class](으)로부터 인스턴스 생성하는 중 오류 발생
설명 서버가, 해당 요청을 충족시키지 못하게 하는 예기치 않은 조건을 맞닥뜨렸습니다.
예외
javax.servlet.ServletException: 서블릿 클래스 [org.springframework.web.servlet.DispatcherServlet.class](으)로부터 인스턴스 생성하는 중 오류 발생
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:833)
근본 원인 (root cause)
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet.class
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1407)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:833)
비고 근본 원인(root cause)의 풀 스택 트레이스를, 서버 로그들에서 확인할 수 있습니다.
원인과 해결을 알고나니 왜 이것 가지고 24시간을 고생했나 허무 하지만

Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer
오타난 줄 모를땐 저기 pom.xml의 오류 때문에 안되는 줄 알고
개발 환경을 바꿔가며 시도 해보고 난 뒤 오타를 발견 했고 저 오류 문제가 아닌 것을 알 수 있었다.
개별 환경은 바꾼 시도는
1. 이클립스 Java EE
2. 이클립스 spring
으로 시도했다.
위 두 환경에선 모두 저 에러가 안 떴다.
하지만 뉴렉처님 강의보고 진행중인
3. STS4 Java ee 개발환경에서는
저런 오류가 뜨지만 실행에는 영향을 안주고 있는걸로 보인다.
이런 뻘짓을 하는 와중에 위 세가지 개발 환경의 차이는 뭘까라는 궁금증이 생겼다.
처음에 이클립스 Java EE로 개발시도할때는

import org.springframework.web.servlet.mvc.Controller;
가 일시적으로 import 안되는 현상이 있어서
1. 이클립스 Java EE -> 2. 이클립스 spring
으로 바꾸니 임포트는 바로 됐지만

이 부분에서 일시적으로 x오류 마크가 떴었다.
하지만 모두 일시적 현상이었던 것 같고
1. 이클립스 Java EE
2. 이클립스 spring
3. STS4 Java ee
세가지 개발환경에 차이점을 모르겠다.
다음에..언젠가 한번 공부를 해봐야겠다.

Marven Project와
Spring Legacy Project의 차이점도 같이..

스프링 템플릿..?

'Spring' 카테고리의 다른 글
| Spring MVC (스프링 웹 MVC) 강의 08 - ViewResolver 사용하기 (0) | 2022.01.04 |
|---|---|
| Spring MVC (스프링 웹 MVC) 강의 07 - View 페이지를 위한 위치 (0) | 2022.01.04 |
| STS4 JRE 추가 및 변경하기 (0) | 2022.01.03 |
| Spring MVC (스프링 웹 MVC) 강의 06 - 스프링 컨트롤러 IndexController 작성하기 (0) | 2022.01.03 |
| Spring MVC (스프링 웹 MVC) 강의 05 - dispatcher-servlet.xml 파일 (0) | 2022.01.03 |
댓글