今天在开发中遇到了一个问题,项目中需要HttpServletRequest 和 HttpServletResponse 但是我项目是用maven启动的,需要手动导入servlet-api.jar包
我开始是这样导入的
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
但是项目中报了莫名其妙的错误
Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/WebappClassLoader) previously initiated loading for a different type with name "javax/servlet/ServletContext"
查到的原因以及解决办法
产生的原因是:tomcat中也有servlet-api包,这样,发生了冲突
解决方法:添加<scope>provided</scope>,因为provided表明该包只在编译和测试的时候用,所以,当启动tomcat的时候,就不会冲突了,完整依赖如下:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
很坑爹,开始报错的时候不知道是什么原因,以为代码有问题,之后才发现是导包的问题,浪费了一早上。