在学习Spring MVC 过程中,使用原来tomcat 9.0.x的配置方法出现错误 forEach标红 。以下是关于在Tomcat 10.1.x以及Tomcat 10.0.x上JSTL的配置。
在Tomcat 10.1.x上安装JSTL
Tomcat 10.1.x(第二个Jakartified版本,使用jakarta.*
软件包而不是javax.*
软件包,但第一个版本使用更新的jakarta.tags.*
namespace URNs而不是http://java.sun.com/jsp/jstl/*
命名空间URL),则使用默认的Mavencompile
范围通过此唯一依赖项使用JSTL 3.0。
需要在pom.xml下添加以下jar:
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>3.0.1</version>
</dependency>
非Maven用户可以通过在Web应用程序项目的/WEB-INF/lib
文件夹中删除以下两个物理文件来实现相同的目标(绝对不要将标准*.jar或任何松散的.tld文件放在那里!如有必要,请移除它们)。
- jakarta.servlet.jsp.jstl-3.0.1.jar(这是EE4J的JSTL 3.0.1 impl)
- jakarta.servlet.jsp.jstl-api-3.0.0.jar(这是JSTL 3.0 API)
如上所述,命名空间URI已更改为URN而不是URL。JSTL核心自JSTL版本3.0以来,可以通过URN格式的更易于记忆的命名空间URI获得:
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
此外,您还应该确保您的web.xml
至少符合Servlet 2.4,因此不作为Servlet 2.3或更早版本。否则,JSTL标签中的EL表达式将无法工作。选择与您的目标容器匹配的最高版本,并确保您没有<!DOCTYPE>
在您的web.xml
中的任何地方,否则仍会触发Servlet 2.3模式。以下是Servlet 6.0(Tomcat 10.1.x)兼容示例:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
<!-- Config here. -->
</web-app>
在Tomcat 10.0.x上安装JSTL
Tomcat 10.0.x(第一个Jakartified版本,带有jakarta.*
包而不是javax.*
包),则使用默认的Mavencompile
范围通过此唯一依赖项使用JSTL 2.0:
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>2.0.0</version>
</dependency>
非Maven用户可以通过在Web应用程序项目的/WEB-INF/lib
文件夹中删除以下两个物理文件来实现相同的目标(绝对不要将标准*.jar或任何松散的.tld文件放在那里!如有必要,请移除它们)。
- jakarta.servlet.jsp.jstl-2.0.0.jar(这是EE4J的JSTL 2.0 impl)
- jakarta.servlet.jsp.jstl-api-2.0.0.jar(这是JSTL 2.0 API)
这里有一个Servlet 5.0(Tomcat 10.0.x)兼容示例:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<!-- Config here. -->
</web-app>
我发现以上这些都设置完成后,forEach还会标红报错,但运行起来已经可以正常使用,可能是IDE还没有适应新的Jakarta吧(我猜的)!