스프링 부트 - java.lang.ClassNotFoundException: javax.servlet.Servlet Context에서 Embedded Web Application Context를 시작할 수 없음
Spring Boot 어플리케이션(Grails 3.1.8)을 사용하고 있는데 IntelliJ IDEA에서 어플리케이션을 실행하면 다음과 같은 오류가 발생합니다.
Caused by: java.lang.IllegalStateException: Failed to introspect annotated methods on class org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport
at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:163)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:292)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:232)
at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:510)
... 26 common frames omitted
Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:152)
... 29 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 33 common frames omitted
컨스트럭터 슬로우 예외에 대한 답변에서 제시된 대로 javax-servlet-api 의존관계를 추가하려고 했습니다.네스트된 예외는 java.lang입니다.NoClassDefFoundError: javax/servlet/ServletContext
하지만 그제서야 알게 됐어요
ERROR org.springframework.boot.SpringApplication - Application startup failed
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766)
at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
at grails.boot.GrailsApp.run(GrailsApp.groovy:55)
at grails.boot.GrailsApp.run(GrailsApp.groovy:374)
at grails.boot.GrailsApp.run(GrailsApp.groovy:363)
at grails.boot.GrailsApp$run.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
at closemytab.Application.main(Application.groovy:13)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:185)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:158)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
... 18 common frames omitted
이 투고에서는 javax-servlet-api: Spring boot -- Embedded Servlet Container Factory bean이 없어 Embedded Web Application Context를 시작할 수 없습니다.
하지만 난 원래의 문제에 직면하게 된다.
무슨 생각 있어?
build.gradle 파일에서 문제가 발생했습니다.
provided "org.springframework.boot:spring-boot-starter-tomcat"
IntelliJ IDEA는 제공된 정보에 만족하지 않았습니다.
로 바꾸자마자
compile "org.springframework.boot:spring-boot-starter-tomcat"
어플리케이션이 동작했습니다.
Maven Spring Boot 목표를 가지고 실행:
spring-boot:run
IntelliJ IDEA에서 Maven 구성을 설정하는 절차:
Menu Debug/Run Configuration(메뉴 디버깅/실행 구성) → 왼쪽 상단에 보이는 + 버튼을 클릭합니다. → Maven 선택 → 명령줄을 다음으로 설정합니다.spring-boot:run.
IntelliJ IDEA를 사용하는 경우 실행 → 구성 편집 → 응용 프로그램 → '기본적으로 사용 안 함' 메뉴에서 '공급자 범위에 종속성 포함'을 활성화해야 합니다.

아래의 의존관계를 추가하면 문제가 해결되었습니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
부모에 대한 의존도 잊지 마세요!
저는 Tomcat 버전 때문입니다.Tomcat 버전을 7.5에서 8.5로 변경했는데 문제가 해결되었습니다.
Exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext어플리케이션에 Tomcat 의존관계를 제공하지 않는 것을 의미합니다.IntelliJ IDEA 를 사용하고 있는 경우는, 아래와 같이 간단하게 할 수 있습니다.
프로젝트를 선택합니다. → Maven 패널을 엽니다(대부분 패널의 오른쪽 상단에 있음). → Embedded를 선택합니다.

언급URL : https://stackoverflow.com/questions/37938289/spring-boot-java-lang-classnotfoundexception-javax-servlet-servletcontext-and
'codememo' 카테고리의 다른 글
| 앵귤러 블루버드는 어떻게 사용하나요? (0) | 2023.02.16 |
|---|---|
| spring boot war(tomcat 포함 안 함) (0) | 2023.02.16 |
| 리액트 리액트 리액트 리액트 리액트 리액트 리액트 리액트 리 (0) | 2023.02.16 |
| 폼 제출 시 모든 폼 필드를 ng-touched로 프로그래밍 방식으로 설정 (0) | 2023.02.16 |
| Javascript용 밑줄을 사용하여 중복 개체 제거 (0) | 2023.02.16 |