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

升级Java与Spring Boot后启动报错:resourceUrlEncodingFilter Bean创建失败

解决Spring Boot 3.2.1 + Java 21 + Apache Tiles启动时resourceUrlEncodingFilter创建失败问题

核心原因

Spring Boot 3.x基于Jakarta EE 9+,原javax包已全面迁移为jakarta包,但Apache Tiles旧版本仍依赖javax.servlet相关API,这种依赖冲突会导致Spring无法正常创建resourceUrlEncodingFilter这类与Servlet上下文绑定的Bean。

具体修复方案

1. 升级Apache Tiles到Jakarta兼容版本

使用支持Jakarta EE的Tiles版本(3.1.0及以上),替换项目中旧的Tiles依赖:

Maven示例:

<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-spring</artifactId>
    <version>3.1.0</version>
</dependency>
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-jsp</artifactId>
    <version>3.1.0</version>
</dependency>

Gradle示例:

implementation 'org.apache.tiles:tiles-spring:3.1.0'
implementation 'org.apache.tiles:tiles-jsp:3.1.0'

2. 调整resourceUrlEncodingFilter配置(若手动配置过)

如果项目中手动注册了该Filter,需确保所有Servlet相关依赖都使用jakarta包:

@Bean
public FilterRegistrationBean<ResourceUrlEncodingFilter> resourceUrlEncodingFilter() {
    FilterRegistrationBean<ResourceUrlEncodingFilter> registrationBean = new FilterRegistrationBean<>();
    registrationBean.setFilter(new ResourceUrlEncodingFilter());
    registrationBean.addUrlPatterns("/*");
    return registrationBean;
}

检查导入语句,确保所有Servlet相关类来自jakarta.servlet包,而非旧的javax.servlet。

3. 清理过时配置

删除或更新项目中web.xml、Spring XML配置里针对resourceUrlEncodingFilter的旧版配置,避免与Spring Boot 3.x的自动配置逻辑冲突。

4. 排查依赖冲突

执行依赖树命令检查是否存在javax和jakarta Servlet API混合依赖:

  • Maven:mvn dependency:tree
  • Gradle:gradle dependencies
    发现javax.servlet相关依赖时,通过<exclusions>(Maven)或exclude(Gradle)排除。

5. 同步其他Servlet相关库版本

若项目使用JSTL等工具,需升级到Jakarta兼容版本(如JSTL 2.0+),确保整个Servlet生态依赖统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:56:00