Study/JAVA
스프링부트 3 에서 jstl 사용 시 에러 해결
ExcellEast
2023. 10. 9. 14:39
스프링부트 3을 이용하여 jsp와 jstl을 이용할때 아래와 같은 에러가 뜨는 경우가 있다.
ERROR 7332 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[.[mvcMemberListServlet] : Servlet.service() for servlet [mvcMemberListServlet] in context with path [] threw exception [java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator] with root cause
TagLibraryValidator 클래스를 찾을수 없단 에러인데 구글링 해본 결과 톰캣 10에서 호환되지 않는 문제가 있는거 같다. 몇시간 동안 열심히 구글링 해본 결과 아래와 같은 방법을 통해 이 문제를 일단락 매듭 지었다.
jstl을 사용하는 파일에서 taglib 지정:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
아래와 같은 build.gradle 설정
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'jakarta.servlet:jakarta.servlet-api:6.0.0'
//JSP 추가 시작
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
//새로 추가된 부분
implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0'
implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1'
//implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:1.2.4'
//implementation 'javax.servlet:jstl:1.2'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
//providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
위의 코드에서 아래의 설정을 넣어준 결과 원활히 실행되었다.
:
implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0'
implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1'