如何在IntelliJ+Maven+GlassFish7的Jakarta EE10项目中配置JSTL
解决Jakarta EE 10 + GlassFish 7中JSTL "cannot resolve taglib uri"问题
以下是针对你的环境(IntelliJ Ultimate、Maven、GlassFish 7、JDK 19、Jakarta EE 10)的具体解决方案:
1. 修正Maven依赖配置
GlassFish 7作为Jakarta EE 10兼容服务器,已经内置了JSTL 3.0的API和实现,无需单独添加jakarta.servlet.jsp.jstl-api依赖,否则会引发冲突。你的pom.xml只需保留Jakarta EE API的provided依赖:
<dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-api</artifactId> <version>10.0.0</version> <scope>provided</scope> </dependency>
如果一定要显式声明JSTL API,必须将其scope设为provided,避免与服务器内置库冲突:
<dependency> <groupId>jakarta.servlet.jsp.jstl</groupId> <artifactId>jakarta.servlet.jsp.jstl-api</artifactId> <version>3.0.0</version> <scope>provided</scope> </dependency>
2. 使用正确的Taglib URI
Jakarta EE 10对应JSTL 3.0,官方指定的核心标签库URI是jakarta.tags.core,旧的http://java.sun.com/jsp/jstl/core仅适用于JSTL 1.x(Java EE时代)。JSP中只需保留这一行声明:
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
3. 让IntelliJ识别Taglib
IDE无法解析URI通常是因为没有关联到JSTL库,按以下步骤操作:
- 打开
File → Project Structure → Modules,切换到Dependencies标签页 - 点击
+ → Library → From Maven,搜索jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0,添加并将其Scope设为Provided - 或者直接关联GlassFish内置库:点击
+ → Library → Java,找到GlassFish安装目录下的glassfish7/glassfish/modules/jakarta.servlet.jsp.jstl-api.jar和jakarta.servlet.jsp.jstl.jar,添加为库 - 最后点击右侧Maven面板的刷新按钮,重新加载项目依赖
4. 验证Web配置
确保web.xml使用Jakarta EE 10对应的Servlet 6.0版本,根元素配置如下:
<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"> <!-- 你的web配置 --> </web-app>
完成以上步骤后,IDE的"cannot resolve taglib uri"提示应该会消失,同时可以正常使用JSTL标签防范XSS(比如使用<c:out>标签自动转义输出内容)。
内容的提问来源于stack exchange,提问作者Benjamin BASSET
相关产品推荐
相关产品推荐

