You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 10中JSTL URI解析失败及Maven构建报错求助

解决方案:Maven构建失败与JSTL URI解析错误

一、解决Maven构建失败问题

构建报错的核心原因是maven-war-plugin:2.2版本过于老旧,不兼容Java 17。该版本插件依赖的Plexus组件在Java 9+模块化环境下无法正常访问Properties类的defaults字段。

修复步骤:

  • 在pom.xml的<build><plugins>中更新maven-war-plugin到兼容Java 17的版本,推荐使用3.3.2或更高版本:
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.3.2</version>
</plugin>
  • 可选:将maven-compiler-plugin升级到更适配Java 17的3.11.0版本,提升稳定性:
<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <release>17</release>
    </configuration>
</plugin>

二、解决JSTL URI解析失败问题

Tomcat 10基于Jakarta EE 9,所有Java EE相关API已迁移至jakarta.*包路径,JSTL的URI和依赖配置均需调整:

1. 修正JSP中的taglib URI

将BookList.jsp里的JSTL标签库声明替换为Jakarta版本的URI:

<%@ taglib prefix="c" uri="https://jakarta.ee/xml/ns/jakartaee/jstl/core" %>

2. 调整pom.xml中的JSTL依赖

原依赖缺少JSTL API包,需补充完整的Jakarta JSTL依赖组合(API+实现):

<dependencies>
    <!-- Jakarta JSTL API,由Tomcat容器提供,无需打包 -->
    <dependency>
        <groupId>jakarta.servlet.jsp.jstl</groupId>
        <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
        <version>2.0.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- Jakarta JSTL实现,仅运行时需要 -->
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jakarta.servlet.jsp.jstl</artifactId>
        <version>2.0.0</version>
        <scope>runtime</scope>
    </dependency>
    <!-- 补充Servlet/JSP API依赖,Tomcat已提供 -->
    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>5.0.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>jakarta.servlet.jsp</groupId>
        <artifactId>jakarta.servlet.jsp-api</artifactId>
        <version>3.0.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

三、完整修正后的pom.xml示例

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>BookStore</groupId>
  <artifactId>BookStore</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
          <release>17</release>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.3.2</version>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
        <groupId>jakarta.servlet.jsp.jstl</groupId>
        <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
        <version>2.0.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jakarta.servlet.jsp.jstl</artifactId>
        <version>2.0.0</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>5.0.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>jakarta.servlet.jsp</groupId>
        <artifactId>jakarta.servlet.jsp-api</artifactId>
        <version>3.0.0</version>
        <scope>provided</scope>
    </dependency>
  </dependencies>
</project>

四、验证步骤

  1. 执行mvn clean install,确认构建成功。
  2. 将生成的war包部署到Tomcat 10,访问对应路径,验证JSTL的<c:forEach>标签正常渲染列表。

内容的提问来源于stack exchange,提问作者A2S2nbgmr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:45:20