레벨업 일지

[에러] - 인텔리제이 스프링 JSTL 500 에러 본문

JAVA/spring

[에러] - 인텔리제이 스프링 JSTL 500 에러

24시간이모자란 2023. 6. 12. 02:52

환경

다음은 내 컴퓨터의 스프링 환경이다.

  • 스프링 버전 : 3.x.x
  • 사용IDE :  인텔리제이 
  • dependency 관리 : 메이븐 maven, pom.xml

 

문제

jsp 태그 라이브러리 인식을 못한다. 

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
org.apache.jasper.JasperException: /WEB-INF/views/home/main.jsp (line: [33], column: [4]) According to TLD or attribute directive in tag file, attribute [test] does not accept any expressions
	at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41) ~[tomcat-embed-jasper-11.0.0-M6.jar:11.0.0-M6]
	...
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

2023-06-12T02:06:49.832+09:00 ERROR 12320 --- [nio-3000-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [/WEB-INF/views/home/main.jsp (line: [33], column: [4]) According to TLD or attribute directive in tag file, attribute [test] does not accept any expressions] with root cause

org.apache.jasper.JasperException: /WEB-INF/views/home/main.jsp (line: [33], column: [4]) According to TLD or attribute directive in tag file, attribute [test] does not accept any expressions
r.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
 ..
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.8.jar:10.1.8]
	at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

 

 

원인

스프링 3.x.x 을 사용하는 개발자라면, 다음 두 가지 원인이 있다.

  1.  잘못된 태그라이브러리 Syntax
  2. JSTL 관련 의존성 파일이 없어서 

500 에러 답답하네

 

해결

1번 원인

  • 문제 원인이 1번이라면, 태그 라이브러리 문법을 확인하면 해결된다.

나의 경우 이렇게 jstl 태그 라이브러리 선언에 문제가 있었다

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/core"%>

 

다음 코드로 고친다. jstl 최신 버전에서는 이 문법으로 바뀌었다. 

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

 

2번 원인

  • maven 기준 다음 세 가지 의존성을 추가한다.
  • gradle은 아래 레포지토리 이름이나 밑에 참고 URL을 확인할 것.

<dependency>
   <groupId>jakarta.servlet</groupId>
   <artifactId>jakarta.servlet-api</artifactId>
   <version>6.0.0</version>
   <scope>provided</scope>
</dependency>

<dependency>
   <groupId>jakarta.el</groupId>
   <artifactId>jakarta.el-api</artifactId>
   <version>5.0.1</version>
</dependency>


<dependency>
   <groupId>jakarta.servlet.jsp.jstl</groupId>
   <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
   <version>3.0.0</version>
</dependency>

참고

https://docs.spring.io/spring-framework/reference/web/webmvc-view/mvc-jsp.html

 

JSP and JSTL :: Spring Framework

As of version 2.0, Spring provides a comprehensive set of data binding-aware tags for handling form elements when using JSP and Spring Web MVC. Each tag provides support for the set of attributes of its corresponding HTML tag counterpart, making the tags f

docs.spring.io

세 가지 의존성 URL

https://mvnrepository.com/artifact/jakarta.servlet.jsp/jakarta.servlet.jsp-api/3.1.1

https://mvnrepository.com/artifact/jakarta.el/jakarta.el-api/5.0.1

https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api/6.0.0

Comments