I´m trying to implement JSP & JSTL into my fresh spring boot application, but run into an error.
Current Setup:
In pom.xml i added:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- Need this to compile JSP -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
Within the AppConfig this is added:
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/view/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
registry.viewResolver(resolver);
}
The Test-Controller / called function is Setup like that:
@RequestMapping(path = "/listtest")
public String listTest(Model model) {
List<String> itemsTest = new ArrayList<>();
for(int i = 0; i < 300; i++){
itemsTest.add("test-Item " + i );
}
model.addAttribute("itemsTest", testItems);
return "items/testlist";
}
In test testlist.jsp i added this:
<!DOCTYPE HTML>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html lang="de">
<head>
<title>JSP TEST</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<table>
<tr>
<th>Column #1</th>
<th>Column #2</th>
<th>Column #3</th>
</tr>
<c:forEach items="${itemsTest}" var="testItem">
<tr>
<td><c:out value="${testItem}"/></td>
<td><c:out value="${testItem}"/></td>
<td><c:out value="${testItem}"/></td>
</tr>
</c:forEach>
</table>
</body>
Until the last Item, everything is working fine, but then two Exceptions are thrown:
Servlet.service() for servlet [jsp] threw exception
java.lang.AbstractMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
at javax.servlet.jsp.jstl.core.LoopTagSupport.unExposeVariables(LoopTagSupport.java:587) ~[jstl-1.2.jar:1.2]
at javax.servlet.jsp.jstl.core.LoopTagSupport.doFinally(LoopTagSupport.java:323) ~[jstl-1.2.jar:1.2]
at org.apache.jsp.WEB_002dINF.view.items.testlist_jsp._jspx_meth_c_005fforEach_005f0(testlist_jsp.java:134) ~[na:na]
at org.apache.jsp.WEB_002dINF.view.items.testlist_jsp._jspService(testlist_jsp.java:72) ~[na:na]
And
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [java.lang.AbstractMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;] with root cause
java.lang.AbstractMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
at javax.servlet.jsp.jstl.core.LoopTagSupport.unExposeVariables(LoopTagSupport.java:587) ~[jstl-1.2.jar:1.2]
at javax.servlet.jsp.jstl.core.LoopTagSupport.doFinally(LoopTagSupport.java:323) ~[jstl-1.2.jar:1.2]
at org.apache.jsp.WEB_002dINF.view.items.testlist_jsp._jspx_meth_c_005fforEach_005f0(testlist_jsp.java:134) ~[na:na]
at org.apache.jsp.WEB_002dINF.view.items.testlist_jsp._jspService(testlist_jsp.java:72) ~[na:na]
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) ~[jasper-runtime-5.5.23.jar:na]
Thats the output of the last two loops:
What am i doing wrong?