servlet-api.jar冲突

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在多处引用到

servlet-api.jar冲突_第1张图片

附:
展开Dependencies-tree的maven命令:dependency:tree,执行后可在控制台输入依赖关系
servlet-api.jar冲突_第2张图片

解决方法就是加上红框内容,排除dubbo对servlet-api的依赖:
servlet-api.jar冲突_第3张图片

这样dubbo中就没有了对servlet-api的依赖了
servlet-api.jar冲突_第4张图片

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

在通过下面测试方法可以将过滤器的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());  

servlet-api.jar冲突_第6张图片

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

你可能感兴趣的:(项目构建)