背景:maven构建项目运行tomcat时,直接报CharacterEncodingFilter cannot be cast to javax.servlet.Filter,不能将编码转换过滤器转换成java识别的过滤器
原因:tomcat运行时会将tomcat的lib下面的包全部加在入内存中,如果项目中有相同的包,即便是不同版本都不可以会产生冲突
解决方法:在pom.xml中配置解析jsp和servlet的编译范围scope
<!-- java -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
scope的范围共有六种选择:
compile:默认值,随项目一直跟随
provided:希望容器,jdk或者使用者提供
runtime:只在运行期或测试期有用
system:需要显示提供依赖的jar包 ,maven仓库不会管理
test;只会在测试期间有用,发布的项目不带
import:用在dependency manager中,主要用来导入另外一个pom中的dependency mananger中申明的依赖