본문 바로가기
목차
Spring

Spring MVC- dispatcher-servlet.xml 파일 오타

by 지각생 2022. 1. 4.
728x90

원인

(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의 차이점도 같이..

스프링 템플릿..?

 

728x90

댓글