她与晚风 发表于 2023-5-10 03:52:47

Tomcat10中添加JSTL库的一些问题:foreach一使用就报错

<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%--引用核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--格式化标签库--%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%--sql标签库--%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

<%
    HashMap<String,String> hashMap = new HashMap<>();
    hashMap.put("userName","ly");
    hashMap.put("passWord","1234");
    request.setAttribute("hashMap",hashMap);
%>

<html>
    <head>
      <title>index</title>
    </head>
    <body>
      <c:out value="hello baby"></c:out>
      <c:forEach items="${hashMap}" var="s">
         ${s.key}
      </c:forEach>
    </body>
</html>

isdkz 发表于 2023-5-10 03:53:08

问题描述:在Tomcat10中添加JSTL库后,使用<c:forEach>标签时会出现错误。

解决方案:在Tomcat10中,需要将JSTL库的jar包放在Tomcat的lib目录下,而不是WEB-INF/lib目录下。如果仍然出现错误,可能是因为缺少EL库的jar包,可以将EL库的jar包也放在Tomcat的lib目录下。

另外,在JSP页面中使用JSTL标签库时,需要在JSP页面中引入标签库的命名空间。在本例中,需要在JSP页面的开头加入以下代码:

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

这样就可以正确使用<c:forEach>标签了。

她与晚风 发表于 2023-5-10 03:54:13

这个是我导入的包

她与晚风 发表于 2023-5-10 03:54:58

HTTP状态 500 - 内部服务器错误
类型 异常报告

消息 java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况

jakarta.servlet.ServletException: java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
        jakarta.servlet.http.HttpServlet.service(HttpServlet.java:631)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
根本原因。

java.lang.NoClassDefFoundError: jakarta/servlet/jsp/jstl/core/LoopTag
        java.base/java.lang.ClassLoader.defineClass1(Native Method)
        java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1013)
        java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
        org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2487)
        org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:865)
        org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1401)
        org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1245)
        org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1236)
        org.apache.jasper.compiler.Parser.parseElements(Parser.java:1469)
        org.apache.jasper.compiler.Parser.parse(Parser.java:138)
        org.apache.jasper.compiler.ParserController.doParse(ParserController.java:245)
        org.apache.jasper.compiler.ParserController.parse(ParserController.java:106)
        org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:211)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:396)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:372)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
        org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:396)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:380)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:328)
        jakarta.servlet.http.HttpServlet.service(HttpServlet.java:631)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
根本原因。

java.lang.ClassNotFoundException: jakarta.servlet.jsp.jstl.core.LoopTag
        org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1437)
        org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1245)
        java.base/java.lang.ClassLoader.defineClass1(Native Method)
        java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1013)
        java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
        org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2487)
        org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:865)
        org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1401)
        org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1245)
        org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1236)
        org.apache.jasper.compiler.Parser.parseElements(Parser.java:1469)
        org.apache.jasper.compiler.Parser.parse(Parser.java:138)
        org.apache.jasper.compiler.ParserController.doParse(ParserController.java:245)
        org.apache.jasper.compiler.ParserController.parse(ParserController.java:106)
        org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:211)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:396)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:372)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
        org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:396)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:380)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:328)
        jakarta.servlet.http.HttpServlet.service(HttpServlet.java:631)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
):注意 主要问题的全部 stack 信息可以在 server logs 里查看

她与晚风 发表于 2023-5-10 03:59:20

isdkz 发表于 2023-5-10 03:53
问题描述:在Tomcat10中添加JSTL库后,使用标签时会出现错误。

解决方案:在Tomcat10中,需要将JSTL库的ja ...

这个是Tomcat的lib目录吗

她与晚风 发表于 2023-5-10 04:02:59

isdkz 发表于 2023-5-10 03:53
问题描述:在Tomcat10中添加JSTL库后,使用标签时会出现错误。

解决方案:在Tomcat10中,需要将JSTL库的ja ...

zhege?

sfqxx 发表于 2023-5-10 07:29:56

在 Tomcat 10 中添加 JSTL 库时,可能会遇到以下一些问题:

1. 报错信息:`The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application`

解决方法:将 jstl-1.2.jar 和 standard-1.1.2.jar 放置在 WEB-INF/lib 目录下。

2. 报错信息:`According to TLD, tag c:forEach must be empty, but is not`

解决方法:将 `<c:forEach></c:forEach>` 转换为 `<c:forEach />`,或者在开始标签的位置添加 `</c:forEach>`(即闭合标签)。

3. 遍历 Map 对象时报错:`${s.key}` 无法输出 Map 的 Key 值。

解决方法:需要修改 `<c:forEach>` 标签中的属性值 items,从 `${hashMap}` 修改为 `${hashMap.entrySet()}`。这样在遍历 Map 的时候,就可以使用 `${s.key}` 输出 Key 的值,`${s.value}` 输出 Value 的值了。

修改后的代码如下所示:


<c:out value="hello baby"></c:out>
<c:forEach items="${hashMap.entrySet()}" var="s">
   ${s.key}
</c:forEach>

她与晚风 发表于 2023-5-10 13:04:16

sfqxx 发表于 2023-5-10 07:29
在 Tomcat 10 中添加 JSTL 库时,可能会遇到以下一些问题:

1. 报错信息:`The absolute uri: http://ja ...

在吗?哥,我弄好了,内个我又下了一个api-jar好像好了,这一直接关系吗

她与晚风 发表于 2023-5-10 13:06:15

sfqxx 发表于 2023-5-10 07:29
在 Tomcat 10 中添加 JSTL 库时,可能会遇到以下一些问题:

1. 报错信息:`The absolute uri: http://ja ...

我重换了一个jar包就好了{:9_232:}
页: [1]
查看完整版本: Tomcat10中添加JSTL库的一些问题:foreach一使用就报错