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());
这样终于把困扰我一天的问题解决了!