Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- DFS와BFS
- Vue
- 안드로이드
- cos pro 1급
- Python
- DART
- C++
- BAEKJOON
- 개발
- 동적계획법과최단거리역추적
- 백준
- cos pro
- 파이썬
- android
- vuejs
- 코드품앗이
- 동적계획법
- codingtest
- 코딩테스트
- cos
- AndroidStudio
- issue
- Flutter
- 분할정복
- django
- Algorithm
- 알고리즘
- 코테
- DFS
- 안드로이드스튜디오
Archives
- Today
- Total
Development Artist
[Issue, Spring] Unable to start web server, jakarta.servlet.http.HttpSessionContext 본문
TroubleShooting/Spring Issue
[Issue, Spring] Unable to start web server, jakarta.servlet.http.HttpSessionContext
JMcunst 2023. 8. 19. 18:53728x90
반응형
이슈
토비의 스프링을 공부하던 중, Tomcat에서 Jetty로 변경하는 코드를 똑같이 썼음에도 다음과 이슈 발생.
2023-08-19T17:21:24.316+09:00 INFO 55221 --- [ main] j.s.helloboot.HellobootApplication : Starting HellobootApplication using Java 20.0.1 with PID 55221 (/Users/jeongmokhwang/jmcunst/study/spring-boot/helloboot/out/production/classes started by jeongmokhwang in /Users/jeongmokhwang/jmcunst/study/spring-boot/helloboot)
2023-08-19T17:21:24.319+09:00 INFO 55221 --- [ main] j.s.helloboot.HellobootApplication : No active profile set, falling back to 1 default profile: "default"
2023-08-19T17:21:24.523+09:00 WARN 55221 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server
2023-08-19T17:21:24.536+09:00 ERROR 55221 --- [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.context.ApplicationContextException: Unable to start web server
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:164) ~[spring-boot-3.1.2.jar:3.1.2]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:602) ~[spring-context-6.0.11.jar:6.0.11]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.1.2.jar:3.1.2]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-3.1.2.jar:3.1.2]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:436) ~[spring-boot-3.1.2.jar:3.1.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) ~[spring-boot-3.1.2.jar:3.1.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.2.jar:3.1.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.2.jar:3.1.2]
at jmcunst.spring001.helloboot.HellobootApplication.main(HellobootApplication.java:11) ~[classes/:na]
Caused by: java.lang.NoClassDefFoundError: jakarta/servlet/http/HttpSessionContext
at org.eclipse.jetty.servlet.ServletContextHandler.newSessionHandler(ServletContextHandler.java:339) ~[jetty-servlet-11.0.15.jar:11.0.15]
at org.eclipse.jetty.servlet.ServletContextHandler.getSessionHandler(ServletContextHandler.java:432) ~[jetty-servlet-11.0.15.jar:11.0.15]
at org.eclipse.jetty.servlet.ServletContextHandler.relinkHandlers(ServletContextHandler.java:257) ~[jetty-servlet-11.0.15.jar:11.0.15]
at org.eclipse.jetty.servlet.ServletContextHandler.<init>(ServletContextHandler.java:180) ~[jetty-servlet-11.0.15.jar:11.0.15]
at org.eclipse.jetty.webapp.WebAppContext.<init>(WebAppContext.java:301) ~[jetty-webapp-11.0.15.jar:11.0.15]
at org.eclipse.jetty.webapp.WebAppContext.<init>(WebAppContext.java:228) ~[jetty-webapp-11.0.15.jar:11.0.15]
at org.springframework.boot.web.embedded.jetty.JettyEmbeddedWebAppContext.<init>(JettyEmbeddedWebAppContext.java:28) ~[spring-boot-3.1.2.jar:3.1.2]
at org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory.getWebServer(JettyServletWebServerFactory.java:159) ~[spring-boot-3.1.2.jar:3.1.2]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:183) ~[spring-boot-3.1.2.jar:3.1.2]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161) ~[spring-boot-3.1.2.jar:3.1.2]
... 8 common frames omitted
Caused by: java.lang.ClassNotFoundException: jakarta.servlet.http.HttpSessionContext
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
... 18 common frames omitted
Process finished with exit code 1
해결
build.gradle 파일에 아래 코드(dependencies 안의 testImplementation 2개, ext 부분) 추가
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.2'
id 'io.spring.dependency-management' version '1.1.2'
}
group = 'jmcunst.spring001'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-jetty'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// 추가된 부분
testImplementation 'org.eclipse.jetty:jetty-server:11.0.14'
testImplementation 'jakarta.servlet:jakarta.servlet-api:6.0.0'
}
tasks.named('test') {
useJUnitPlatform()
}
// 추가된 부분
ext {
set("jakarta-servlet.version", '5.0.0')
}
원인
이슈의 아래 부분에 보면 "java.lang.ClassNotFoundException: jakarta.servlet.http.HttpSessionContext"이 문제였다.
Caused by: java.lang.ClassNotFoundException: jakarta.servlet.http.HttpSessionContext
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
... 18 common frames omitted
자바 EE 8에서는 javax.servlet.http.HttpSessionContext 클래스가 사용되었지만, Java EE 9부터는 jakarta.servlet.http.HttpSessionContext 클래스로 변경되었기 때문에 발생한 것이다.
이러한 클래스 이름 변경은 자바 EE 9에서 Jakarta EE로 이름이 변경되면서 일어난 것이며, 이로 인해 클래스 패키지 이름도 변경되었다.
따라서 기존의 자바 EE 8에 맞는 라이브러리와 의존성을 사용하는 상황에서 자바 EE 9 이상의 클래스를 찾을 수 없는 문제가 발생한 것이다.
이럴 때 ext 블록을 사용하여 프로젝트의 의존성 버전을 설정해주면, 해당 변수를 의존성 선언에서 활용하여 필요한 버전의 라이브러리를 가져올 수 있다.
즉, jakarta-servlet.version 변수에 설정한 값인 '5.0.0'를 의존성 선언 부분에 적용하여 자바 EE 9 이상의 클래스를 가져온 것.
728x90
반응형
'TroubleShooting > Spring Issue' 카테고리의 다른 글
[Issue, Spring] Type definition error: [simple type, class com.test.user.domain.dto.UserJoinRequest] (0) | 2023.09.01 |
---|
Comments