`

项目部署到Tomat报异常:jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending ...

阅读更多

项目部署到Tomcat报这样的异常:

jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

 

原因分析:

造成这种情况的原因很可能是以下两种情况:

一、项目的WEB-INF/lib下有servlet-api.jar,与Tomcat自带的servlet-api.jar冲突了。

二、项目的WEB-INF/lib下有包含javax.servlet包的其他JAR包(如WebLogic 8.1的weblogic.jar),造成与Tomcat自带的servlet-api.jar的冲突。

 

因为Tomcat的WebappClassLoader加载JAR包时会进行校验,一旦发现上述冲突就会报出上面的异常。

解决方案:

一、针对第一种情况,不要将servlet-api.jar放到WEB-INF/lib下,因为项目部署时根本不需要这个jar包,Tomcat已经提供了。当然如果工程不导入此jar包,代码可能会报错,你可以通过Eclipse把jar包导入到工程中即可,打war包时不要包含这个jar包。

二、针对第二种情况,谈谈我的解决办法,在我的项目中由于某种特殊的需求,weblogic.jar是通过自定义的类加载器加载的,而不是由Tomcat的WebappClassLoader加载,所以上述问题也就不存在了。如果您遇到同样的问题,可以借鉴此种方案,只需写一个最简单的类加载器即可。

分享到:
评论
6 楼 小宇宙_WZY 2017-07-27  
       
5 楼 燃木刀法 2016-09-06  
可以使用maven管理,scope设置为<scope>provided</scope>
4 楼 yunzhu 2012-05-18  
wufeng5202972 写道
您好,我遇到的是第2中问题,不知道 你现在有没有好的想法来解决这个问题?

没有。

因为就像文中说的,我在项目中是通过自定义的类加载器加载weblogic.jar的,servlet-api.jar则是通过Tomcat的WebappClassLoader加载的,而WebappClassLoader是自定义类加载器的父加载器,由于类加载器的委托机制,所以javax.servlet包下的类都是由WebappClassLoader从servlet-api.jar中加载的。

如果还有疑问,你把你的需求说一下,看我能不能帮你一起想想好的解决方案
3 楼 wufeng5202972 2012-05-18  
您好,我遇到的是第2中问题,不知道 你现在有没有好的想法来解决这个问题?
2 楼 yunzhu 2012-04-11  
hanyijun86 写道
但是,每部署一次就要去删一次,太麻烦了,有啥好的解决办法?


你是说哪种情况下?第一种还是第二种?

如果是第一种的话,比较简单,你自己项目的servlet-api.jar不要放在WEB-INF/lib下,可以放在工程下的一个专门的目录下面,然后通过Eclipse导入到工程中。

如果是第二种情况,我没有想到好的解决办法,我这边由于某种特殊的需求,我weblogic.jar是通过自定义的类加载器加载的,而不是由Tomcat的WebappClassLoader加载,所以文中所述的问题就不存在了。
1 楼 hanyijun86 2012-04-11  
但是,每部署一次就要去删一次,太麻烦了,有啥好的解决办法?

相关推荐

Global site tag (gtag.js) - Google Analytics