servlet-api.jar冲突

在进行SSM整合时遇到'java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter'报错,根源是servlet-api.jar冲突。解决方法包括检查并排除重复的servlet-api依赖,以及在引入javaee-api时指定'provided'范围,避免与项目中的其他依赖冲突。通过依赖树分析和测试方法定位问题,最终成功解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cannot be cast to javax.servlet.Filter 报错, 原因servlet-api.jar冲突

这几天在网上跑SSM整合例子的时候项目一直跑不起来,一直报以下错误

Exception starting filter charsetFilter
java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter

我在网上找了好久解决问题的方法,一直说是servlet-api的冲突,回想上次也遇到过这个错误,当时查看Dependencies-tree确实是因为servlet-api在多处引用到

这里写图片描述

附:
展开Dependencies-tree的maven命令:dependency:tree,执行后可在控制台输入依赖关系
这里写图片描述

解决方法就是加上红框内容,排除dubbo对servlet-api的依赖:
这里写图片描述

这样dubbo中就没有了对servlet-api的依赖了
这里写图片描述

而这次我查看了Dependencies-tree找不到有依赖servelt-api的,后来看到这篇博文
才找到原因:
我的项目依赖中引用了javaee的api,javaee-api-7.0.jar文件中也有Filter,所以 在引用 javaee-api 依赖的时候,pom.xml文件中对应的加上“provided”就可以了
如下:
这里写图片描述

在通过下面测试方法可以将过滤器的class加载jar包路径找到:

import javax.servlet.Filter;
import java.net.URL;

@Test  
public void get(){  
    URL url = Filter.class.getProtectionDomain().getCodeSource().getLocation();  
    System.out.println("path:"+url.getPath()+"  name:"+url.getFile());  

这里写图片描述

这样终于把困扰我一天的问题解决了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值